Django 發送郵件


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 還可以寫成這樣:
DEFAULT_FROM_EMAIL = 'from<from@163.com>'

這樣別人收到的郵件中就會有你設定的名稱,如下形式:

     發件人:from<from@163.com>

下面是一些常用的郵箱:

163 郵箱    126 郵箱    QQ 郵箱 

其它郵箱參數可能登陸郵箱看尋找幫助信息,也可以嘗試在搜索引擎中搜索:"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()

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM