python smtp郵件

SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。

python的smtplib提供了一種很方便的途徑發送電子郵件。它對smtp協議進行了簡單的封裝。html

參考:http://www.javashuo.com/article/p-tevvfsdi-hu.htmlpython

   https://blog.csdn.net/qq_42543250/article/details/81586663服務器

   http://www.javashuo.com/article/p-dlufrchg-bp.html測試

   http://www.cnblogs.com/yufeihlf/p/5726619.html網站

 在第三方客戶端使用stmp以前須要開啓郵箱中的POP3/SMTP/IMAP服務,並獲取到受權碼。這裏使用是163郵箱ui

 

純文本郵件編碼

 1 import smtplib
 2 from email.header import Header
 3 from email.mime.text import MIMEText
 4  
 5 # 第三方 SMTP 服務
 6 mail_host = "smtp.163.com"               # SMTP服務器
 7 mail_user = "*******@163.com"       # 用戶名
 8 mail_pass = "*******"               # 受權密碼,非登陸密碼
 9  
10 sender = '********@163.com'       # 發件人郵箱(最好寫全, 否則會失敗)
11 receivers = ['********@163.com']  # 接收郵件,可設置爲你的QQ郵箱或者其餘郵箱
12  
13 content = '這裏是測試文本!'             #測試文本
14 title = 'smtp郵件測試'                       # 郵件主題
15 
16  #內置參數執行
17 def sendEmail():
18  
19     message = MIMEText(content, 'plain', 'utf-8')  # 內容, 格式, 編碼
20     message['From'] = "{}".format(sender)
21     message['To'] = ",".join(receivers)
22     message['Subject'] = title
23  
24     try:
25         smtpObj = smtplib.SMTP_SSL(mail_host)  # 啓用SSL發信, 端口默認是25(能夠不寫)
26         smtpObj.login(mail_user, mail_pass)    # 登陸驗證
27         smtpObj.sendmail(sender, receivers, message.as_string())  # 發送
28         print("mail has been send successfully.")
29     except smtplib.SMTPException as e:
30         print(e)
31 
32  #參數傳入執行
33 def send_email2(SMTP_host, from_account, from_passwd, to_account, subject, content):
34     email_client = smtplib.SMTP(SMTP_host)
35     email_client.login(from_account, from_passwd)
36     # create msg
37     msg = MIMEText(content, 'plain', 'utf-8')
38     msg['Subject'] = Header(subject, 'utf-8')  # subject
39     msg['From'] = from_account
40     msg['To'] = to_account
41     email_client.sendmail(from_account, to_account, msg.as_string())
42  
43     email_client.quit()
44  
45 if __name__ == '__main__':
46     sendEmail()
47 
48         

 

插入圖片(非附件形式)spa

 1 # coding: utf-8
 2 
 3 import smtplib
 4 from email.mime.multipart import MIMEMultipart
 5 from email.mime.text import MIMEText
 6 from email.mime.base import MIMEBase
 7 from email import encoders
 8 
 9 mail_host = 'smtp.163.com'
10 receivers = ['******@163.com']
11 receiver = ','.join(receivers)
12 sender = '******@163.com'
13 password = '*****'
14 
15 msg = MIMEMultipart('alternative')
16 msg['From'] = sender
17 msg['To'] = receiver
18 msg['Subject'] = '主題'
19 #插入一個html格式
20 msg.attach(MIMEText('<html><body><h1>Hello</h1>' +
21     '<p><img src="cid:0"></p>' +
22     '</body></html>', 'html', 'utf-8'))
23 
24 file_path = r'E:\stmp_test\img.png'
25 with open(file_path, 'rb') as f:
26     mm = MIMEBase('image', 'png', filename='b.png')    # 設置附件的MIME和文件名,這裏是png類型:
27     mm.add_header('Content-Disposition', 'attachment', filename='b.jpg')  #加上必要的頭信息
28     mm.add_header('Content-ID', '<0>')       #頭信息
29     mm.add_header('X-Attachment-Id', '0')     #頭信息
30     mm.set_payload(f.read())    # 把附件的內容讀進來
31     encoders.encode_base64(mm)
32     msg.attach(mm)
33 
34 try:
35     server = smtplib.SMTP()
36     # 加上這句就能夠打印出全部的log,更方便咱們定位問題
37     server.set_debuglevel(1)
38     server.connect(mail_host, 25)
39     server.login(sender, password)
40     server.sendmail(sender, receiver,msg.as_string())
41     server.close()
42     print ('Success')
43 except smtplib.SMTPException:
44     print( 'Error')

直接在HTML郵件中連接圖片地址是不行的。引文大部分郵件服務商都會自動屏蔽帶有外鏈的圖片,由於不知道這些連接是否指向惡意網站。
只須要在HTML中經過引用src="cid:0"就能夠把附件做爲圖片嵌入了。若是有多個圖片,給它們依次編號,而後引用不一樣的cid:x便可。.net

相關文章
相關標籤/搜索