場景描述:現(xiàn)實工作中,發(fā)送郵件時照抄別人的模板,會發(fā)現(xiàn)寫著寫著格式不統(tǒng)一了,即使格式一樣,會遇到辦公軟件不兼容,比如Outlook2013 同F(xiàn)oxmail兼容性不是很好。同時對于辦公郵件,每個公司通常會制定公司內(nèi)部的標(biāo)準(zhǔn)格式。比如,主題格式、郵件正文格式、上傳附件內(nèi)容等等。按照特定的格式編寫一封郵件,顯然浪費很多時間和精力。可以使用python發(fā)送辦公郵件。
技術(shù)要點
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。
Python的smtplib模塊提供了一種很方便的途徑發(fā)送電子郵件。它對SMTP協(xié)議進行了簡單的封裝。
Python創(chuàng)建 SMTP 對象語法如下:
import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
參數(shù)說明:
- host: SMTP 服務(wù)器主機。 你可以指定主機的ip地址或者域名如: runoob.com,這個是可選參數(shù)。
- port: 如果你提供了 host 參數(shù), 你需要指定 SMTP 服務(wù)使用的端口號,一般情況下 SMTP 端口號為25。
- local_hostname: 如果 SMTP 在你的本機上,你只需要指定服務(wù)器地址為 localhost 即可。
Python SMTP 對象使用 sendmail 方法發(fā)送郵件,語法如下:
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
參數(shù)說明:
- from_addr: 郵件發(fā)送者地址。
- to_addrs: 字符串列表,郵件發(fā)送地址。
- msg: 發(fā)送消息
這里要注意一下第三個參數(shù),msg 是字符串,表示郵件。我們知道郵件一般由標(biāo)題,發(fā)信人,收件人,郵件內(nèi)容,附件等構(gòu)成,發(fā)送郵件的時候,要注意 msg 的格式。這個格式就是SMTP協(xié)議中定義的格式。
代碼參考
(1)導(dǎo)入相關(guān)模塊。我們發(fā)送附帶Excel類型附件的郵件,需要導(dǎo)入smtplib和email模塊,導(dǎo)入模塊的代碼如下:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
(2)配置郵箱服務(wù)器信息。使用網(wǎng)易郵箱服務(wù)器,所以需要配置服務(wù)器主機名、用戶名和密碼等相關(guān)信息。讀者可根據(jù)自身需求,自行選擇郵箱服務(wù)器,并根據(jù)郵箱服務(wù)器要求填寫配置信息。代碼參考
# 配置郵箱服務(wù)器信息
mail_smtpserver = "mail.qq123.com" # 設(shè)置服務(wù)器
mail_user = "zhang@qq123.com" # 用戶名
mail_pass = "ws12345" # 口令
# 配置發(fā)件人、收件人信息
sender = 'zhang@qq123.com' # 發(fā)件人郵箱
to_receiver = ['zhang@yeah.net'] # 接收郵件,可設(shè)置為多個郵箱
(3)配置郵件信息,并發(fā)送郵件。代碼如下:
mail_msg = """
<h2>歡迎來到Y(jié)von_早安陽光 簡書博客</h2>
<p><a href="http://www.lxweimin.com/u/cd9f63a63e4b">簡書早安陽光博客網(wǎng)址</a></p>
<a><img src="https://file.beeplaying.com/group1/M00/48/C9/CmcEHGAKSpmAb9q9AABSrYX8W-Q585.png"></a>
"""
message = MIMEText(mail_msg, 'html', 'utf-8')
message['From'] = sender
message['To'] = to_receiver
subject = 'Yvon_早安陽光~簡書博客'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP(mail_smtpserver) # 實例化SMTP
smtpObj.login(mail_user, mail_pass) # 登錄服務(wù)器
smtpObj.sendmail(sender, to_receiver, message.as_string()) # 發(fā)送郵件
print("郵件發(fā)送成功")
except smtplib.SMTPException:
print("Error: 無法發(fā)送郵件")
輸出結(jié)果
郵件發(fā)送成功.jpg