web-dev-qa-db-ja.com

メールが失敗しました。 [SSL:UNKNOWN_PROTOCOL]不明なプロトコル(_ssl.c:645)

これは、認証されたSMTP(Gmailではない)を介して電子メールを送信することに関する質問です。以下のスクリプトは、このサイトでさまざまな質問と回答をまとめたものですが、この特定のツールの組み合わせの「グーグル可能な」候補がないというエラーが発生します。 Python 3.5.1で作業していますが、次のエラーが発生します:

メールが失敗しました。 [SSL:UNKNOWN_PROTOCOL]不明なプロトコル(_ssl.c:645)

これはクライアント側のエラーですか、それともサーバーですか?知らない証明書がいくつかありませんか? AFAIKサーバーはSSL認証をサポートしています。正しい方向への考えや微調整はありがたいです。

import sys
from smtplib import SMTP_SSL as SMTP
from email.mime.text import MIMEText

# credentials masked, obviously
SMTPserver = 'myserver'
sender = 'mymail'
destination = ['recipient']

USERNAME = "myusername"
PASSWORD = "mypass"

# typical values for text_subtype are plain, html, xml
text_subtype = 'plain'

content = """\
Test message
"""

subject = "Sent from Python"

try:
    msg = MIMEText(content, text_subtype)
    msg['Subject'] = subject
    msg['From'] = sender
    conn = SMTP(Host=SMTPserver, port=465)
    conn.set_debuglevel(False)
    conn.login(USERNAME, PASSWORD)

    try:
        conn.sendmail(sender, destination, msg.as_string())
    finally:
        conn.quit()

except Exception as exc:
    sys.exit("mail failed; %s" % str(exc))
7
Roman Luštrik

私の質問の下で両方のコメンテーターに感謝します。設定してSSLをナビゲートした後

from smtplib import SMTP as SMTP 

sTMPオブジェクトが作成されたらTLSを有効にします(正しい用語を使用していない場合はご容赦ください)

conn = SMTP(Host=SMTPserver, port=587)  # object created
conn.ehlo() 
conn.starttls()  # enable TLS
conn.ehlo()

メールを送ることができました。

enter image description here

9
Roman Luštrik

私も同じ問題を抱えていました。私はちょうどから変更しました:

EMAIL_USE_SSL = True

に:

EMAIL_USE_TLS = True
6
Gregory