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