收发邮件几乎是每个人每天都需要做的一件事情, 对于一些固定每天需要发送的邮件或者是同时需要发送好几十好几百份的时候, 我们可以考虑借助 Python 来自动发送邮件.
在利用 Python 进行发送邮件时主要借助 smtplib 和 email 两个模块, 其中 smtplib 主要用来建立服务器链接, 服务器断开的工作, 而 email 模块主要用来设置一些与邮件本身相关的内容, 比如收件人, 发件人, 主题之类的.
不同邮箱的服务器链接地址 (官方名叫端口) 不一样, 大家根据自己使用的邮箱设置相应的服务器链接. 如果是 outlook 企业邮箱的话, 一般都是 mail.xxx.com(xxx 是你公司名字), 具体的可以问公司的运维同事.
这里我们拿公共邮箱来举例, 163 邮箱还是相对比较常用的, 所以这里就以 163 邮箱为例, 给大家演示一下具体如何利用 Python 进行自动发送邮件.
在开始进行正式代码之前, 需要先登陆自己的 163 邮箱进行授权设置, 授权码设置如下:
点击设置中的 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 的函数:
def send_mail(areceiver):
给单人发送邮件的代码
遍历发送每一个邮件实现如下:
- # 多个收件人列表
- receivers = ["zhangjunhongdata1@163.com1",
- "zhangjunhongdata2@163.com1",
- "zhangjunhongdata3@163.com1"]
- # 开始遍历
- for r in receivers:
- send_mail(r)
关于自动发送邮件还有很多内容, 比如定时发送, 正文添加图片, 附件添加图片, 编写图形化界面, 也就是自己写一个类似于 outlook 一样的邮件客户端都是可以的, 本篇文章只是帮助大家打开自动发送邮件的大门, 里面还有很多精彩的内容, 大家有兴趣的可以自行上网搜索学习.
在这推荐下小编创建的 Python 学习交流群 556370268, 可以获取 Python 入门基础教程, 送给每一位小伙伴, 这里是小白聚集地, 每天还会直播和大家交流分享经验哦, 欢迎初学和进阶中的小伙伴.
来源: http://www.jianshu.com/p/f0a0cdcab68d