{"id":105,"date":"2014-12-30T16:20:27","date_gmt":"2014-12-30T08:20:27","guid":{"rendered":"http:\/\/vinta.ws\/code\/?p=105"},"modified":"2026-02-18T01:20:37","modified_gmt":"2026-02-17T17:20:37","slug":"sending-emails-in-django","status":"publish","type":"post","link":"https:\/\/vinta.ws\/code\/sending-emails-in-django.html","title":{"rendered":"Send Emails in Django"},"content":{"rendered":"<p>Sending emails with Amazon SES, Mailgun, Zoho, or Gmail in Django.<\/p>\n<h2>Configuration<\/h2>\n<p>in settings.py<\/p>\n<pre class=\"line-numbers\"><code class=\"language-py\">SERVER_EMAIL = 'noreply@mailer.hourmasters.com'\nDEFAULT_FROM_EMAIL = 'Hourmasters &lt;{0}&gt;'.format(SERVER_EMAIL)\nREPLY_TO_EMAIL = 'service@hourmasters.com'<\/code><\/pre>\n<h3>Amazon SES (Simple Email Service)<\/h3>\n<ol>\n<li>\u5728 Amazon SES \u4e0a\u9a57\u8b49\u4f60\u7684 domain<\/li>\n<li>\u5728\u4f60\u7684 email \u670d\u52d9\u5546\uff08\u4f8b\u5982 Google Apps\uff09\u4e0a\u5efa\u7acb\u4e00\u500b email \u5e33\u865f\uff0c\u4f8b\u5982 <code>no-reply@example.com<\/code><\/li>\n<li>\u5728 Amazon SES \u4e0a\u9a57\u8b49\u9019\u500b email \u5e33\u865f<\/li>\n<li>\u6536\u4fe1\uff0c\u9ede\u4e00\u4e0b\u78ba\u8a8d\u4fe1\u88e1\u7684\u8d85\u9023\u7d50<\/li>\n<li>\u5728 Amazon SES \u4e0a Request a Sending Limit Increase<\/li>\n<\/ol>\n<p>\u5982\u679c\u4f60\u6c92\u6709 Request a Sending Limit Increase<br \/>\n\u9810\u8a2d\u6703\u662f\u5728\u4e00\u500b sandbox \u88e1\u9762<br \/>\n\u4f60\u53ea\u80fd\u5bc4\u4fe1\u7d66\u4f60\u6709\u5728 Amazon SES \u4e0a\u9a57\u8b49\u904e\u7684 email \u5e33\u865f<\/p>\n<p>ref:<br \/>\n<a href=\"https:\/\/console.aws.amazon.com\/ses\/home\">https:\/\/console.aws.amazon.com\/ses\/home<\/a><\/p>\n<pre class=\"line-numbers\"><code class=\"language-bash\">$ pip install django-ses<\/code><\/pre>\n<pre class=\"line-numbers\"><code class=\"language-py\">EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\nEMAIL_HOST = 'email-smtp.us-east-1.amazonaws.com'\nEMAIL_HOST_USER = 'YOUR_AWS_ACCESS_KEY_ID'\nEMAIL_HOST_PASSWORD = 'YOUR_AWS_SECRET_ACCESS_KEY'\nEMAIL_PORT = 587\nEMAIL_USE_TLS = True<\/code><\/pre>\n<pre class=\"line-numbers\"><code class=\"language-bash\">$ python manage.py ses_email_address -l<\/code><\/pre>\n<p>ref:<br \/>\n<a href=\"https:\/\/github.com\/django-ses\/django-ses\">https:\/\/github.com\/django-ses\/django-ses<\/a><\/p>\n<h3>Mailgun<\/h3>\n<pre class=\"line-numbers\"><code class=\"language-py\">EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\nEMAIL_HOST = 'smtp.mailgun.org'\nEMAIL_HOST_USER = 'postmaster@mailer.goeasytaxi.com'\nEMAIL_HOST_PASSWORD = 'XXX'\nEMAIL_PORT = 587\nEMAIL_USE_TLS = True<\/code><\/pre>\n<p>\u5982\u679c\u539f\u672c\u5c31\u662f\u7528 <code>EMAIL_BACKEND = &#039;django.core.mail.backends.smtp.EmailBackend&#039;<\/code><br \/>\n\u53ef\u4ee5\u7121\u7e2b\u6539\u7528 <a href=\"https:\/\/github.com\/pmclanahan\/django-celery-email\">https:\/\/github.com\/pmclanahan\/django-celery-email<\/a><\/p>\n<p>ref:<br \/>\n<a href=\"http:\/\/www.mailgun.com\/pricing\">http:\/\/www.mailgun.com\/pricing<\/a><br \/>\n<a href=\"http:\/\/thingsilearned.com\/2011\/06\/07\/mailgun-as-an-smtp-server-for-django-apps\/\">http:\/\/thingsilearned.com\/2011\/06\/07\/mailgun-as-an-smtp-server-for-django-apps\/<\/a><\/p>\n<h3>Zoho<\/h3>\n<p>Django 1.7 \u4e4b\u524d\u6c92\u6709 <code>EMAIL_USE_SSL<\/code> \u9019\u500b\u8a2d\u5b9a<br \/>\n\u6240\u4ee5\u9023 zoho \u7684 mail server \u90fd\u6703 timeout<br \/>\n\u4f60\u53ef\u4ee5\u5b89\u88dd <code>django-smtp-ssl<\/code><\/p>\n<pre class=\"line-numbers\"><code class=\"language-py\">EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'\nEMAIL_HOST = 'smtp.zoho.com'\nEMAIL_HOST_USER = 'webmaster@goeasytaxi.com'\nEMAIL_HOST_PASSWORD = 'XXX'\nEMAIL_PORT = 465<\/code><\/pre>\n<p>ref:<br \/>\n<a href=\"https:\/\/github.com\/bancek\/django-smtp-ssl\">https:\/\/github.com\/bancek\/django-smtp-ssl<\/a><br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/18335697\/send-email-through-zoho-smtp\">https:\/\/stackoverflow.com\/questions\/18335697\/send-email-through-zoho-smtp<\/a><\/p>\n<h3>Gmail<\/h3>\n<pre class=\"line-numbers\"><code class=\"language-py\">EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\nEMAIL_HOST = 'smtp.gmail.com'\nEMAIL_HOST_USER = 'username@gmail.com'  # \u4e5f\u53ef\u4ee5\u662f Google App\nEMAIL_HOST_PASSWORD = 'XXX'\nEMAIL_PORT = 587\nEMAIL_USE_TLS = True<\/code><\/pre>\n<h2>Usage<\/h2>\n<p>in views.py<\/p>\n<pre class=\"line-numbers\"><code class=\"language-py\">from django.core.mail import EmailMessage\nfrom django.core.mail import send_mail\nfrom django.template.loader import render_to_string\n\nmail_context = {\n    'name': 'Vinta',\n    'email': 'vinta.chen@gmail.com',\n    'content': 'YOU SUCK',\n}\nmsg = EmailMessage(\n    subject='Subject',\n    body=render_to_string('email\/contact_email.html', mail_context),\n    from_email='whatever@domain.com',\n    to=['vinta.chen@gmail.com', 'someone@yahoo.com.tw'],\n    headers={'Reply-To': settings.REPLY_TO_EMAIL},\n)\nmsg.content_subtype = 'html'  # or 'plain'\nmsg.send()\n\n# or\n\nsend_mail(\n    'Subject',\n    'Message',\n    'YOUR NAME &lt;whatever@domain.com&gt;',\n    ['vinta.chen@gmail.com', 'someone@yahoo.com.tw']\n)<\/code><\/pre>\n<p>ref:<br \/>\n<a href=\"https:\/\/docs.djangoproject.com\/en\/dev\/topics\/email\/\">https:\/\/docs.djangoproject.com\/en\/dev\/topics\/email\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sending emails with Amazon SES, Mailgun, Zoho, or Gmail in Django.<\/p>\n","protected":false},"author":1,"featured_media":769,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,116],"tags":[16,13,2],"class_list":["post-105","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-about-python","category-about-web-development","tag-amazon-web-services","tag-django","tag-python"],"_links":{"self":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts\/105","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/comments?post=105"}],"version-history":[{"count":0,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts\/105\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/media\/769"}],"wp:attachment":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/media?parent=105"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/categories?post=105"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/tags?post=105"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}