最近要通过邮件群发一个通知,正好之前看到过python发邮件的,就试了一把,还挺方便的
可以自由的写正文,摘要,加附件
一.配置邮箱第三方使用
我的是扣扣邮箱,详情见
https://jingyan.baidu.com/article/fedf0737af2b4035ac8977ea.html
示例如下,其他邮箱类似
点击设置
点击账户
点击开启
验证手机
记住授权码
二.代码
1.设置发件人邮箱、邮箱授权码、收件人邮箱
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
import pandas as pd
#发件人邮箱
sender="[email protected]"
#服务器授权码
password="vvvvvvvvvvvvv"
#服务器地址,这里是QQsmtp服务器
mail_host='smtp.qq.com'
#receivers是收件人邮箱,可填写多个,以列表形式保存
#可通过excel读取邮件地址
data=pd.read_excel('emaildata.xlsx')
receivers_data=data.iloc[:,1]
receivers=receivers_data.tolist()
2.设置email信息
msg代表邮件本身,可以往里面添加文本、图片、附件等
#设置email信息
msg=MIMEMultipart('related')
添加邮件主题,发件人
#写邮件主题
msg["Subject"]='关于xxxxxx的通知'
msg["From"]=sender
添加邮件正文
#邮件正文
msg_content="大家好,这是xxxxx通知,详情见附件,强调几点:\n " \
"1.\n" \
"2.\n" \
"3.\n" \
"4."
msg.attach(MIMEText(msg_content,'plain','utf-8'))
添加附件(其实就是再加上一个MIMEText)可以添加文档或者图片,
word文档为例
#添加文档附件就是再加上一个MIMEText
mime=MIMEText(open(r'关于xxxxxx的通知.doc','rb').read(),'base64','utf-8')
#给附件加上必要的头信息
mime.add_header('Content-Disposition','attachment',filename=r'关于xxxx的通知.doc')
#把上面附件添加到MIMEMultipart
msg.attach(mime)
图片为例
#添加图片附件就是再加上一个MIMEImage
mine=mimeMIMEImage(open('test.jpg','rb').read(),'base64')
#给附件加上必要的头信息
mime.add_header('Content-Disposition','attachment',filename='test.jpg')
#把上面附件添加到MIMEMultipart
msg.attach(mime)
3.登陆并发送邮件
#登录并发送邮件
try:
#QQsmtp服务器的端口号为465或者587
s=smtplib.SMTP_SSL('smtp.qq.com',465)
s.set_debuglevel(1)
s.login(sender,password)
#给receivers列表中的地址逐个发邮件
for item in receivers:
msg['To']=to=item
s.sendmail(sender,to,msg.as_string())
print("send to %s has succeed"%item)
s.quit()
print('send to all succeed!')
except smtplib.SMTPException as e:
print("failed for %s"%e)
三、效果
参考资料:https://zhuanlan.zhihu.com/p/89868804
感兴趣的朋友可公众号后台回复:邮件 获取完整的代码玩玩。