2012-10-12 66 views
0

我想使用Gmail的SMTP服務器發送郵件。你能告訴我爲什麼當我運行波紋管代碼時它不會連接到服務器。無法使用javax.mail發送到Gmail SMTP

import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.MimeMessage; 

public class SendTrick { 

    public static void main(String[] args) { 
    Properties props = new Properties(); 
    props.put("mail.smtp.host", "465"); 
    props.put("mail.from", "[email protected]"); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    Session session = Session.getInstance(props, null); 

    try { 
     MimeMessage msg = new MimeMessage(session); 
     msg.setFrom(); 
     msg.setRecipients(Message.RecipientType.TO, 
          "[email protected]"); 
     msg.setSubject("JavaMail hello world example"); 
     msg.setText("Hello, world!\n"); 
     Transport.send(msg); 
    } catch (MessagingException mex) { 
     System.out.println("send failed, exception: " + mex); 
    } 
    } 
} 

日誌中的例外是

發送失敗,異常:javax.mail.MessagingException的:無法 連接到SMTP主機:smtp.gmail.com端口:25;嵌套的例外是: java.net.ConnectException:連接被拒絕:連接

+0

請提供一個堆棧跟蹤。 –

+1

仔細看看你的屬性地圖,特別是'mail.smtp.host' ... – home

+0

你的代碼似乎沒有被服務器認證。這是一個故意的涵義嗎? –

回答

3

您沒有設置mail.smtp.port,因爲有對物業mail.smtp.host的複製錯字,因此默認端口25正在使用,如詳細例外。

GMail的SMTP未在端口25上運行,這就是連接被拒絕的原因。從Set up POP in mail clients,它看起來應該是465或587,所以你有一個有效的值,但屬性鍵是不正確的。

編輯:

您需要使用正確的屬性鍵的端口:

props.put("mail.smtp.port", "465"); // <-- use the word "port", not "host" 

這是固定後,你可能還會發現身份驗證問題,如在評論中已經指出,除非你故意排除javax.mail.Authenticator代碼。

編輯2:

正如我提到的,你可能需要指定附加屬性認證成功,並與SMTP服務器的授權,例如:

props.put("mail.smtp.starttls.enable", "true"); 

但是,既然你是使用端口465進行SSL連接,您還需要指定其他SSL屬性,例如mail.smtp.socketFactory.class

+0

即使提及它爲gmail端口「465」,顯示如發送失敗,異常:「javax.mail.MessagingException:無法連接到SMTP主機:smtp.gmail.com,端口:25; 嵌套的異常是: \t java.net.ConnectException:連接被拒絕:連接「謝謝 – Bamadeva

+0

非常仔細閱讀'port:25'部分的異常。它顯示你正試圖連接端口25. – andyb

+0

我編碼'props.put(「mail.smtp.host」,「465」);'所以我需要在這裏做Andyb ..甚至587不工作。 – Bamadeva