资讯专栏INFORMATION COLUMN

利用Python自动发送邮件

leo108 / 2697人阅读

摘要:自动发送邮件我们把报表做出来以后一般都是需要发给别人查看,对于一些每天需要发的报表或者是需要一次发送多份的报表,这个时候可以考虑借助来自动发送邮件。一份邮件的组成下图是中发送一份邮件的界面,主要包含发件人收件人抄送人主题正文附件这几部分。

自动发送邮件

我们把报表做出来以后一般都是需要发给别人查看,对于一些每天需要发的报表或者是需要一次发送多份的报表,这个时候可以考虑借助Python来自动发送邮件。

使用邮箱的第一步

一般我们在使用QQ邮箱、163邮箱、126邮箱等这些比较常用的邮箱时,只需要输入账号和密码就可以。但是在使用手机端的企业邮箱的时候,一般都需要配置一下,常规的配置界面如下所示:

就是除了在输入账号密码以外,还需要输入一个服务器链接地址,这个地址每个公司都会不太一样。

一份邮件的组成

下图是outlook中发送一份邮件的界面,主要包含发件人、收件人、抄送人、主题、正文、附件这几部分。这也是一般邮件比较通用的组成部分。

如何发送邮件

在发送邮件之前首先需要与服务器进行连接,在Python中主要利用smtplib模块来建立服务器连接接、服务器断开的工作。

不同邮箱的服务器链接地址不一样,大家根据自己使用的邮箱设置相应的服务器链接。下表为常见邮箱对应的服务器链接:

邮箱服务器地址
新浪邮箱smtp.sina.com
搜狐邮箱smtp.sohu.com
126邮箱smtp.126.com
139邮箱smtp.139.com
163网易邮箱smtp.163.com

在与163邮箱服务器进行连接之前,需要先登陆自己的163邮箱进行授权设置,授权码设置如下:

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

连接设置好以后就可以使用账户密码进行登录了,登录成功以后就可以对邮件内容进行编辑,编辑完成以后就可以点击发送了,发送完成后断开服务器链接。

如下展示了发送一份邮件的简短流程代码:

import smtplibsmtp = smtplib.SMTP()smtp.connect(host, port)  # 与服务器进行连接smtp.set_debuglevel(1) #显示出交互信息smtp.login(username, password)  # 登陆邮箱smtp.sendmail(sender, receiver, msg.as_string())  # 发送邮件smtp.quit()  # 断开连接

正式发送一份邮件

如下以163邮箱为例,展示了发送一份邮件完整的Python代码:

import smtplibfrom email.mime.multipart import MIMEMultipart from email import encodersfrom email.header import Headerfrom email.mime.text import MIMETextfrom email.utils import parseaddr, formataddrfrom 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()

最后的结果如下图:

关于自动发送邮件还有一些进阶的内容,比如定时发送,正文显示html内容等,大家有兴趣的可以自行上网搜索学习。

批量发送邮件

如果是需要同时发送多份邮件,可以把收件人整理成一个表格进行循环遍历,挨个进行发送。

比如我们现在需要给销售部门好几百销售人员分别发送本月各自的销售任务,在发送邮件的时候主题需要命名成xxx任务明细,在正文中的称呼也需要改成对应的收件人,附件中需要添加各自的任务明细表,而且需要抄送给各自的直属上级。

根据上述的需要,我们整理了如下收件人信息相关的表格df:

姓名收件人抄送人
张俊红1zhangjunhong11@163.comzhangjunhong@163.com
张俊红2zhangjunhong22@163.comzhangjunhong@163.com

只需要写一个for循环去遍历这个df表格中的信息,然后就可以分别发送出去,具体实现代码如下:

