web-dev-qa-db-ja.com

Django=メールの送信

私と同様の20の質問があることは知っていますが、Djangoで動作するメールを取得するために1日以上試みました。

このエラーが発生しています:[Errno 111] Connection refusedメールを送信しようとすると

これは私が電子メールを作成し、私のビューでそれを送信しようとする場所です:

try:
    msg = EmailMessage(subject, message, from_email, [receiver])
    msg.content_subtype = "html"
    msg.send()

私の設定ファイルは次のとおりです。

EMAIL_Host = "localhost"
DEFAULT_FROM_EMAIL = "[email protected]"
EMAIL_PORT = 25
EMAIL_BACKEND = "Django.core.mail.backends.smtp.EmailBackend"

私はpython -m smtpd -n -c DebuggingServer localhost:1025を使用してテスト送信を試みましたが成功しましたが、実際にそれを行うことになり、成功しません。

シェルからsend_mailを実行しようとすると、このトレースバックが表示されます。

>>> from Django.core.mail import send_mail
>>> send_mail('Test', 'Test', '[email protected]', ['[email protected]'])
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.6/dist-packages/Django/core/mail/__init__.py", line 61, in send_mail
    connection=connection).send()
  File "/usr/local/lib/python2.6/dist-packages/Django/core/mail/message.py", line 251, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/usr/local/lib/python2.6/dist-packages/Django/core/mail/backends/smtp.py", line 79, in send_messages
    new_conn_created = self.open()
  File "/usr/local/lib/python2.6/dist-packages/Django/core/mail/backends/smtp.py", line 42, in open
    local_hostname=DNS_NAME.get_fqdn())
  File "/usr/lib/python2.6/smtplib.py", line 239, in __init__
    (code, msg) = self.connect(Host, port)
  File "/usr/lib/python2.6/smtplib.py", line 295, in connect
    self.sock = self._get_socket(Host, port, self.timeout)
  File "/usr/lib/python2.6/smtplib.py", line 273, in _get_socket
    return socket.create_connection((port, Host), timeout)
  File "/usr/lib/python2.6/socket.py", line 561, in create_connection
    raise error, msg
error: [Errno 111] Connection refused

私はこれでどこにも行かないようです。どんな助けやアドバイスも大歓迎です。ありがとう

また、他に見たいことがあれば、コメントしてください。

32
Luke

Gmailアカウントを使用しようとしていますか?たぶんこれを試してください:

EMAIL_Host = 'smtp.gmail.com'
EMAIL_Host_USER = '[email protected]'
EMAIL_Host_PASSWORD = 'your-password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

次に、テスト(Django <1.4)を試みます

python manage.py Shell
>>> from Django.core.mail import send_mail
>>> send_mail('test email', 'hello world', to=['[email protected]'])

そして、Django 1.4を使用する場合、これを使用します:

python manage.py Shell
>>> from Django.core.mail import send_mail
>>> send_mail('test email', 'hello world', '[email protected]', ['[email protected]'])

Gmailアカウントを使用していないのに問題が解決しない場合は、EMAIL_Host_USERおよびEMAIL_Host_PASSWORDあなたが持っているものに。それでも問題が解決しない場合は、ネットワークがブロックしている可能性があります。 OSまたはルーターのファイアウォール。

更新された構文を提供してくれたkniteに感謝します。彼に+1を投げてください そして、Django 1.4

70
darren

最初にアプリケーション固有のパスワードを作成します

  1. Googleアカウントのセキュリティページ にアクセスします。 [2段階認証プロセス]をクリックします: enter image description here

  1. Googleアカウントのセキュリティページで_App passwords_をクリックしますenter image description here

  1. Appを作成し、Mailを選択して名前を付けます: enter image description here

  1. _App Password_を書き留めます: enter image description here

次に、適切な値をsettings.pyに追加します。

_EMAIL_Host = 'smtp.gmail.com'
EMAIL_Host_USER = '[email protected]'
EMAIL_Host_PASSWORD = 'Application spectific password(for eg: smbumqjiurmqrywn)'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
_

シェルを使用してテストできます。

_python manage.py Shell
>>> from Django.core.mail import send_mail
>>> send_mail('Test', 'This is a test', '[email protected]', ['[email protected]'],
     fail_silently=False)
_
38
suhailvs

@mongoose_zaには素晴らしい答えがありますが、Django 1.4+では構文が少し異なります。

の代わりに:

send_mail('test email', 'hello world', to=['[email protected]'])

使用する

send_mail('test email', 'hello world', '[email protected]', ['[email protected]'])

最初の4つの引数、subject、message、from_email、recipient_listが必要です。

17
knite
  1. Gmail設定でpop3を有効にします。
  2. このためのアプリケーション固有のパスワードを作成するDjango application。(http://support.google.com/accounts/bin/answer.py?hl=ja&answer=185833)
4
ameya1984

私はGMailの使用を避けます。いくつかのメールで機能しますが、その後、すべてのメールが拒否またはスパム缶に入れられていることがわかります。これを解決するためにDjango-SESでAmazonの「SES」サービスを使用しました。

3
Rich Jones

Settings.pyで、smtpをバックエンドとして使用し、コンソールではないを使用します

EMAIL_BACKEND = 'Django.core.mail.backends.smtp.EmailBackend'
1
user966588

サーバーのsettings.pyまたはlocal_settings.pyファイルに次の最小限の設定を追加します。

EMAIL_Host = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

多くの制限を課すsmtp.gmail.comを使用する代わりに、独自のメールサーバーを使用できます。

あなたはあなた自身のメールサーバーをインストールすることでそれを行うことができます:

Sudo apt-get install sendmail
0
user993563