2014-07-03 203 views
1

我正尝试使用SMTP在我的应用中发送电子邮件,而不使用iOS默认邮件系统。 但是,我收到一个SSL握手失败的信息。 这是否意味着我试图使用禁止我的请求的SMTP服务器?任何建议将被认真考虑。iOS SSL握手失败

2014-07-03 18:04:20.266 MGM[267:4503] C: Attempting to connect to server at: smtp.apps1010.com:25 
2014-07-03 18:04:20.360 MGM[267:60b] *** stopping watchdog *** 
2014-07-03 18:04:20.361 MGM[267:60b] S: 220 pan.communilink.net ESMTP 
2014-07-03 18:04:20.361 MGM[267:60b] C: EHLO localhost 

2014-07-03 18:04:20.362 MGM[267:60b] *** starting short watchdog *** 
2014-07-03 18:04:20.370 MGM[267:60b] *** stopping watchdog *** 
2014-07-03 18:04:20.370 MGM[267:60b] S: 250-pan.communilink.net 
2014-07-03 18:04:20.377 MGM[267:60b] *** stopping watchdog *** 
2014-07-03 18:04:20.377 MGM[267:60b] S: 250-STARTTLS 
2014-07-03 18:04:20.378 MGM[267:60b] C: STARTTLS 

2014-07-03 18:04:20.378 MGM[267:60b] *** starting short watchdog *** 
2014-07-03 18:04:20.379 MGM[267:60b] *** stopping watchdog *** 
2014-07-03 18:04:20.379 MGM[267:60b] S: 250-PIPELINING 
2014-07-03 18:04:20.380 MGM[267:60b] *** stopping watchdog *** 
2014-07-03 18:04:20.381 MGM[267:60b] S: 250-8BITMIME 
2014-07-03 18:04:20.381 MGM[267:60b] *** stopping watchdog *** 
2014-07-03 18:04:20.381 MGM[267:60b] S: 250-SIZE 68000000 
2014-07-03 18:04:20.382 MGM[267:60b] *** stopping watchdog *** 
2014-07-03 18:04:20.382 MGM[267:60b] S: 250 AUTH LOGIN PLAIN CRAM-MD5 
2014-07-03 18:04:20.386 MGM[267:60b] *** stopping watchdog *** 
2014-07-03 18:04:20.386 MGM[267:60b] S: 220 Proceed. 
2014-07-03 18:04:20.387 MGM[267:60b] Beginning TLSv1... 
2014-07-03 18:04:20.388 MGM[267:60b] C: EHLO localhost 

2014-07-03 18:04:21.026 MGM[267:60b] CFNetwork SSLHandshake failed (-9807) 
+0

'telnet smtp.apps1010.com 25'挂在我身上。它看起来并不像那里有一个SMTP服务器。 – jww

回答

1

发送之前STARTTLS你必须确保,你已经从服务器读取最新命令的完整响应 - 在这种情况下,这将是EHLO与250 AUTH..结束。发送STARTTLS命令后,需要等待服务器的响应(220 Proceed),并且只有在获得成功响应后,才应该从TLS握手开始。只有握手完成后,您才应该继续在加密连接内发送命令。

+0

我相信服务器会用包含“STARTTLS”的广告回答“HELO”。如果在那里,客户端可以使用TLS。如果服务器通告TLS,客户端可以使用TLS,并且服务器不需要它。请参见[RFC 3207,SMTP传输层安全SMTP服务扩展](http://www.ietf.org/rfc/rfc3207.txt)中第5部分的使用示例。 – jww

+0

如果服务器在对EHLO的响应中宣布支持它,那么您可以使用STARTTLS,但是您仍然必须等到收到完整的响应后才发送您的命令,更重要的是,您必须等到获得响应STARTTLS以SSL握手开始并且仅在握手完成后发送更多命令。这需要在连接的两个站点上进行干净的SSL转换。 –