2012-05-06 35 views
2

我設置mail.transport屬性SMTPS,非常基本的信息旁邊,用於連接到服務器的SMTPS:的JavaMail返回SMTP作爲交通工具,而不是SMTPS

Properties p = new Properties(); 
    p.put("mail.transport.protocol", "smtps"); 
    p.put("mail.smtps.host", "smtp.gmail.com"); 
    p.put("mail.smtps.auth", true); 

    Session s = Session.getDefaultInstance(p,new Authenticator(){/*authenticator impl.*/}); 

    MimeMessage mm = new MimeMessage(s); /*then i set the subject, then the body... */ 
    mm.setRecipients(RecipientType.TO, "[email protected]"); 

而現在,我嘗試把我的消息。我想嘗試靜態方法;使用實例方法sendMessage它工作正常。那就是:

Transport.send(mm); 

它會嘗試連接,而不是一個SMTPS服務器到SMTP服務器。 JavaMail的實現內部的步進(順便說一句,我的版本是1.4.5),我發現,失敗的方法是:

transport = s.getTransport(addresses[0]); 

,因爲它返回一個SMTPTransport代替SMTPSSLTransport;即使我已將mail.transport.protocol屬性設置爲smtps,如您在第二行代碼中所看到的那樣。 我的手術車是否在任何地方,或者不可能通過Transport.send靜態方法發送smtps郵件?

+0

http://stackoverflow.com/questions/5515410/javamail-smtps-imaps –

回答

2

Bill Shannon(當前的JavaMail的維護者)建議在this question

擺脫所有的套接字工廠性質的;如果您使用的是合適的最新版本的JavaMail ,則不需要它們。有關如何配置JavaMail訪問Gmail的信息,請參閱 JavaMail FAQ。如果 仍然無法正常工作,您也可以在那裏找到調試技巧。

另外,將Session.getDefaultInstance更改爲Session.getInstance。

下面是從Javamail FAQ

String host = "smtp.gmail.com"; 
String username = "user"; 
String password = "passwd"; 

Properties props = new Properties(); 
props.put("mail.smtps.auth", "true"); 
props.put("mail.debug", "true"); 

MimeMessage msg = new MimeMessage(session); 
// set the message content here 

Transport t = session.getTransport("smtps"); 

try { 
    t.connect(host, username, password); 
    t.sendMessage(msg, msg.getAllRecipients()); 
} finally { 
    t.close(); 
} 
+2

爲什麼你使用實例屬性如果你沒有傳遞給任何其他方法? – softwareplay

2

Transport.send(msg)相關代碼查找與收件人電子郵件的相關的協議(S),收件人的每個type

所有收件人將InternetAddress ES,這have the type rfc822

這裏有三種方式設置JavaMail來使用RFC822地址SMTPS協議:

  1. 添加行rfc822=smtps在屬性文件javamail.address.mapjavamail.default.address.map(如the Session javadoc中所述)
  2. 調用s.setProtocolForAddress("rfc822", "smtps")`在您的實例化會話中(需要JavaMail 1.4或更高版本)
  3. 實例化會話時,設置該屬性mail.transport.protocol.rfc822smtps(需要的JavaMail 1.4.3或更高版本)
相關問題