簡介:
雖然python提供了smtplib庫,來完成email的傳送功能,但是django對其進行了封裝,使得傳送郵件的介面變得更簡單,更方便,django的封裝位於django.core.mail
例子:
from django.core.mail import send_mail
send_mail('subject here', 'here is the message.', '[email protected]', ['[email protected]'], fail_silently=false)
郵件的傳送通過django的setting檔案中設定的 email_port、 email_host_user、email_host_password來認證smtp伺服器、 email_use_tls用來說明傳送的時候是否使用乙個安全的連線來進行, default_charset用來指定傳送郵件的字符集。
定義:
(1)send_mail(subject, message, from_email, recipient_list, fail_silently=false, auth_user=none,auth_password=none)
作用:傳送乙個郵件
subject:郵件的標題
message:郵件的內容
from_email:傳送郵件者
nbsp; recipient_list:接受郵件者列表
fail_silently:可選引數,預設是false,如果是false,則傳送失敗時候,會丟擲smtplib.smtpexception異常,具體詳細的異常,
請參考
smtplib docs,這些異常都是smtpexception的子類。
auth_user:可選的引數,如果有,那麼認證smtp server時,使用該使用者,否則使用
email_host_user設定
auth_password:可選引數,如果有,那麼認證smtp server時,使用該密碼,否則使用
、email_host_password設定
(2)send_mass_mail(
datatuple,
fail_silently=false,
auth_user=none,
auth_password=none)
datatuple:是乙個元組,其格式如下:
(subject,message,from_email,recipient_list)
作用:傳送一組郵件
fail_silently, auth_user and auth_password三個引數的意義同send_mail
send_mail每次傳送郵件都開啟乙個新的連線來傳送。
send_mass_mail每次傳送郵件時僅僅開啟乙個連線,將這次元組中的所有郵件傳送出去。
所以send_mass_mail更有效率。
兩個給管理員傳送郵件的快捷方式
mail_adminsem>subject, message, fail_silently=false)
和mail_managersem>subject, message, fail_silently=false)
這兩個方法在傳送郵件時注意以下兩點:
(1)郵件的標題前面django會自動加上 email_subject_prefix中設定的字首,預設是"[django"。
(2)郵件的傳送者將是由server_email來設定
(3)郵件的接受者將是 managers 和 admins來設定
上面提供的email函式,僅僅能夠提供最基本的傳送郵件的功能,其他的諸如:檔案附件和多**email都需要emailmessage類來提供。
emailmessage建構函式的所有引數如下所示,所有引數都是可選的
subject:郵件的標題
body:郵件的正文,這個字段應該是純文字檔案
from_email:傳送者的郵件位址,[email protected] 和 fred ,這兩種格式都是合法的,
如果該欄位沒有設定的話,將使用setting中的
default_from_email
to:所有接收人組成的乙個元組
bcc:所有秘密抄送人組成的乙個元組
connection:傳送郵件是使用的smtpconnection連線,如果不適用該欄位,那麼每次傳送郵件時都會新建
乙個smtpconnection物件
attachments:附件列表,能是email.mimebase.mimebase例項,或者(filename, content, mimetype)元組
headers:郵件頭欄位,如果要增加額外的郵件頭,請用該字段,關鍵字是key,值是value。
例如:
email = emailmessage('hello', 'body goes here', '[email protected]',
['[email protected]', '[email protected]'], ['[email protected]'],
headers = )
該類有下列方法可用:
(1)send(fail_silently=false) 傳送郵件,如果fail_silently=false時,出錯將拋擲異常
(2)message() 返回乙個django.core.mail.safemimetext型別的物件或者django.core.mail.safemimemultipart型別的物件。
(3)recipients() 獲取傳送人列表,包括to和bcc的所有傳送人
(4)attach() 向郵件中增加附件,其引數可以是email.mimebase.mimebase的例項,或者是filename, content and mimetype,
其中filename是附件中呈現的檔名,content是附件的資料,mimetype是附件的mime型別
例如:message.attach('design.png', img_data, 'image/png')
(5)attach_file() 直接從檔案系統中向郵件新增附件,如果mime型別沒有填寫,那麼django會根據檔名推測出來。
例如:message.attach_file('/images/weather_map.png')
emailmultialternatives
使用emailmessage中傳送郵件的內容,只能是一種型別的"text/html"或者"text/plain"。但是實際應用中,
我們可能會一封郵件中既有
text/html的內容,又有text/plain的內容,這個時候可以使用emailmultialternatives
類,他是emailmessage的子類,他有乙個方法attach_alternative() ,可以讓郵件中包括多種形式的內容
例如:
from django.core.mail import emailmultialternatives
subject, from_email, to = 'hello', '[email protected]', '[email protected]'
text_content = 'this is an important message.'
html_content = 'this is animportantmessage.
'msg = emailmultialternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.send()
emailmessage的型別修改
emailmessage的型別預設情況下是"text/plain",可以通過修改subtype屬性,使得型別變成"text/html"
例如:
msg = emailmessage(subject, html_content, from_email, [to])
msg.content_subtype = "html" # main content is now text/html
msg.send()
smtpconnection初始化需要四個引數:連線smtp伺服器所需要的host, port, username and password,如果某個預設了,那麼就從setting檔案中讀取預設值,另外send_messages用來傳送乙個郵件列表
例如:
connection = smtpconnection() # use default settings for connection
messages = get_notification_email() #get_notification_email假設是使用者定義的乙個函式,用來獲取所有想發出去的郵件
connection.send_messages(messages)
django傳送郵件
django封裝了python自帶的傳送郵件的功能,使其更加簡單易用。1 settings中進行配置 email backend django.core.mail.backends.smtp.emailbackend email use tls true email host smtp.163.co...
Django傳送郵件
django提供了傳送郵件的介面,僅需做簡單的設定即可實現傳送郵件的功能。首先需要在setting做簡單的配置,以163郵箱為例 email backend django.core.mail.backends.smtp.emailbackend email host smtp.163.com ema...
Django 傳送郵件
在 settings.py 檔案中進行以下配置 email use ssl true secure sockets layer 安全套接層,取決於郵件伺服器是否開啟加密協議 email host smtp.qq.com 郵件伺服器位址 email port 465 郵件伺服器端口 email hos...