1. 程式人生 > >Python使用SMTP模塊、email模塊發送郵件

Python使用SMTP模塊、email模塊發送郵件

try 組合 消息 htm exce 什麽 附件 smtp模塊 etc

smtplib模塊:

主要通過SMTP類與郵件系統進行交互。使用方法如下:

1.實例化一個SMTP對象:

  s = smtplib.SMTP(郵件服務地址,端口號)

  s = smtplib.SMTP_SSL(郵件服務地址,端口號)

2.登陸郵件,權限驗證:

  s.login(用戶名,密碼)

3.發送郵件:

  s.sendmail(發件人郵箱,收件人郵箱,發送內容)

4.斷開連接:

  s.close()

email模塊:

  email模塊:支持發送的郵件內容為純文本、HTML內容、圖片、附件。email模塊中有幾大類來針對不同的郵件內容形式,常用如下:

  MIMEText:(MIME媒體類型)內容形式為純文本、HTML頁面。

  MIMEImage:內容形式為圖片。

  MIMEMultupart:多形式組合,可包含文本和附件。

每一類對應的導入方式:

  from email.mime.text import MIMEText

  from email.mime.image import MIMEImage

  from email.mime.multipart import MIMEMultipart

MIMEText:

  MIMEText(msg,type,chartset)

  msg:文本內容

  type:文本類型默認為plain(純文本)

   發送HTML格式的時候,修改為html,但同時要求msg的內容也是html的格式。

  chartset:文本編碼,中文為“utf-8”

  # 構造TEXT格式的消息

  msg = MIMEText("hello.text","plain","utf-8")

  msg["Subject"] = "xxxxx"

  msg["From"] = "xxxx"

  msg["To"] = "xxxx"

  #發送以上構造的郵件內容要使用as_string將構造的郵件內容轉換為string形式。

  s.sendmail("xxx","xxx",msg.as_string)

MIMEImage、MIMEMultipart:

  msg = MIMEMultipart()

  #實例化一個文本對象

  msg_sub = MIMEText("hello.text","plain","utf-8")

  #將text消息添加到MIMEMultipart中,作為郵件正文。

  msg.attach(msg_sub)

  #圖片作為附件

  import os

  img_datas = open(os.getcwd()+ "/reports/xxxx.png","rb").read()

  msg_img = MIMEImage(img_data)

  msg_img.add_header(‘Content-Disposition‘,‘attachment‘, filename = "xxxx.png" )

  msg_img.add_header(‘Content-ID‘,‘<0>‘)

  #將圖片添加到MIMEMultiplart中,作為附件發送。

  msg.attach(mag_img)

源代碼如下:

發送文本郵件:

 1 import smtplib
 2 from email.mime.text import MIMEText
 3 
 4 sender = [email protected]   #發送人郵箱
 5 passwd = lkugmgywydhfff #發送人郵箱授權碼
 6 receivers = [email protected] #收件人郵箱
 7 
 8 subject = python發郵件測試 #主題
 9 content = 這是我使用python smtplib模塊和email模塊自動發送的郵件    #正文
10 
11 msg = MIMEText(content,plain,utf-8)
12 msg[Subject] = subject
13 msg[From] = sender
14 msg[TO] = receivers
15 
16 try:
17     s = smtplib.SMTP_SSL(smtp.qq.com,465)
18     s.login(sender,passwd)
19     s.sendmail(sender,receivers,msg.as_string())
20     print(發送成功)
21 
22 except Exception:
23     print(發送失敗)

發送HTML郵件:

 1 import smtplib
 2 from email.mime.text import MIMEText
 3 from email.header import Header
 4 
 5 sender = ‘xxxx@qq.com #發件郵箱
 6 passwd = lkugmgywydhfff #發送人郵箱授權碼
 7 receivers = [email protected]   #收件郵箱
 8 
 9 subject = python發郵Html郵件測試 #主題
