web-dev-qa-db-ja.com

Django経由でメールを送信する方法は?

settings.pyには、次のものがあります。

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

# Host for sending e-mail.
EMAIL_Host = 'localhost'

# Port for sending e-mail.
EMAIL_PORT = 1025

# Optional SMTP authentication information for EMAIL_Host.
EMAIL_Host_USER = ''
EMAIL_Host_PASSWORD = ''
EMAIL_USE_TLS = False

私のメールコード:

from Django.core.mail import EmailMessage
email = EmailMessage('Hello', 'World', to=['[email protected]'])
email.send()

もちろん、python -m smtpd -n -c DebuggingServer localhost:1025経由でデバッグサーバーをセットアップすると、端末でメールを見ることができます。

ただし、デバッグサーバーではなく[email protected]に実際にメールを送信するにはどうすればよいですか?

あなたの答えを読んだ後、私は何かをまっすぐにさせてください:

  1. Localhost(シンプルなubuntu pc)を使用して電子メールを送信できませんか?

  2. Django 1.3ではsend_mail()はやや廃止され、代わりにEmailMessage.send()が使用されると思いましたか?

139
Derek

電子メールを実際のSMTPサーバーに送信します。独自に設定したくない場合は、Google自身など、企業を運営する企業を見つけることができます。

DjangoのSMTPサーバーとしてGmailを使用しています。接尾辞や他のサーバーを扱うよりもはるかに簡単です。私はメールサーバーを管理する仕事をしていません。

Settings.pyで:

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

NOTE:2016年、Gmailはこれをデフォルトで許可しなくなりました。 Sendgridなどの外部サービスを使用するか、Googleのこのチュートリアルに従ってセキュリティを下げることができますが、このオプションを許可できます。 https://support.google.com/accounts/answer/6010255

158
Jordan
  1. プロジェクトを作成します:Django-admin.py startproject gmail
  2. 以下のコードでsettings.pyを編集します。

    EMAIL_BACKEND = 'Django.core.mail.backends.smtp.EmailBackend'
    EMAIL_USE_TLS = True
    EMAIL_Host = 'smtp.gmail.com'
    EMAIL_Host_USER = '[email protected]'
    EMAIL_Host_PASSWORD = 'email_password'
    EMAIL_PORT = 587
    
  3. 対話モードを実行します:python manage.py Shell

  4. EmailMessageモジュールをインポートします。

    from Django.core.mail import EmailMessage
    
  5. メールを送信:

    email = EmailMessage('Subject', 'Body', to=['[email protected]'])
    email.send()
    

詳細については、 send_mailEmailMessagedocuments の機能を確認してください。

Gmailの更新

また、Gmail経由でメールを送信できない場合は、Googleから このガイド を確認してください。

Googleアカウントの設定で、Security > Account permissions > Access for less secure appsに移動し、このオプションを有効にします。

また、 Gmailのアプリ固有のパスワードを作成2-step-verification をオンにしました。

次に、設定でアプリ固有のパスワードを使用する必要があります。したがって、次の行を変更します。

    EMAIL_Host_PASSWORD = 'your_email_app_specific_password'

また、HTMLメールを送信することに興味がある場合は、 これを確認してください

29
Alex Jolig

Djangoバージョン1.7の場合、上記のソリューションが機能しない場合は、次を試してください

in settings.py add

#For email
EMAIL_BACKEND = 'Django.core.mail.backends.smtp.EmailBackend'

EMAIL_USE_TLS = True

EMAIL_Host = 'smtp.gmail.com'

EMAIL_Host_USER = '[email protected]'

#Must generate specific password for your app in [gmail settings][1]
EMAIL_Host_PASSWORD = 'app_specific_password'

EMAIL_PORT = 587

#This did the trick
DEFAULT_FROM_EMAIL = EMAIL_Host_USER

最後の行はDjango 1.7のトリックを行いました

13
Cognoscis

私のサイトはGoDaddyでホストされており、同じサイトにプライベートメールが登録されています。これらは私のために働いた設定です:

Settings.pyで:

EMAIL_Host = 'mail.domain.com'
EMAIL_Host_USER = '[email protected]'
EMAIL_Host_PASSWORD = 'abcdef'
DEFAULT_FROM_EMAIL = '[email protected]'
SERVER_EMAIL = '[email protected]'
EMAIL_PORT = 25
EMAIL_USE_TLS = False

シェルで:

from Django.core.mail import EmailMessage
email = EmailMessage('Subject', 'Body', to=['[email protected]'])
email.send()

