今天是:2025年4月25日 星期五
记住用户名密码
SMTP(Simple Mail Transfer Protocol)是简单传输协议。
python中对SMTP进行了简单的封装,可以发送纯文本邮件、HTML 邮件以及带附件的邮件。两个核心模块如下:
email模块:负责构建邮件
smtplib模块:负责发送邮件
常用方法与属性:
如果要使用qq邮箱发送的话,需要在qq邮箱设置-账户里面开启POP3/SMTP服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import smtplib from email.mime.text import MIMEText from email.header import Header def send_email(): # 设置要登录的邮箱 smtp_obj = smtplib.SMTP( 'smtp.qq.com' ) # 登录邮箱 这里需要填写你的qq邮箱地址和生成的授权码 smtp_obj.login( 'xxx@qq.com' , 'spcdwgqkltjsbiah' ) # 编辑内容 mail_text = 'This is Email~ 您要的邮件来啦~~' # plain 原生文本模式 msg_body = MIMEText(mail_text, 'plain' , 'utf-8' ) # 设置从哪发送的 msg_body[ 'From' ] = Header( 'xxx' , 'utf-8' ) # 设置发送人 msg_body[ 'Subject' ] = Header( '测试Python自动邮件' , 'utf-8' ) # 设置内容主题 # 发送邮件 这里第一个邮箱填自己的,第二个填收件人的邮箱地址 smtp_obj.sendmail( '398707160@qq.com' , 'hotelmail@126.com' ,msg_body.as_string()) if __name__ = = '__main__' : send_email() |
发送HTML邮件只需要把发送的内容换成html代码即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import smtplib from email.mime.text import MIMEText from email.header import Header def send_email(): # 设置要登录的邮箱 smtp_obj = smtplib.SMTP( 'smtp.qq.com' ) # 登录邮箱 这里需要填写你的qq邮箱地址和生成的授权码 smtp_obj.login( 'xxx@qq.com' , 'spcdwgqkltjsbiah' ) # 编辑内容 mail_text = ''' <h1 style='color:red'>这是一个HTML邮件通知</h1> <p>这个是邮件的内容</p> <p><a href='http://www.itbaizhan.cn'>这个是链接</a></p> ''' # plain 原生文本模式 msg_body = MIMEText(mail_text, 'plain' , 'utf-8' ) # 设置从哪发送的 msg_body[ 'From' ] = Header( 'xxx' , 'utf-8' ) # 设置发送人 msg_body[ 'Subject' ] = Header( '测试Python自动邮件' , 'utf-8' ) # 设置内容主题 # 发送邮件 这里第一个邮箱填自己的,第二个填收件人的邮箱地址 smtp_obj.sendmail( '398707160@qq.com' , 'hotelmail@126.com' ,msg_body.as_string()) if __name__ = = '__main__' : send_email() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import smtplib from email.mime.text import MIMEText from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart from email.header import Header def send_file_email(): # 设置邮箱服务器 stmp_obj = smtplib.SMTP( 'smtp.qq.com' ) # 登录邮箱 stmp_obj.login( 'xxx@qq.com' , 'spcdwgqkltjsbiah' ) # 设置邮件内容 # 文本 msg_txt = MIMEText( '这个带有附件的邮件' , 'plain' , 'utf-8' ) # 附件 打开你要发送的文件 msg_file = MIMEApplication( open ( './base_data/backg.jpg' , 'rb' ).read()) msg_file.add_header( 'Content-Disposition' , 'attachment' ,filename = 'bg.jpg' ) # 封装要发送的数据 part = MIMEMultipart() part.attach(msg_txt) part.attach(msg_file) # 设置邮件其它信息 part[ 'From' ] = Header( 'xx' , 'utf-8' ) part[ 'Subject' ] = Header( '附件邮件' , 'utf-8' ) # 发送邮件 stmp_obj.sendmail( 'xxx@qq.com' , 'hotelmail@126.com' ,part.as_string()) if __name__ = = '__main__' : send_file_email() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | from email.header import Header from email.mime.text import MIMEText import smtplib from openpyxl import load_workbook def send_many_mail(): # 设置登录邮箱服务器 smtp_obj = smtplib.SMTP( 'smtp.qq.com' ) # 登录邮箱 smtp_obj.login( 'xxx@qq.com' , 'spcdwgqkltjsbiah' ) # 打开excel文件 wb = load_workbook( './base_data/工资数据.xlsx' ,data_only = True ) # 激活工作簿 sh = wb.active # 读取数据-遍历 for i,r in enumerate (sh.iter_rows()): if i ! = 0 : # 编辑内容 msg_txt = f ''' <h3>您好:{r[1].value}</h3> <p>请查收2030年12月工资条详情:</p> <table border="1"> <tr> <td>工号</td> <td>姓名</td> <td>部门</td> <td>基本工资</td> <td>提成</td> <td>加班工资</td> <td>社保扣除</td> <td>考勤扣除</td> <td>应发工资</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' ) # 设置邮件其他信息 msg[ 'From' ] = Header( '财务部' , 'utf-8' ) msg[ 'Subject' ] = Header( '工资条' , 'utf-8' ) #发送邮件 smtp_obj.sendmail( 'xxx@qq.com' ,{r[ 9 ].value},msg.as_string()) print (f '{r[1].value} 工资条发送成功!!' ) if __name__ = = '__main__' : send_many_mail() |
Zmail的优势
1 自动填充大多数导致服务端拒信的头信息(From To LocalHost之类的)
2 将一个字典映射为email,构造信件就像构造字典一样简单
3 自动寻找邮件服务商端口号地址,自动选择合适的协议(经过认证的)
安装:pip install zmail
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import zmail def send_text(): # 登录邮箱 server = zmail.server( 'xxx@qq.com' , 'spcdwgqkltjsbiah' ) # 编写内容 info = { 'from' : '飞扬' , 'subject' : '测试zmail模块' , 'content_text' : '这个是zmail邮件信息' } # 发送邮件 server.send_mail( 'feiyang@126.com' ,info) def send_html(): # 登录邮箱 server = zmail.server( 'xxx@qq.com' , 'spcdwgqkltjsbiah' ) # 编写内容 info = { 'from' : '飞扬' , 'subject' : '测试zmail模块' , 'content_html' : '<h1>这个是zmail邮件信息</h1>' } # 发送邮件 server.send_mail( 'hotelmail@126.com' ,info) def send_file(): # 登录邮箱 server = zmail.server( 'xxx@qq.com' , 'spcdwgqkltjsbiah' ) # 编写内容 info = { 'from' : '飞扬' , 'subject' : '测试zmail模块' , 'content_html' : '<h1>这个是zmail邮件信息</h1>' , 'attachments' :[r '.\base_data\backg.jpg' ] } # 发送邮件 server.send_mail( 'feiyang@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() |
目前有 0 条留言 其中:访客:0 条, 博主:0 条