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]に実際にメールを送信するにはどうすればよいですか?
あなたの答えを読んだ後、私は何かをまっすぐにさせてください:
Localhost(シンプルなubuntu pc)を使用して電子メールを送信できませんか?
Django 1.3ではsend_mail()
はやや廃止され、代わりにEmailMessage.send()
が使用されると思いましたか?
電子メールを実際の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
Django-admin.py startproject gmail
以下のコードで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
対話モードを実行します:python manage.py Shell
EmailMessageモジュールをインポートします。
from Django.core.mail import EmailMessage
メールを送信:
email = EmailMessage('Subject', 'Body', to=['[email protected]'])
email.send()
詳細については、 send_mail
と EmailMessage
の documents の機能を確認してください。
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メールを送信することに興味がある場合は、 これを確認してください 。
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のトリックを行いました
私のサイトは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」、つまり成功しました。そして、私もメールを受け取りました。 :)
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値に貼り付けます。
Djangoでメールを送信するための最も簡単な方法は、SendGridを使用することです。仕組みは次のとおりです。
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千件まで無料です。
私は実際にこれを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
"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)
遅いが、:
他の人が言及しているDEFAULT_FROM_EMAIL
修正に加えて、and安全性の低いアプリがアカウントにアクセスできるようにするために、 https: //accounts.google.com/DisplayUnlockCaptcha で問題のアカウントとしてサインインし、Djangoを取得して最終的に認証します。
IPアドレスが同じであることを確認するために、WebサーバーへのSSHトンネルを介してそのURLにアクセスしました。それが必要かどうかはよくわかりませんが、害はありません。次のように行うことができます:ssh -D 8080 -fN <username>@<Host>
、それからSOCKSプロキシとしてlocalhost:8080
を使用するようにWebブラウザーを設定します。
ForSendGrid-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)