社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python发送电子邮件,工作效率翻3倍!

中国统计网 • 6 年前 • 1466 次点击  

点击上方“中国统计网”订阅我们吧!


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

在利用Python进行发送邮件时主要借助smtplibemail两个模块,其中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一样的邮件客户端都是可以的,本篇文章只是帮助大家打开自动发送邮件的大门,里面还有很多精彩的内容,大家有兴趣的可以自行上网搜索学习。


End.

作者:张俊红


 你可能错过的干货文章 


零基础也能入职数据分析?跨专业想转行数据分析?SQL、Python技能不通过?


中国统计网联合爱数据学院出品的【零基础入职数据分析—就业班】帮你解决转行难,技能不过关等问题!扫描下方二维码快来咨询吧!


“阅读原文”一起来充电学习吧!

今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/QwrebtEGHK
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/29054
 
1466 次点击