Django傳送郵件

2021-06-01 06:46:44 字數 4590 閱讀 5785

簡介:

雖然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...