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

今天做一个发送邮件的功能,在本机(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


版权声明:本文为afei3418原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。