前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用Python自动发送电子邮件

利用Python自动发送电子邮件

作者头像
张俊红
发布2019-03-06 09:59:37
1.4K0
发布2019-03-06 09:59:37
举报
文章被收录于专栏:张俊红张俊红
总第129篇/张俊红

收发邮件几乎是每个人每天都需要做的一件事情,对于一些固定每天需要发送的邮件或者是同时需要发送好几十好几百份的时候,我们可以考虑借助Python来自动发送邮件。

在利用Python进行发送邮件时主要借助smtplibemail两个模块,其中smtplib主要用来建立服务器链接、服务器断开的工作,而email模块主要用来设置一些与邮件本身相关的内容,比如收件人、发件人、主题之类的。

不同邮箱的服务器链接地址(官方名叫端口)不一样,大家根据自己使用的邮箱设置相应的服务器链接。如果是outlook企业邮箱的话,一般都是mail.xxx.com(xxx是你公司名字),具体的可以问公司的运维同事。

这里我们拿公共邮箱来举例,163邮箱还是相对比较常用的,所以这里就以163邮箱为例,给大家演示一下具体如何利用Python进行自动发送邮件。

在开始进行正式代码之前,需要先登陆自己的163邮箱进行授权设置,授权码设置如下:

点击设置中的POP3/SMTP/IMAP,勾选SMTP服务,根据提是进行授权码设置,设置授权成功后,在Python中利用授权码进行登陆,而不是你本来的邮箱密码,如果使用本来的邮箱密码登陆,会报错。

代码语言:javascript
复制
>>>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的函数:

代码语言:javascript
复制
def send_mail(areceiver):
    给单人发送邮件的代码

遍历发送每一个邮件实现如下:

代码语言:javascript
复制
#多个收件人列表
receivers = ["zhangjunhongdata1@163.com1",
             "zhangjunhongdata2@163.com1",
             "zhangjunhongdata3@163.com1"]
#开始遍历
for r in receivers:
    send_mail(r)

关于自动发送邮件还有很多内容,比如定时发送,正文添加图片,附件添加图片,编写图形化界面,也就是自己写一个类似于outlook一样的邮件客户端都是可以的,本篇文章只是帮助大家打开自动发送邮件的大门,里面还有很多精彩的内容,大家有兴趣的可以自行上网搜索学习。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 俊红的数据分析之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总第129篇/张俊红
相关产品与服务
腾讯企业邮
腾讯企业邮(Tencent Exmail)是腾讯基于多年海量用户邮件系统研发和运营经验,为企业量身订造的一套办公用邮箱系统。稳定、简洁和快速,整合了丰富的企业应用,涵盖资源共享、消息发布、组织管理等方面。腾讯企业邮和微信生态深度整合,为您提供便捷高效的移动邮件解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档