Ошибки при использовании электронной почты SSL SMTPLIB с адресом электронной почты 365 - PullRequest
0 голосов
/ 07 января 2020
context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.office365.com", 587, context=context) as server:

(587) Когда я запускаю это, я получаю ошибку SSL: [SSL: WRONG_VERSION_NUMBER] неправильный номер версии (_ssl. c: 1056).

(465) Я получаю тайм-аут ошибка.

Я пытался использовать порты 465 и 587. Я получаю разные ошибки при использовании разных портов. Я попробовал 995 только ради этого, и все равно не повезло. Если я использую свою учетную запись Gmail, у меня нет проблем.

Что мне нужно сделать, чтобы моя учетная запись электронной почты работала? Я также попробовал .SMTP () и все равно не повезло.

smtp = smtplib.SMTP("smtp.office365.com",587)
context = ssl.create_default_context()
with smtp.starttls(context=context) as server:
    server.login(from_address, password)

    for i, r in newhire[mask].iterrows():     
            server.sendmail(
                from_address,
                r["Email"],
                message.format(Employee=r["Employee Name"],
                   StartDate=r["StartDate"],
                               PC=r["PC"],
                               Title=r["Title"],
                               Email=r["Email"], 


                )
            )

1 Ответ

0 голосов
/ 07 января 2020

С документация по SMTP_SSL :

SMTP_SSL следует использовать в ситуациях, когда требуется SSL с начала соединения и использование starttls () не подходит.

Таким образом, SMTP_SSL предназначен для неявного SMTP, а общий порт для него - 465. Вместо этого порт 587 используется для явного SMTP, где выполняется простое подключение, а затем выполняется обновление до SSL с помощью команды STARTTLS.

Здесь происходит то, что клиент пытается передать SSL / TLS серверу, который не ожидает SSL / TLS на этом этапе и, таким образом, отвечает данными, не относящимися к TLS. Тем не менее они интерпретируются как TLS, что приводит к странному [SSL: WRONG_VERSION_NUMBER].

. Чтобы исправить это, либо используйте порт 465 (а не 587) с SMTP_SSL (не поддерживается Office365), либо используйте порт 587, но с starttls :

with smtplib.SMTP("smtp.office365.com", 587) as server:
     server.starttls(context=context)
...