对于一些需要每天发送的报表或者需要一次发送多个报表,可以考虑使用Python自动发送邮件。本文主要介绍如何使用Python实现邮件的自动发送。感兴趣的朋友可以看看。
目录
自动发送电子邮件使用电子邮件的第一步是正式发送一封电子邮件,并批量发送电子邮件。
自动发送邮件
我们做出报告后,通常需要发送给其他人查看。对于一些需要每天发送的报表或者需要一次发送多个报表,这个时候可以考虑使用Python自动发送邮件。
使用邮箱的第一步
一般我们在使用QQ邮箱、163邮箱、126邮箱等常用邮箱时,只需要输入账号和密码即可。但在手机上使用企业邮箱时,一般需要配置。常规配置界面如下:
除了输入账号密码,还需要输入一个服务器链接地址,每个公司会有所不同。
一份邮件的组成
下图是在outlook中发送邮件的界面,主要包括发件人、收件人、抄送、主题、正文和附件。这也是一般邮件的常见部分。
如何发送邮件?
在发送邮件之前,您需要连接服务器。在Python中,smtplib模块主要用于建立服务器的连接和断开。
不同邮箱的服务器链接地址不同,可以根据自己使用的邮箱设置相应的服务器链接。下表显示了与常见邮箱对应的服务器链接:
邮筒
服务器地址
新浪邮件
smtp.sina.com
搜狐邮箱
smtp.sohu.com
26邮箱
smtp.126.com
139邮箱
smtp.139.com
13网易邮箱
smtp.163.com
在连接163邮箱服务器之前,您需要登录您的163邮箱进行授权设置。授权码设置如下:
在设置中点击POP3/SMTP/IMAP,勾选SMTP服务,根据是设置授权码。成功设置授权后,使用Python中的授权码而不是您的原始电子邮件密码登录。如果您使用原始电子邮件密码登录,将会出现错误。
建立连接后,您可以使用您的帐户密码登录。成功登录后,您可以编辑邮件内容。编辑完成后,可以点击发送。发送后,断开服务器链接。
以下是发送消息的简短流程代码:
导入smtplib
smtp=smtplib。SMTP()
Smtp.connect(主机,端口)#连接到服务器。
Smtp.set_debuglevel(1) #显示交互信息
Smtp.login(用户名、密码)#登录邮箱
Smtp.sendmail (sender,receiver,msg.as _ string ()) #发送邮件
Smtp.quit() #断开连接
正式发送一份邮件
以下面163个邮箱为例,展示发送邮件的完整Python代码:
导入smtplib
从email.mime.multipart导入MIMEMultipart
从电子邮件导入编码器
from email.header导入标题
从email.mime.text导入MIMEText
从email.utils导入parseaddr,formataddr
从email.mime.application导入MIMEApplication
#发件人的邮箱
a sender=' zhangjunhongdata @ 163 . com '
#收件人邮箱
are ceiver=' Zhang junhong @ 163 . com '
#抄送电子邮件地址
acc='张军红@qq.com '
#邮件主题
Asubject='这是一封测试电子邮件'
#发件人地址
from _ addr=' zhangjunhongdata @ 163 . com '
#邮箱密码(授权码)
密码=' 123数据'
#邮件设置
msg=MIMEMultipart()
msg['Subject']=主题
消息['收件人']=收件人
消息['抄送']=acc
Msg['from']='张洪钧'
#邮件正文
Body='您好,这是一封测试邮件'
#添加邮件正文:
msg.attach(MIMEText(body,' plain ',' utf-8 '))
#添加附件
#注意,这里的文件路径是斜杠
XL part=mime application(open(' c:/users/Zhang junhong/desktop/这是附件。xlsx ',' rb ')。read())
XL part . add _ header(' content-disposition ','附件',filename='这是附件。xlsx’)
msg.attach(xlsxpart)
#设置邮箱服务器地址和端口。
smtp_server='smtp.163.com '
server=smtplib。SMTP(smtp_server,25)
server.set_debuglevel(1)
#登录邮箱
server.login(发件人地址,密码)
#发送邮件
server.sendmail(from_addr,areceiver.split(',')acc.split(','),msg.as_string())
#断开服务器链接
server.quit()
最终结果如下:
有一些关于自动邮件的高级内容,比如普通邮件,在文本中显示html内容等。有兴趣的话可以在网上搜索学习。
批量发送邮件
如果你需要同时发送多封邮件,你可以把收件人整理成一个表格循环发送。
例如,我们现在需要将本月的销售任务发送给销售部门的数百名销售人员。发送邮件时,主题应命名为xxx任务详情,正文中的地址应改为对应的收件人。附件应添加他们的任务细节,并抄送给他们的直接上级。
根据以上需求,我们编制了以下与收件人信息相关的表格df:
(全名)
承销人
抄送人
张一声
zhangjunhong11@163.com
zhangjunhong@163.com
张2
zhangjunhong22@163.com
zhangjunhong@163.com
只需要写一个for循环来遍历这个df表中的信息,然后单独发出去。具体实现代码如下:
导入smtplib
从email.mime.multipart导入MIMEMultipart
从email.mime.text导入MIMEText
从email.mime.image导入MIMEImage
从email.mime.application导入MIMEApplication
host='smtp.163.com '
端口=25
username=' Zhang jun hong 1227 @ 163 . com '
密码='123zjh '
Smtp=smtplib。SMTP() #声明一个链接对象
Smtp.connect(主机,端口)#连接到服务器。
Smtp.set_debuglevel(1) #显示交互信息
Smtp.login(用户名、密码)#登录邮箱
发件人=用户名
对于i in zip(df['姓名'],df['收件人'],df['抄送']):
Receiver=i[1] #收件人
Acc=i[2] # cc
Msg=MIMEMultipart() #声明一个邮件对象
消息['发件人]=用户名#发件人
消息['收件人']=收件人编号
消息['抄送']=acc # cc
Msg['Subject']=i[0]'任务详细信息' # subject
#写正文
Text=MIMEText(i[0]'您好,这是您本月的任务详细信息',' plain ',' utf-8 ')
msg.attach(文本)
#添加表格附件
f=open(' c:/users/张俊宏/desktop/task details /' i[0]'。xlsx ',' rb ')。阅读()
filepart=MIMEApplication(f)
part . Add _ header(' content-disposition ',' attachment ',filename=I[0]' task details . xlsx ')#为附件添加标题。
msg.attach(文件部分)
Smtp.sendmail (sender,receiver.split(',')acc.split(','),msg.as _ string ()) #发送邮件
Smtp.quit() #断开连接
通过运行上面的代码,可以达到一次性以df的形式给大家发邮件的要求。
这就是Python如何自动发送电子邮件的细节。更多关于Python发送邮件的信息,请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。