#ios #objective-c #email #ssl
#iOS #objective-c #Адрес электронной почты #ssl
Вопрос:
Я пытаюсь использовать SMTP для отправки электронной почты в моем приложении без использования почтовой системы iOS по умолчанию. Тем не менее, я получаю информацию о сбое SSL-квитирования. Означает ли это, что SMTP-сервер, который я пытаюсь использовать, запрещает мой запрос? Мы будем признательны за любой совет.
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)
Комментарии:
1.
telnet smtp.apps1010.com 25
зависает на мне. Не похоже, что там есть SMTP-сервер.
Ответ №1:
Перед отправкой STARTTLS вы должны убедиться, что вы прочитали полный ответ сервера на последнюю команду — в данном случае это было бы EHLO, которое заканчивается на 250 AUTH..
. После отправки вашей команды STARTTLS вам нужно дождаться ответа от сервера ( 220 Proceed
), и только после получения успешного ответа вам следует начать с квитирования TLS. И только после завершения подтверждения вы должны продолжить отправку команд внутри зашифрованного соединения.
Комментарии:
1. Я полагаю, что сервер ответил бы
HELO
рекламой, которая включаетSTARTTLS
. Если он есть, клиент может использовать TLS. Клиент должен использовать TLS, если сервер объявляет об этом, а сервер не может этого потребовать. Смотрите пример использования раздела 5 в RFC 3207, Расширение службы SMTP для обеспечения безопасности SMTP на транспортном уровне .2. Вы правы в том, что вы можете использовать STARTTLS, если сервер объявляет о его поддержке в ответе на EHLO, но вам все равно придется подождать, пока вы не получите полный ответ с отправкой вашей команды, и, что более важно, вы должны дождаться получения ответа на STARTTLS, чтобы начать с SSL-квитирования и отправлять дополнительные команды только после завершения квитирования. Это необходимо для выполнения чистого перехода на SSL на обоих узлах соединения.