Python+ SMTP 郵件學習筆記
阿新 • • 發佈:2018-12-21
更新日誌
版本號 | 更新日期 | 更新人 | 更新內容 |
---|---|---|---|
V1.0 | 2018.11.13 | 李昊哲 | 初稿 |
文件說明
該文件用於說明網上各種 Python + SMTP 傳送郵件教程學習彙總說明。
文件內容
不多廢話,直接上程式碼,都有註釋。
# coding=utf-8
from email.mime.text import MIMEText # 傳送文字
from email.mime.image import MIMEImage # 傳送圖片
from email.mime.multipart import MIMEMultipart # 可文字、圖片結合
from email.utils import formataddr # 格式化地址,如發件人資訊
import smtplib # 發郵件需要的包
from constant import LOGO_DATA # 這個是因為我用 pyinstaller 封裝時不能封裝圖片,我就把圖片轉為二進位制放在 constant 檔案裡了。
def fn_send__email(to_address):
from_address = '你的郵箱地址'
password = '你的密碼' # 若設定了第三方客戶端登入密碼,則使用該密碼
smtp_server = 'smtp.exmail.qq.com' # 視具體郵箱而定,這裡是騰訊企業郵箱
msg = MIMEMultipart()
# 我傳送給 outlook 的圖片總會被當做附件,具體原因我沒搞懂。這裡判斷下,如果是 outlook,不傳送圖片。
if to_address[to_address.index('@'):] != '@outlook.com':
# ~ with open('logo.png', 'rb') as pic:
# ~ LOGO_DATA = pic.read()
# 新增圖片
img = MIMEImage( LOGO_DATA)
# 給圖片編號,先當做附件加入,在後面的 html 程式碼中引用
img.add_header('Content-ID', '<0>')
msg.attach(img)
pic_info = '<img src="cid:0"><br>'
else:
pic_info = ''
# 文字部分,自定義。<hr> 標籤定義了一個分割線,模擬郵箱簽名上的藍線。
text = MIMEText('<html><body><p style="font-size:12pt; color:rgb(36,39,40);font-family:微軟雅黑">\
你的郵件內容!<hr style="border:none;border-top:1pt solid rgb(181, 196, 223)" align="left" width="168pt"/>\
{}\
XXX 謹啟<br>\
(+86) 10086<br></p>\
</body></html>'.format(pic_info), 'html', 'utf-8')
msg.attach(text)
# 定義郵件內容的發件人、收件人,主題
msg['From'] = formataddr(['顯示的發件人名字', '你的郵箱地址'])
msg['To'] = to_address
msg['Subject'] = '郵件主題'
# 這裡用 25 號埠是因為郵箱設定裡推薦的埠號總連不上
# ~ server = smtplib.SMTP(smtp_server, 465)
server = smtplib.SMTP(smtp_server, 25)
# 建立安全連線
server.starttls()
server.set_debuglevel(1)
server.login(from_address, password)
server.sendmail(from_address, [to_address], msg.as_string())
server.quit()
# ~ to_address = '[email protected]'
# ~ fn_send_email(to_address)