收发邮件几乎是每个人每天都需要做的一件事情,对于一些固定每天需要发送的邮件或者是同时需要发送好几十好几百份的时候,我们可以考虑借助Python来自动发送邮件。
在利用Python进行发送邮件时主要借助smtplib和email两个模块,其中smtplib主要用来建立服务器链接、服务器断开的工作,而email模块主要用来设置一些与邮件本身相关的内容,比如收件人、发件人、主题之类的。
不同邮箱的服务器链接地址(官方名叫端口)不一样,大家根据自己使用的邮箱设置相应的服务器链接。如果是outlook企业邮箱的话,一般都是mail.xxx.com(xxx是你公司名字),具体的可以问公司的运维同事。
这里我们拿公共邮箱来举例,163邮箱还是相对比较常用的,所以这里就以163邮箱为例,给大家演示一下具体如何利用Python进行自动发送邮件。
在开始进行正式代码之前,需要先登陆自己的163邮箱进行授权设置,授权码设置如下:
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群:【923414804】,我们一起学Python。
点击设置中的POP3/SMTP/IMAP,勾选SMTP服务,根据提是进行授权码设置,设置授权成功后,在Python中利用授权码进行登陆,而不是你本来的邮箱密码,如果使用本来的邮箱密码登陆,会报错。
>>>import smtplib
>>>from email import encoders
>>>from email.header import Header
>>>from email.mime.text import MIMEText
>>>from email.utils import parseaddr, formataddr
>>>from email.mime.application import MIMEApplication
#发件人邮箱
>>>asender="zhangjunhongdata@163.com"
#收件人邮箱
>>>areceiver="zhangjunhong@163.com"
#抄送人邮箱
>>>acc ='zhangjunhong@qq.com'
#邮件主题
>>>asubject ='这是一份测试邮件'
#发件人地址
>>>from_addr ="zhangjunhongdata@163.com"
#邮箱密码(授权码)
>>>password="123data"
#邮件设置
>>>msg = MIMEMultipart()
>>>msg['Subject'] = asubject
>>>msg['to'] = areceiver
>>>msg['Cc'] = acc
>>>msg['from'] ="张俊红"
#邮件正文内容
>>>body ="你好,这是一份测试邮件"
#添加邮件正文:
>>>msg.attach(MIMEText(body,'plain','utf-8'))
#添加附件
#注意这里的文件路径是斜杠
>>>xlsxpart = MIMEApplication(open('C:/Users/zhangjunhong/Desktop/这是附件.xlsx','rb').read())
>>>xlsxpart.add_header('Content-Disposition','attachment', filename='这是附件.xlsx')
>>>msg.attach(xlsxpart)
#设置邮箱服务器地址以及端口
>>>smtp_server ="smtp.163.com"
>>>server = smtplib.SMTP(smtp_server,25)
>>>server.set_debuglevel(1)
#登陆邮箱
>>>server.login(from_addr, password)
#发送邮件
>>>server.sendmail(from_addr, >>>areceiver.split(',')+acc.split(','), msg.as_string())
#断开服务器链接
server.quit()
最后的结果如下图:
如果是需要同时发送多份邮件,可以把上述邮件发送过程定义成一个函数,把收件人以及其他内容生成一个列表,然后遍历每一个收件人,最后调用发送邮件函数进行多份邮件发送。
把邮件发送过程封装成一个函数相对比较简单,只需要把上述给单个人发送邮件的内容当成语句块,收件人当作参数即可,下面我们定义了一个名为send_mail的函数:
defsend_mail(areceiver):
给单人发送邮件的代码
遍历发送每一个邮件实现如下:
#多个收件人列表
receivers = ["zhangjunhongdata1@163.com1",
"zhangjunhongdata2@163.com1",
"zhangjunhongdata3@163.com1"]
#开始遍历
forr in receivers:
send_mail(r)
关于自动发送邮件还有很多内容,比如定时发送,正文添加图片,附件添加图片,编写图形化界面,也就是自己写一个类似于outlook一样的邮件客户端都是可以的,本篇文章只是帮助大家打开自动发送邮件的大门,里面还有很多精彩的内容,大家有兴趣的可以自行上网搜索学习。