10 
11 content = """         #內容,HTML格式
12 <p>Python 郵件發送測試...</p>
13 <p><a href="http://www.baidu.com">這是一個鏈接</a></p>
14 """
15 
16 msg = MIMEText(content,html,utf-8)
17 # msg[‘Subject‘] = subject
18 msg[Subject] = Header(subject,utf-8)
19 # msg[‘From‘] = sender
20 msg[From] = Header(大傻子,utf-8)
21 # msg[‘To‘] = receivers
22 msg[To] = Header(二楞子,utf-8)
23 try:
24     s = smtplib.SMTP_SSL(smtp.qq.com,465)
25     s.login(sender,passwd)
26     s.sendmail(sender,receivers,msg.as_string())
27     print(Send Success)
28 
29 except:
30     print(Send Failure)

發送圖片郵件:

 1 import smtplib
 2 from email.mime.image import MIMEImage
 3 from email.mime.text import MIMEText
 4 from email.mime.multipart import MIMEMultipart
 5 
 6 sender = [email protected]
 7 passwd = lkugmgywydhfff
 8 receivers = [email protected]
 9 subject = python發郵帶img的郵件測試 #主題
10 
11 # 創建一個帶附件的實例
12 msg = MIMEMultipart()
13 msg[Subject] = subject
14 msg[From] = sender
15 msg[To] = receivers
16 
17 # 創建正文
18 msg.attach(MIMEText(使用python smtplib模塊和email模塊自動發送郵件測試,plain,utf-8))
19 
20 # 創建圖片附件
21 import os
22 img_file = open(os.getcwd()+"/a4.jpg",rb).read()
23 msg_img = MIMEImage(img_file)
24 msg_img.add_header(Content-Disposition,attachment, filename = "a4.jpg")
25 msg_img.add_header(Content-ID, <0>)
26 msg.attach(msg_img)
27 
28 try:
29     s = smtplib.SMTP_SSL(smtp.qq.com,465)
30     s.set_debuglevel(1) #輸出發送郵件詳細過程
31     s.login(sender,passwd)
32     s.sendmail(sender,receivers,msg.as_string())
33     print(Send Succese)
34 
35 except:
36     print(Send Failure)

發送帶附件的郵件:

 1 import smtplib
 2 from email.mime.text import MIMEText
 3 from email.mime.multipart import MIMEMultipart
 4 from email.header import Header
 5 
 6 sender = [email protected]‘  #發件郵箱
 7 passwd = lkugmgywydhfff‘  # 郵箱授權碼
 8 receivers = [email protected]‘  #收件郵箱
 9 
10 subject = python發帶附件的郵件測試 #主題
11 # 創建一個帶附件的實例
12 msg = MIMEMultipart()
13 msg[Subject] = subject
14 msg[From] = sender
15 msg[To] = receivers
16 
17 #創建正文,將文本文件添加到MIMEMultipart中
18 msg.attach(MIMEText(使用python smtplib模塊和email模塊自動發送郵件測試,plain,utf-8))
19 
20 #構造附件1,傳送當前目錄下  文件
21 att1 = MIMEText(open(testdata.xlsx,rb).read(),base64,utf-8) # rb以二進制方式讀取
22 # att1["Content-Type"] = ‘application/octet-stream‘
23 # filename為附件名稱,可以任意寫,寫什麽名字,郵件中顯示什麽名字
24 att1["Content-Disposition"] = attachment; filename = "testdata.xlsx" 
25 #將附件添加到MIMEMultipart中
26 msg.attach(att1)
27 
28 #構造附件2
29 att2 = MIMEText(open(db.cfg,rb).read(),base64,utf-8)
30 # att2["Content-Type"] = ‘application/octet-stream‘
31 att2["Content-Disposition"] = attachment; filename = "db.cfg" 
32 #將附件添加到MIMEMultipart中
33 msg.attach(att2)
34 
35 try:
36     s = smtplib.SMTP_SSL(smtp.qq.com,465)
37     s.set_debuglevel(1) #輸出發送郵件詳細過程
38     s.login(sender,passwd)
39     s.sendmail(sender,receivers,msg.as_string())
40     print(Send Succese)
41 
42 except:
43     print(Send Failure)

Python使用SMTP模塊、email模塊發送郵件