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安全认证过期异常,但一直都没找到解决的方案!请高手赐教!
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("发件邮箱地址", "收件邮箱地址", "标题", "内容");
}}