日期:2014-05-20  浏览次数:20836 次

JavaMail发送邮件smtp问题
/**这段代码发送邮件会报错,谁能帮我给我解决一下?
*/
public class TestJavamail {

public void sendEmail(String host,String from,final String username,final String password,String to){

// 创建Properties 对象
Properties props = System.getProperties();

// 添加smtp服务器属性
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port",25);


// 创建邮件会话
Session session = Session.getDefaultInstance(props, new Authenticator(){
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}

});

try {
// 定义邮件信息
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("我的邮件");

message.setText("天天测试,天天好心情!一般来说 邮件只是里含有这样的网址 是不会被视为垃圾邮件的为了以防万一 查看你的垃圾邮件 不用所有的都查 查到你朋友发给你邮件的日期就不用再往后查了 如果还是没有查到 就说明 你朋友的邮件没有发送成功 万一的确是在垃圾邮件里 选择 “这不是垃圾邮件” 以后同类邮件就不会被视为垃圾邮件了不同的email 运营商 其操作界面会略有不同 如果你是在研究不出来 发消息告诉我 你的邮箱是哪一种的(雅虎的 还是 hotamail的 还是gmail的 等等) 我再帮你看看");
// 发送消息
session.getTransport("smtp").send(message);  
System.out.println("SendMail Process Over!");

} catch (MessagingException e) {
System.out.println("报错了!");
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
TestJavamail tj=new TestJavamail();
tj.sendEmail("smtp.126.com", "发件箱", "账户","密码", "收件箱");
tj.sendEmail("smtp.sina.com", "发件箱", "账户","密码", "收件箱" );
}

}

------解决方案--------------------
我看到你给我的留言了,我试了试。发现是Session.getDefaultInstance这个的问题。
从处理流程中可以看出,首先是从缓存中查找是否有properties存在
如果存在,则加载默认的properties
如果不存在才加载用户自己定义的properties,
所以当一个应用为每个用户独立创建properties的时候,还是应该调用getInstance,
除非你希望有一个默认的properties让用户使用。