import smtplibfrom email.mime.multipart import MIMEMultipart from email.mime.text import MIMETextfrom email.mime.image import MIMEImagefrom email.mime.application import MIMEApplicationhost = "smtp.163.com"port = 25username = "zhangjunhong1227@163.com"password = "123zjh"smtp = smtplib.SMTP() #声明一个链接对象smtp.connect(host, port)  # 与服务器进行连接smtp.set_debuglevel(1) #显示出交互信息smtp.login(username, password)  # 登陆邮箱sender = usernamefor i in zip(df["姓名"],df["收件人"],df["抄送人"]):        receiver = i[1] #收件人    acc = i[2] #抄送人    msg = MIMEMultipart() #声明一个邮件对象    msg["from"] = username #发件人    msg["to"] = receiver#收件人    msg["Cc"] = acc #抄送人    msg["Subject"] = i[0] + "任务明细" #主题    # 编写正文    text = MIMEText(i[0]+"您好,这是您这个月的任务明细","plain", "utf-8")     msg.attach(text)    # 添加表格附件    f = open("C:/Users/zhangjunhong/Desktop/任务明细/"+ i[0] + ".xlsx", "rb").read()    filepart = MIMEApplication(f)    filepart.add_header("Content-Disposition","attachment",filename=i[0] + "任务明细.xlsx") #为附件添加一个标题    msg.attach(filepart)    smtp.sendmail(sender, receiver.split(",") + acc.split(","), msg.as_string())  # 发送邮件smtp.quit()  # 断开连接    

通过运行上面的代码,就可以达到一次性给表格df中的所有人发送邮件的需求。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/124104.html

相关文章

  • 我用Python写了一个邮箱脚本发给班花,没想到事情闹大了...

    摘要:大家好,我是辣条。最先审核没通过,说我脚本涉嫌控制电脑违法违规,经过我再三的沟通之下,完整代码删除了,希望能通过审核。 大家好,我是辣条。  前言 开学没多久,事又多正愁缺写博客的素材,这不马上就来了,憨憨室友又要整活 ,看在友(红)情(包)的份上必须帮忙。 我起初的想法是通过邮箱发送表白...

    luckyyulin 评论0 收藏0
  • 自动化测试】发送邮件 SMTP

    摘要:的提供了一种很方便的途径发送电子邮件,它对协议进行了简单的封装。其中负责构造邮件,则负责发送邮件。可能还不止一个发送邮件的主题。 如何使用Python将生成的测试报告以邮件附件的形式进行发送呢? 一、概要 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 python的...

    chenatu 评论0 收藏0
  • 利用Scrapy实现公司内部门户消息邮件通知

    摘要:一项目背景我本人所在公司是一个国有企业,自建有较大的内部网络门户群,几乎所有部门发布各类通知工作要求等消息都在门户网站进行。为了改变这种状况,就想建立一个内部网络消息跟踪通知系统。 一、项目背景   我本人所在公司是一个国有企业,自建有较大的内部网络门户群,几乎所有部门发布各类通知、工作要求等消息都在门户网站进行。由于对应的上级部门比较多,各类通知通告、领导讲话等内容类目繁多,要看一遍...

    tuantuan 评论0 收藏0
  • Python 发送邮件

    摘要:程序人员对于邮件自动化的日常需求还是很高的。更是自带一套模块实现邮件发送。正是为了实现这个而生的,一句话就可以完成所有的登录发送文字附件等功能。参考一句话发送邮件正常一点的发送邮件 程序人员对于邮件自动化的日常需求还是很高的。但是入过了Linux的命令行邮件客户端如Sendmail, Mutt, Alpine等坑之后,发现现代其实很少人真的在用它们实现邮件自动化,根据搜索引擎里相关文章...

    tuomao 评论0 收藏0
  • Python安全攻防:渗透测试实战指南》学习一

    摘要:白盒测试是指在拥有客户组织所有的资产信息的情况下进行渗透测试。信息分析对搜集到的信息进行分析,为下一步实施渗透测试做准备。形成报告按照与客户确定好的范围需求整理渗透测试结果并将资料形成报告。 第1章 渗透测试概述  1.信息安全发展史  2.信息安全行业的现状         2.1渗透测试...

    Baoyuan 评论0 收藏0

发表评论

0条评论

leo108

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<