python發郵件smtplib+mail
阿新 • • 發佈:2019-01-01
1)python發郵件需要掌握兩個模組的用法,smtplib和email;smtplib模組主要負責傳送郵件:是一個傳送郵件的動作,連線郵箱伺服器,登入郵箱,傳送郵件(有發件人,收信人,郵件內容);email模組主要負責構造郵件:指的是郵箱頁面顯示的一些構造,如發件人,收件人,主題,正文,附件等。
2)smtplib模組
(1)smtp = smtplib.SMTP(host[, 25])或者smtplib.SMTP_SSL(host, 465)
host:為指定連線的郵箱伺服器,為字串型別,
如:
163網易郵箱:smtp.163.com
公司內部郵箱:mail.xxxxx.com
qq郵箱:smtp.qq.com
注意:163、公司內部郵箱用25和465埠均可以傳送郵件(SMTP對應25,可以省略;SMTP_SSL對應465不可以省略),而qq只能用smtplib.SMTP_SSL(host, 465)傳送!
(3)smtp.login(username, password)
username:登入郵箱的使用者名稱。
password:若為網易郵箱,或者qq郵箱則只能用相應的授權碼,預設是關閉的,開啟時在相應的網頁郵箱設定處可以設定授權碼,此授權碼會隨著密碼的變更失效,那時需要重新獲取。qq的pop和imap的授權碼不同,但測試均可使用。
(4)smtp.sendmail(sender, receiver, msg.as_string())
from_addr:郵件傳送者地址,字串型別;
receiver:若為單個地址直接用字串表示,若收件人有多個,則用字串列表:[‘接收地址1’,’接收地址2’,’接收地址3’,…]
msg.as_string():為一個字串型別
(5)smtp.quit()
用於結束SMTP會話。
所以,用以上幾步就可以實現一個郵件的傳送,但傳送的郵件無發件人,無主題,只有一個簡單的msg.as_string()字串作為內容。若需要新增各種附件等還需要email模組配合
3)email模組
email模組下有mime包(Multipurpose Internet Mail Extensions),即多用途網際網路郵件擴充套件,是目前網際網路電子郵件普遍遵循的郵件技術規範;
該mime包下常用的有三個模組:text,image,multpart
匯入方法如下:
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
MIMEText物件:文字郵件物件
MIMEImage物件:表示一個作為附件的圖片
MIMEMultipart物件:把多個物件組合起來
MIMEBase物件:可表示任何物件
Message物件:郵件物件
(1)MIMEText物件說明
郵件傳送程式為了防止有些郵件閱讀軟體不能顯示處理HTML格式的資料,通常都會用兩型別分別為”text/plain”和”text/html”
MIMEText(text, _subtype=’plain’, _charset=None, *, policy=None)
第一個引數為郵件正文,第二個引數預設為plain(純文字的普通檔案),還可以指定為”html”,最後一定要用utf-8編碼保證多語言相容性。
a)新增普通文字(指定編碼為utf-8所以可以為中文)
text = “Hi,All:\n How are you?\n我愛python”
text_plain = MIMEText(text,’plain’, ‘utf-8’)
b)新增html文字(可已有中文)
c)新增附件
這裡的filename為要重新命名顯示的檔名,這裡的方法附件名可以為中文,注意中間的那個空字串不能省略。
2)新增圖片MIMEImage(直接顯示圖片內容)
3)multpart說明
常見的multipart型別有下面三種:
multipart/alternative的郵件包括text/plain和text/html
multipart/related:郵件正文中包括圖片,聲音等內嵌資源
multipart/mixed:包含附件
注意:向上相容,如果一個郵件有純文字正文,超文字正文,內嵌資源,附件,則選擇mixed型別。
msg = MIMEMultipart(‘mixed’),一開始就要設定msg物件,然後文字、圖片、附件等用msg.attach(text_att/image)等附加。
我們必須把Subject,From,To,Date新增到MIMEText物件或者MIMEMultipart物件中,郵件中才會顯示主題,發件人,收件人,時間(若無時間,就預設一般為當前時間,該值一般不設定)。
subject = ‘歡迎加入XX大家庭’
msg = MIMEMultipart(‘mixed’)
msg[‘Subject’] = subject
msg[‘From’] = ‘你
msg[‘To’] = ‘好[email protected]’
說明:
msg.add_header(_name,_value,**_params):新增郵件頭欄位。
msg.as_string():是將msg(MIMEText物件或者MIMEMultipart物件)變為str,如果只有一個html超文字正文或者plain普通文字正文的話,一般msg的型別可以是MIMEText;如果是多個的話,就都新增到MIMEMultipart,msg型別就變為MIMEMultipart。
msg.attach(MIMEText物件或MIMEImage物件):將MIMEText物件或MIMEImage物件新增到MIMEMultipart物件中。MIMEMultipart物件代表郵件本身,MIMEText物件或MIMEImage物件代表郵件正文。
以上的構造的文字,超文字,附件,圖片都何以新增到MIMEMultipart(‘mixed’)中:
msg.attach(text_plain)
msg.attach(text_html)
msg.attach(text_att)
msg.attach(image)
4)文字,html,圖片,附件實現例項