Django 發送郵件
本章節涉及django的發郵件模塊send_mail、send_mass_mail、EmailMultiAlternatives
from
django.core.mail
import
send_mail
from
django.core.mail
import
send_mass_mail
from
django.core.mail
import
EmailMultiAlternatives
1. 配置相關參數
如果用的是 163的企業郵箱,settings配置類似於下面:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_USE_TLS = False EMAIL_HOST = 'smtp.163.com' EMAIL_PORT = 25 EMAIL_HOST_USER = 'from@163.com' EMAIL_HOST_PASSWORD = 'xxxx' DEFAULT_FROM_EMAIL = 'from@163.com'
DEFAULT_FROM_EMAIL = 'from<from@163.com>'
這樣別人收到的郵件中就會有你設定的名稱,如下形式:
發件人:from<from@163.com>
下面是一些常用的郵箱:
其它郵箱參數可能登陸郵箱看尋找幫助信息,也可以嘗試在搜索引擎中搜索:"SMTP 郵箱名稱",比如:"163 SMTP" 進行查找。
qq和163都容易失敗,不是技術的問題。建議使用阿里或騰訊企業郵箱來嘗試。2. 發送郵件:
2.1 官網的一個例子:
from django.core.mail import send_mail send_mail('Subject here', 'Here is the message.', 'from@example.com', ['to@example.com'], fail_silently=False)
2.2 一次性發送多個郵件:
from django.core.mail import send_mass_mail message1 = ('Subject here', 'Here is the message', 'from@example.com', ['first@example.com', 'other@example.com']) message2 = ('Another Subject', 'Here is another message', 'from@example.com', ['second@test.com']) send_mass_mail((message1, message2), fail_silently=False)
備注:send_mail 每次發郵件都會建立一個連接,發多封郵件時建立多個連接。而 send_mass_mail 是建立單個連接發送多封郵件,所以一次性發送多封郵件時 send_mass_mail 要優於 send_mail。
2.3 如果我們想在郵件中添加附件,發送 html 格式的內容
from django.conf import settings from django.core.mail import EmailMultiAlternatives from_email = settings.DEFAULT_FROM_EMAIL # subject 主題 content 內容 to_addr 是一個列表,發送給哪些人 msg = EmailMultiAlternatives(subject, content, from_email, [to_addr]) msg.content_subtype = "html" # 添加附件(可選) msg.attach_file('./twz.pdf') # 發送 msg.send()
上面的做法可能有一些風險,除非你確信你的接收者都可以閱讀 html 格式的 郵件。
為安全起見,你可以弄兩個版本,一個純文本(text/plain)的為默認的,另外再提供一個 html 版本的(好像好多國外發的郵件都是純文本的)
from __future__ import unicode_literals from django.conf import settings from django.core.mail import EmailMultiAlternatives subject = '標題' text_content = '郵件內容' html_content = '<p>郵件<strong>內容</strong></p>' msg = EmailMultiAlternatives(subject, text_content, from_email, [to@youemail.com]) msg.attach_alternative(html_content, "text/html") msg.send()