2013-01-31 67 views
0

我使用此示例代碼:發送電子郵件給SSLProtocolException

http://www.jondev.net/articles/Sending_Emails_without_User_Intervention_%28no_Intents%29_in_Android

我想用我自己的郵件服務器發送電子郵件,而不打算在Android上。

我知道該示例被配置爲僅適用於Gmail。

我已經改變了:

_host = "smtp.myserver.com"; // default smtp server 
    _port = "587"; // default smtp port 
    _sport = "587"; // default socketfactory port 

,這在MainActivity:

Mail m = new Mail("[email protected]", "password"); //to my sever email 

我只設置在Outlook中的正確的信息,和它的作品,我可以發送和接收這封電子郵件。

服務器允許這種設置:

POP3 SMTP IMAP 郵局 移動 /PDA

問:

我需要添加/修改更多的東西?或者這個示例不能與其他gmail一起工作。

我得到了logcat的這個錯誤:

01-31 21:07:08.989: E/MailApp(17094): Could not send email 
    01-31 21:07:08.989: E/MailApp(17094): javax.mail.MessagingException: Could not connect to SMTP host: smtp.semhora.com, port: 587; 
    01-31 21:07:08.989: E/MailApp(17094): nested exception is: 
    01-31 21:07:08.989: E/MailApp(17094): javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x1e4490: Failure in SSL library, usually a protocol error 
    01-31 21:07:08.989: E/MailApp(17094): error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:683 0xad12957d:0x00000000) 
    01-31 21:07:08.989: E/MailApp(17094): at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1391) 
    01-31 21:07:08.989: E/MailApp(17094): at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412) 
    01-31 21:07:08.989: E/MailApp(17094): at javax.mail.Service.connect(Service.java:310) 
    01-31 21:07:08.989: E/MailApp(17094): at javax.mail.Service.connect(Service.java:169) 
    01-31 21:07:08.989: E/MailApp(17094): at javax.mail.Service.connect(Service.java:118) 
    01-31 21:07:08.989: E/MailApp(17094): at javax.mail.Transport.send0(Transport.java:188) 
    01-31 21:07:08.989: E/MailApp(17094): at javax.mail.Transport.send(Transport.java:118) 
    01-31 21:07:08.989: E/MailApp(17094): at com.example.sendemailtester.Mail.send(Mail.java:102) 
    01-31 21:07:08.989: E/MailApp(17094): at com.example.sendemailtester.MainActivity$1.onClick(MainActivity.java:33) 
    01-31 21:07:08.989: E/MailApp(17094): at android.view.View.performClick(View.java:2485) 
    01-31 21:07:08.989: E/MailApp(17094): at android.view.View$PerformClick.run(View.java:9080) 
    01-31 21:07:08.989: E/MailApp(17094): at android.os.Handler.handleCallback(Handler.java:587) 
    01-31 21:07:08.989: E/MailApp(17094): at android.os.Handler.dispatchMessage(Handler.java:92) 
    01-31 21:07:08.989: E/MailApp(17094): at android.os.Looper.loop(Looper.java:130) 
    01-31 21:07:08.989: E/MailApp(17094): at android.app.ActivityThread.main(ActivityThread.java:3687) 
    01-31 21:07:08.989: E/MailApp(17094): at java.lang.reflect.Method.invokeNative(Native Method) 
    01-31 21:07:08.989: E/MailApp(17094): at java.lang.reflect.Method.invoke(Method.java:507) 
    01-31 21:07:08.989: E/MailApp(17094): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
    01-31 21:07:08.989: E/MailApp(17094): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
    01-31 21:07:08.989: E/MailApp(17094): at dalvik.system.NativeStart.main(Native Method) 
    01-31 21:07:08.989: E/MailApp(17094): Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x1e4490: Failure in SSL library, usually a protocol error 

回答

3

我從來沒有使用這種包裝,但代碼是假設SSL支持,而它出現在端口587服務器不支持SSL。註釋掉這兩條線

props.put("mail.smtp.socketFactory.port", _sport); 
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 

,並設置爲true

props.put("mail.smtp.socketFactory.fallback", "false"); 

這條線從false這可能會助陣。

+0

如果我這樣做,我得到了:01-31 21:31:22.989:E/MailApp(18069):com.sun.mail.smtp.SMTPSendFailedException:550 5.7.1訪問被拒絕 01-31 21:31 :22.989:E/MailApp(18069):\t at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1515) – Marckaraujo

+0

您連接的SMTP服務器是否配置爲允許您通過它中繼郵件? 550 5.7.1訪問被拒絕意味着您的代碼已成功連接到SMTP服務器,但服務器拒絕您。 –

+0

我不知道,如果我可以在Outlook中使用這封電子郵件,這意味着它允許中繼郵件通過它或這意味着什麼? – Marckaraujo