Sending emails with Amazon SES, Mailgun, Zoho, or Gmail in Django.
Configuration
in settings.py
SERVER_EMAIL = '[email protected]'
DEFAULT_FROM_EMAIL = 'Hourmasters <{0}>'.format(SERVER_EMAIL)
REPLY_TO_EMAIL = '[email protected]'
Amazon SES (Simple Email Service)
- 在 Amazon SES 上驗證你的 domain
- 在你的 email 服務商(例如 Google Apps)上建立一個 email 帳號,例如
[email protected]
- 在 Amazon SES 上驗證這個 email 帳號
- 收信,點一下確認信裡的超連結
- 在 Amazon SES 上 Request a Sending Limit Increase
如果你沒有 Request a Sending Limit Increase
預設會是在一個 sandbox 裡面
你只能寄信給你有在 Amazon SES 上驗證過的 email 帳號
ref:
https://console.aws.amazon.com/ses/home
$ pip install django-ses
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'email-smtp.us-east-1.amazonaws.com'
EMAIL_HOST_USER = 'YOUR_AWS_ACCESS_KEY_ID'
EMAIL_HOST_PASSWORD = 'YOUR_AWS_SECRET_ACCESS_KEY'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
$ python manage.py ses_email_address -l
ref:
https://github.com/django-ses/django-ses
Mailgun
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.mailgun.org'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'XXX'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
如果原本就是用 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
可以無縫改用 https://github.com/pmclanahan/django-celery-email
ref:
http://www.mailgun.com/pricing
http://thingsilearned.com/2011/06/07/mailgun-as-an-smtp-server-for-django-apps/
Zoho
Django 1.7 之前沒有 EMAIL_USE_SSL
這個設定
所以連 zoho 的 mail server 都會 timeout
你可以安裝 django-smtp-ssl
EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'
EMAIL_HOST = 'smtp.zoho.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'XXX'
EMAIL_PORT = 465
ref:
https://github.com/bancek/django-smtp-ssl
https://stackoverflow.com/questions/18335697/send-email-through-zoho-smtp
Gmail
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = '[email protected]' # 也可以是 Google App
EMAIL_HOST_PASSWORD = 'XXX'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
Usage
in views.py
from django.core.mail import EmailMessage
from django.core.mail import send_mail
from django.template.loader import render_to_string
mail_context = {
'name': 'Vinta',
'email': '[email protected]',
'content': 'YOU SUCK',
}
msg = EmailMessage(
subject='Subject',
body=render_to_string('email/contact_email.html', mail_context),
from_email='[email protected]',
to=['[email protected]', '[email protected]'],
headers={'Reply-To': settings.REPLY_TO_EMAIL},
)
msg.content_subtype = 'html' # or 'plain'
msg.send()
# or
send_mail(
'Subject',
'Message',
'YOUR NAME <[email protected]>',
['[email protected]', '[email protected]']
)