その後、O/Pとして「1」、つまり成功しました。そして、私もメールを受け取りました。 :)

12
ibaggu

Settings.pyでsmtp as backendを使用する必要があります

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

コンソールとしてバックエンドを使用する場合、コンソールで出力を受け取ります

EMAIL_BACKEND = 'Django.core.mail.backends.console.EmailBackend'

また、さらに以下の設定

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

このためにgmailを使用している場合は、2段階認証およびアプリケーション固有のパスワードを設定し、そのパスワードをコピーして上記のEMAIL_Host_PASSWORD値に貼り付けます。

10
user966588

Djangoでメールを送信するための最も簡単な方法は、SendGridを使用することです。仕組みは次のとおりです。

  1. SendGridアカウントの作成 (およびメールの確認)
  2. 以下をsettings.pyに追加します。EMAIL_Host = 'smtp.sendgrid.net' EMAIL_Host_USER = '<your sendgrid username>' EMAIL_Host_PASSWORD = '<your sendgrid password>' EMAIL_PORT = 587 EMAIL_USE_TLS = True

そして、あなたはすべて設定されています!

メールを送信するには:

from Django.core.mail import send_mail
send_mail('<Your subject>', '<Your message>', '[email protected]', ['[email protected]'])

500内部サーバーエラーが発生するたびにDjangoからメールを受け取るには、settings.pyに次を追加します。

DEFAULT_FROM_EMAIL = '[email protected]'
ADMINS = [('<Your name>', '[email protected]')]

SendGridを使用した電子メールの送信は、1か月あたり最大1万2千件まで無料です。

4
yndolok

私は実際にこれをDjangoからしばらく前に行っていました。正規のGMailアカウントを開き、ここに資格情報を入力します。これが私のコードです-

from email import Encoders
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart

def sendmail(to, subject, text, attach=[], mtype='html'):
    ok = True
    gmail_user = settings.EMAIL_Host_USER
    gmail_pwd  = settings.EMAIL_Host_PASSWORD

    msg = MIMEMultipart('alternative')

    msg['From']    = gmail_user
    msg['To']      = to
    msg['Cc']      = '[email protected]'
    msg['Subject'] = subject

    msg.attach(MIMEText(text, mtype))

    for a in attach:
        part = MIMEBase('application', 'octet-stream')
        part.set_payload(open(attach, 'rb').read())
        Encoders.encode_base64(part)
        part.add_header('Content-Disposition','attachment; filename="%s"' % os.path.basename(a))
        msg.attach(part)

    try:
        mailServer = smtplib.SMTP("smtp.gmail.com", 687)
        mailServer.ehlo()
        mailServer.starttls()
        mailServer.ehlo()
        mailServer.login(gmail_user, gmail_pwd)
        mailServer.sendmail(gmail_user, [to,msg['Cc']], msg.as_string())
        mailServer.close()
    except:
        ok = False
    return ok
3

"Test Mail Server Tool"を使用して、マシンまたはlocalhostでの電子メール送信をテストできます。 Googleおよび「Test Mail Server Tool」をダウンロードしてセットアップします。

それからsettings.pyで:

EMAIL_BACKEND= 'Django.core.mail.backends.smtp.EmailBackend'
EMAIL_Host = 'localhost'
EMAIL_PORT = 25

シェルから:

from Django.core.mail import send_mail
send_mail('subject','message','sender email',['receipient email'],    fail_silently=False)
2
Allan Guwatudde

遅いが、:

他の人が言及しているDEFAULT_FROM_EMAIL修正に加えて、and安全性の低いアプリがアカウントにアクセスできるようにするために、 https: //accounts.google.com/DisplayUnlockCaptcha で問題のアカウントとしてサインインし、Djangoを取得して最終的に認証します。

IPアドレスが同じであることを確認するために、WebサーバーへのSSHトンネルを介してそのURLにアクセスしました。それが必要かどうかはよくわかりませんが、害はありません。次のように行うことができます:ssh -D 8080 -fN <username>@<Host>、それからSOCKSプロキシとしてlocalhost:8080を使用するようにWebブラウザーを設定します。

2
James Johnson

ForSendGrid-Django具体的には:

SendGrid Djangoここのドキュメント

これらの変数を

settings.py

EMAIL_Host = 'smtp.sendgrid.net'
EMAIL_Host_USER = 'sendgrid_username'
EMAIL_Host_PASSWORD = 'sendgrid_password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

views.py

from Django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', '[email protected]', ['[email protected]'], fail_silently=False)
1
Deepak Sharma