try{
Properties props = System.getProperties();
props.put("mail.pop3.host", "pop.163.com");
props.put("mail.pop3.port", 110);
props.put("mail.pop3.starttls.enable", "true");
props.put("mail.pop3.socketFactory.port", 110);
props.put("mail.pop3.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.put("mail.pop3.socketFactory.fallback", "false");
Session session1 = Session.getInstance(props, null);
    session1.setDebug(true);
// 得到Store对象
Store store = session1.getStore("pop3");// 接收邮件用pop3
// 建立到服务器的连接
store.connect("pop.163.com", 110, "163邮件用户名", "邮件密码"); // 得到收件文件夹
Folder folder = store.getFolder("Inbox");
// 设置文件夹属性
folder.open(Folder.READ_WRITE);
// 获取文件夹中的邮件
Message messages[] = folder.getMessages();
for (Message msg : messages) {
// read from the stream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
msg.writeTo(baos);
String messageString = baos.toString();
System.out.println(messageString);
}
System.out.println("邮件读取成功!");
folder.close(true);
store.close();
} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
问题:  这段代码在用gmail和hotmail邮箱做测试时可以成功运行,并能正确读取邮箱中的邮件,但是当用163,126,yahoo,she等邮箱时就报如下错误: 
javax.mail.MessagingException: Connect failed;
  nested exception is:
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?  出现错误的代码是store.connect(host,port,username,password);这行。连接失败!查了很多资料说是出现了WAS安全认证过期异常,但一直都没找到解决的方案!请高手赐教!

解决方案 »

  1.   

    你要确定 163,126,yahoo,she 等邮箱支持 pop3,如果不支持就没辙了;听说现在申请的 163 邮箱是不支持的,很早以前的可以。
      

  2.   

    呵呵 刚写了一下,测试成功, 希望对楼主有帮助.
    package cn.com.mail;import java.util.Properties;import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;/**
     * 
     *FileName:SenderWithSMTPVer.java
     *
     *Desc:发送邮件
     * 
     *CreateDate:2009-06-20
     */
    public class SenderWithSMTPVer {
    String host = ""; String user = ""; String password = ""; public void setHost(String host) {
    this.host = host;
    } public void setAccount(String user, String password) {
    this.user = user;
    this.password = password;
    } /*
     * @param String 发件人的地址
       * @param String 收件人地址
       * @param String 邮件标题
       * @param String 邮件正文
      */
    public void send(String from, String to, String subject, String content) { Properties properties = new Properties();
    properties.put("mail.smtp.host", host);// 指定SMTP服务器
    properties.put("mail.smtp.auth", "true");// 指定是否需要SMTP验证
    try {
    Session mailSession = Session.getDefaultInstance(properties);
    mailSession.setDebug(true);// 是否再控制台上Debug信息.
    Message message = new MimeMessage(mailSession);
    message.setFrom(new InternetAddress(from));// 发件人
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(
    to));// 收件人
    message.setSubject(subject);// 邮件主题
    message.setText(content);// 邮件内容
    message.saveChanges();
    Transport transport = mailSession.getTransport("smtp");
    transport.connect(host, user, password);
    transport.sendMessage(message, message.getAllRecipients());
    transport.close();

    } catch (Exception e) {
    System.out.println(e);
    } } public static void main(String[] args) {
    SenderWithSMTPVer senderWithSMTPVer = new SenderWithSMTPVer();
    senderWithSMTPVer.setHost("smtp.163.com");//
    senderWithSMTPVer.setAccount("userName", "password");//发送邮件的邮箱用户名,密码
    senderWithSMTPVer.send("发件邮箱地址", "收件邮箱地址", "标题", "内容");
    }}
      

  3.   

    你这个接收邮件的协议好像只适用gmail,对于一般的用不了,网上找下,代码很多的