JavaMail郵件傳送在linux環境下不能傳送的問題解決

afei3418發表於2016-01-15

今天做一個傳送郵件的功能,在本機(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

相關文章