2014-08-29 71 views
0

我想通過smtp服務器發送電子郵件。所以我使用javaMail API。 我的屬性是:用於SMTP認證的javaMail API加密SSL加密

Properties emailProperties = new Properties(); 
emailProperties.setProperty("mail.host", emailHost); 
emailProperties.setProperty("mail.transport.protocol", "smtps"); 
emailProperties.put("mail.smtps.auth", "true"); 
emailProperties.setProperty("mail.smtps.ssl.enable", "true"); 
emailProperties.setProperty("mail.smtps.ssl.required", "true"); 
emailProperties.put("mail.smtps.port", emailPort); 
emailProperties.put("mail.smtps.socketFactory.port", "465"); 
emailProperties.put("mail.smtps.socketFactory.class","javax.net.ssl.SSLSocketFactory"); 
emailProperties.put("mail.smtps.socketFactory.fallback", "false"); 
emailProperties.setProperty("mail.smtps.quitwait", "false"); 
Log.i("GMail", "Mail server properties set."); 
mailSession = Session.getInstance(emailProperties, this); 
mailSession.setDebug(true); 

當我檢查日誌,我得到:

08-29 07:58:50.037: I/System.out(2652): DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc.,1.4.1] 
08-29 07:58:50.107: I/System.out(2652): DEBUG SMTP: useEhlo true, useAuth true 
08-29 07:58:50.107: I/System.out(2652): DEBUG SMTP: useEhlo true, useAuth true 
08-29 07:58:50.107: I/System.out(2652): DEBUG SMTP: trying to connect to host "mail.gmx.net", port 465, isSSL false 
08-29 07:58:51.517: I/System.out(2652): 220 gmx.com (mrgmx001) Nemesis ESMTP Service ready 
08-29 07:58:51.517: I/System.out(2652): DEBUG SMTP: connected to host "mail.gmx.net", port: 465 
08-29 07:58:51.647: I/System.out(2652): EHLO localhost 
08-29 07:58:51.717: I/System.out(2652): 250-gmx.com Hello localhost [158.181.89.31] 
08-29 07:58:51.717: I/System.out(2652): 250-SIZE 69920427 
08-29 07:58:51.717: I/System.out(2652): 250 AUTH LOGIN PLAIN 
08-29 07:58:51.807: I/System.out(2652): DEBUG SMTP: Found extension "SIZE", arg "69920427" 
08-29 07:58:51.807: I/System.out(2652): DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN" 
08-29 07:58:51.807: I/System.out(2652): DEBUG SMTP: Attempt to authenticate 
08-29 07:58:51.817: I/System.out(2652): AUTH LOGIN 
08-29 07:58:51.897: I/System.out(2652): 334 VXNlcm5hbWU6 
08-29 07:58:51.907: I/System.out(2652): cmFtc2NoZmFjaEBnbXgubmV0 
08-29 07:58:51.977: I/System.out(2652): 334 UGFzc3dvcmQ6 
08-29 07:58:51.977: I/System.out(2652): RkZ3UzIwMDM= 
08-29 07:58:52.117: I/System.out(2652): 235 Authentication succeeded 
08-29 07:58:52.187: I/System.out(2652): DEBUG SMTP: use8bit false 
08-29 07:58:52.187: I/System.out(2652): MAIL FROM:<xxxx> 
08-29 07:58:52.317: I/System.out(2652): 250 Requested mail action okay, completed 
08-29 07:58:52.327: I/System.out(2652): RCPT TO:<yyyy> 
08-29 07:58:52.387: I/System.out(2652): 250 OK 
08-29 07:58:52.397: I/System.out(2652): DEBUG SMTP: Verified Addresses 
08-29 07:58:52.397: I/System.out(2652): DEBUG SMTP: yyyy 
08-29 07:58:52.397: I/System.out(2652): DATA 
08-29 07:58:52.467: I/System.out(2652): 354 Start mail input; end with <CRLF>.<CRLF> 
08-29 07:58:52.657: I/System.out(2652): From: "xxxx" <xxxx> 
08-29 07:58:52.657: I/System.out(2652): Sender: xxxx 
08-29 07:58:52.657: I/System.out(2652): To: yyyy 
08-29 07:58:52.657: I/System.out(2652): Message-ID: <-13212[email protected]> 
08-29 07:58:52.657: I/System.out(2652): Subject: test 
08-29 07:58:52.657: I/System.out(2652): MIME-Version: 1.0 
08-29 07:58:52.667: I/System.out(2652): Content-Type: text/html; charset=us-ascii 
08-29 07:58:52.727: I/System.out(2652): Content-Transfer-Encoding: 7bit 
08-29 07:58:52.727: I/System.out(2652): 
08-29 07:58:52.727: I/System.out(2652): bla blub 
08-29 07:58:52.727: I/System.out(2652): . 
08-29 07:58:52.797: I/System.out(2652): 250 Requested mail action okay, completed: id=0LcBBl-1Y6oXB3y7R-00jVvK 
08-29 07:58:52.797: I/System.out(2652): QUIT 

我不明白的是,我設置mail.transport.protocolsmtps但是當你讀了日誌,有你可以看到AUTH LOGIN PLAINPROVIDER你可以看到smtp。 那裏缺少什麼?我想強制SSL加密還是我的密碼,用戶名和文本已經發送加密了?

回答

1

由於您(不必要地)設置套接字工廠的方式,它使用SSL,但不告訴您它正在使用SSL。首先糾正這些common mistakes

+0

當我刪除'socetFactory'-Properties然後'isSSL'設置爲true。 但是在'AUTH'仍然有'LOGIN PLAIN'。這是什麼意思?我的用戶名和密碼是否被加密? – 2014-09-01 15:47:41

+0

他們是。如果isSSL爲true,則通過SSL建立連接。您可以使用網絡級別的數據包監視器進行驗證。 – 2014-09-02 04:58:51