專業(yè)網(wǎng)站優(yōu)化外包百度seo推廣計(jì)劃類(lèi)型包括
? 發(fā)送普通郵件
?SMTP(Simple Mail Transfer Protocol)是簡(jiǎn)單傳輸協(xié)議。
python中對(duì)SMTP進(jìn)行了簡(jiǎn)單的封裝,可以發(fā)送純文本郵件、HTML 郵件以及帶附件的郵件。兩個(gè)核心模塊如下:
email模塊:負(fù)責(zé)構(gòu)建郵件
smtplib模塊:負(fù)責(zé)發(fā)送郵件
常用方法與屬性:?
?如果要使用qq郵箱發(fā)送的話,需要在qq郵箱設(shè)置-賬戶里面開(kāi)啟POP3/SMTP服務(wù)
?首次開(kāi)啟需要你用手機(jī)號(hào)發(fā)送短信,照著做就好了,做完之后會(huì)給你一個(gè)授權(quán)碼,記著這個(gè)授權(quán)碼,寫(xiě)代碼需要用到,忘記了也可以找回
接著編寫(xiě)代碼,發(fā)送普通郵件
import smtplib
from email.mime.text import MIMEText
from email.header import Headerdef send_email():# 設(shè)置要登錄的郵箱smtp_obj = smtplib.SMTP('smtp.qq.com')# 登錄郵箱 這里需要填寫(xiě)你的qq郵箱地址和生成的授權(quán)碼smtp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')# 編輯內(nèi)容mail_text = 'This is Email~ 您要的郵件來(lái)啦~~'# plain 原生文本模式msg_body = MIMEText(mail_text,'plain','utf-8')# 設(shè)置從哪發(fā)送的msg_body['From'] = Header('xxx','utf-8') # 設(shè)置發(fā)送人msg_body['Subject'] = Header('測(cè)試Python自動(dòng)郵件','utf-8') # 設(shè)置內(nèi)容主題# 發(fā)送郵件 這里第一個(gè)郵箱填自己的,第二個(gè)填收件人的郵箱地址smtp_obj.sendmail('398707160@qq.com','hotelmail@126.com',msg_body.as_string())if __name__ =='__main__':send_email()
發(fā)送HTML郵件
?發(fā)送HTML郵件只需要把發(fā)送的內(nèi)容換成html代碼即可
import smtplib
from email.mime.text import MIMEText
from email.header import Headerdef send_email():# 設(shè)置要登錄的郵箱smtp_obj = smtplib.SMTP('smtp.qq.com')# 登錄郵箱 這里需要填寫(xiě)你的qq郵箱地址和生成的授權(quán)碼smtp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')# 編輯內(nèi)容mail_text = '''<h1 style='color:red'>這是一個(gè)HTML郵件通知</h1><p>這個(gè)是郵件的內(nèi)容</p><p><a href='http://www.itbaizhan.cn'>這個(gè)是鏈接</a></p>'''# plain 原生文本模式msg_body = MIMEText(mail_text,'plain','utf-8')# 設(shè)置從哪發(fā)送的msg_body['From'] = Header('xxx','utf-8') # 設(shè)置發(fā)送人msg_body['Subject'] = Header('測(cè)試Python自動(dòng)郵件','utf-8') # 設(shè)置內(nèi)容主題# 發(fā)送郵件 這里第一個(gè)郵箱填自己的,第二個(gè)填收件人的郵箱地址smtp_obj.sendmail('398707160@qq.com','hotelmail@126.com',msg_body.as_string())if __name__ =='__main__':send_email()
發(fā)送附件郵件-smtplib
有時(shí)郵件的內(nèi)容只靠文本是無(wú)法完全描述內(nèi)容。這時(shí)就可以考慮發(fā) 送附件來(lái)攜帶內(nèi)容。具體方法如下:
設(shè)置登錄服務(wù)器 、登錄郵箱、增加附件 、設(shè)置請(qǐng)求頭、 發(fā)送郵件
import smtplib
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.header import Headerdef send_file_email():# 設(shè)置郵箱服務(wù)器stmp_obj = smtplib.SMTP('smtp.qq.com')# 登錄郵箱stmp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')# 設(shè)置郵件內(nèi)容# 文本msg_txt = MIMEText('這個(gè)帶有附件的郵件','plain','utf-8')# 附件 打開(kāi)你要發(fā)送的文件msg_file = MIMEApplication(open('./base_data/backg.jpg','rb').read())msg_file.add_header('Content-Disposition','attachment',filename='bg.jpg')# 封裝要發(fā)送的數(shù)據(jù)part = MIMEMultipart()part.attach(msg_txt)part.attach(msg_file)# 設(shè)置郵件其它信息part['From'] = Header('xx','utf-8')part['Subject'] = Header('附件郵件','utf-8')# 發(fā)送郵件stmp_obj.sendmail('xxx@qq.com','hotelmail@126.com',part.as_string())if __name__ =='__main__':send_file_email()
批量發(fā)送郵件-smtplib
這里以發(fā)送工資條為例
工資數(shù)據(jù)如下:?
from email.header import Header
from email.mime.text import MIMEText
import smtplibfrom openpyxl import load_workbookdef send_many_mail():# 設(shè)置登錄郵箱服務(wù)器smtp_obj = smtplib.SMTP('smtp.qq.com')# 登錄郵箱smtp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')# 打開(kāi)excel文件wb = load_workbook('./base_data/工資數(shù)據(jù).xlsx',data_only=True)# 激活工作簿sh = wb.active# 讀取數(shù)據(jù)-遍歷for i,r in enumerate(sh.iter_rows()):if i != 0:# 編輯內(nèi)容msg_txt = f'''<h3>您好:{r[1].value}</h3><p>請(qǐng)查收2030年12月工資條詳情:</p><table border="1"><tr><td>工號(hào)</td><td>姓名</td><td>部門(mén)</td><td>基本工資</td><td>提成</td><td>加班工資</td><td>社??鄢?lt;/td><td>考勤扣除</td><td>應(yīng)發(fā)工資</td><td>郵箱</td></tr><tr><td>{r[0].value}</td><td>{r[1].value}</td><td>{r[2].value}</td><td>{r[3].value}</td><td>{r[4].value}</td><td>{r[5].value}</td><td>{r[6].value}</td><td>{r[7].value}</td><td>{r[8].value}</td><td>{r[9].value}</td></tr></table>'''msg = MIMEText(msg_txt,'html','utf-8')# 設(shè)置郵件其他信息msg['From'] = Header('財(cái)務(wù)部','utf-8')msg['Subject'] = Header('工資條','utf-8')#發(fā)送郵件smtp_obj.sendmail('xxx@qq.com',{r[9].value},msg.as_string())print(f'{r[1].value} 工資條發(fā)送成功!!')
if __name__ =='__main__':send_many_mail()
發(fā)送郵件-zmail
?Zmail的優(yōu)勢(shì)
1 自動(dòng)填充大多數(shù)導(dǎo)致服務(wù)端拒信的頭信息(From To LocalHost之類(lèi)的)
2 將一個(gè)字典映射為email,構(gòu)造信件就像構(gòu)造字典一樣簡(jiǎn)單
3 自動(dòng)尋找郵件服務(wù)商端口號(hào)地址,自動(dòng)選擇合適的協(xié)議(經(jīng)過(guò)認(rèn)證的)
安裝:pip install zmail
發(fā)送的消息以字典發(fā)送,包含的key:
subject 郵件主題
from 發(fā)送人
content_text 郵件內(nèi)容-文本
content_html 郵件內(nèi)容-HTML
attachments 郵件內(nèi)容-附件,可寫(xiě)多個(gè)?
import zmail
def send_text():# 登錄郵箱server = zmail.server('xxx@qq.com','spcdwgqkltjsbiah')# 編寫(xiě)內(nèi)容info = {'from':'笨笨的張小白','subject':'測(cè)試zmail模塊','content_text':'這個(gè)是zmail郵件信息'}# 發(fā)送郵件server.send_mail('hotelmail@126.com',info)
def send_html():# 登錄郵箱server = zmail.server('xxx@qq.com','spcdwgqkltjsbiah')# 編寫(xiě)內(nèi)容info = {'from':笨笨的張小白','subject':'測(cè)試zmail模塊','content_html':'<h1>這個(gè)是zmail郵件信息</h1>'}# 發(fā)送郵件server.send_mail('hotelmail@126.com',info)
def send_file():# 登錄郵箱server = zmail.server('xxx@qq.com','spcdwgqkltjsbiah')# 編寫(xiě)內(nèi)容info = {'from':'笨笨的張小白','subject':'測(cè)試zmail模塊','content_html':'<h1>這個(gè)是zmail郵件信息</h1>','attachments':[r'.\base_data\backg.jpg']}# 發(fā)送郵件server.send_mail('hotelmail@126.com',info)
def get_email():# 登錄郵箱server = zmail.server('xxx@qq.com','tzteewnmyfqacbce')email = server.get_latest()print(email.get('subject'))print(email.get('from'))print(email.get('content_html'))print(email.get('content_text'))if __name__ == '__main__':# send_text()# send_html()# send_file()get_email()