web-dev-qa-db-ja.com

STARTTLS拡張機能はサーバーでサポートされていません-Djangoとプライベートメールアドレスを介してメールを送信しようとすると、このエラーが発生します

Namecheap.comを使用してドメインとプライベートメールを登録しました。このプライベートメールからメールを送信しようとしています。しかし、タイトルにエラーがあります。

私のsettings.pyには、次の設定があります。

EMAIL_Host = 'mail.privateemail.com'
EMAIL_Host_USER = '[email protected]'
EMAIL_Host_PASSWORD = 'my password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_BACKEND = 'Django.core.mail.backends.smtp.EmailBackend'
DEFAULT_FROM_EMAIL = EMAIL_Host_USER

そして、私はビューを介して電子メールを送信しようとしています:

send_mail(
    'Subject here',
    'Here is the message.',
    '[email protected]',
    ['[email protected]'],
    fail_silently=False,
)

ただし、次のエラーが発生します。

SMTPException at /
STARTTLS extension not supported by server.

理由は何ですか?どんな助けでも大歓迎です。

編集

EMAIL_USE_TLSをFalseに変更し、それを削除して両方を個別にチェックした後、次のエラーが発生します。

SMTP AUTH extension not supported by server.

理由は何ですか?ありがとう!

8
darkhorse

サーバーmail.privateemail.comSTARTTLS SMTPCommnadが何であるかを知りません

これは2つの場合に発生する可能性があります。

  1. サーバー(mail.privateemail.com)は安全な通信をまったくサポートしていないため、暗号化されていないプレーンな通信を使用する必要があります。
  2. すでにSSLを通信として使用しているポートに接続しようとしているので、STARTTLSを使用して接続を安全にアップグレードしても意味がありません。
  3. サーバーが正しく構成されておらず、送信ポート(587)でSTARTTLSを無視します。

プレーンな通信を提供するポート587に接続していると判断すると、1または3のいずれかになります。

これを正しく機能させたい場合は、EMAIL_USE_TLS = Trueを削除するか、Falseに設定します。それ以外の場合は、SMTPサーバーの構成を修正する必要があります。

12
Jerzyk

settings.pyに次の変更を加えることで、TLSの代わりにSSLを試すことができます。

EMAIL_USE_SSL = True
EMAIL_PORT = 465

それが役立つことを願っています

2

メールサーバーでTLSを設定するか、EMAIL_USE_TLS = Falseを使用してください。

1
kichik

問題をまだ解決したかどうかはわかりません。最近、NameCheapの2か月間の無料のプライベートメールパッケージも試してみました。これが私のコードで、2018年1月の時点で機能します:

_import smtplib
from email.message import EmailMessage

fromaddr = '[email protected]'
toaddrs  = "[email protected]"
SMTPServer = 'mail.privateemail.com'
port = 465 #587
login = "[email protected]"
password = "password"

msg = EmailMessage()
msgtxt = "http://www.google.com"+"\n\n"+"This is a test."
msg.set_content(msgtxt)
msg['Subject'] = "Test message"
msg['From'] = fromaddr
msg['To'] = toaddrs

server = smtplib.SMTP_SSL(SMTPServer, port) #use smtplib.SMTP() if port is 587
#server.starttls()
server.login(login, password)
server.send_message(msg)
server.quit()
_

この助けを願っています!

PS。ポート587を使用することもできますが、smtplib.SMTP()の代わりにsmtplib.SMTP_SSL()を使用する必要があり、server.starttls()行のコメントを解除する必要もあります。

0
TerenceLam

サーバー名にポート番号を追加することで、以下のコード行を変更することで問題を解決できます。

server = smtplib.SMTP('mail.mycompany.com:587')     
0
SunilThorat