您的位置:首页 > 运维架构 > Linux

JavaMail邮件发送在linux环境下不能发送的问题解决

2016-01-15 17:25 671 查看
今天做一个发送邮件的功能,在本机(Windows)环境下可以成功发送邮件,但部署到Linux服务器上后不能成功发送,也不提示错误。

通过修改代码,将方法 Session.getDefaultInstance() 改为 Session.getInstance(),具体如下:

public class SimpleMailSender {
public SimpleMailSender() {
}
public boolean sendTextMail(MailSenderInfo mailInfo) {
System.out.println("555555!");
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
if (mailInfo.isValidate()) {
// 如果需要身份认证,则创建一个密码验证器
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
//         Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
Session sendMailSession = Session.getInstance(pro,authenticator);
try {
// 根据session创建一个邮件消息
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO,to);
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(new Date());
// 设置邮件消息的主要内容
String mailContent = mailInfo.getContent();
mailMessage.setText(mailContent);
// 发送邮件
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
}


getDefaultInstance() 和getInstance() 的应用:

session在创建时首先会去系统缓存文件中找是否有properties存在 ,如果存在则加载默认的properties ,如果不存在才加载用户自己定义的properties 。

所以当一个应用为每个用户独立创建properties的时候,还是应该调用getInstance
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: