Python如何实现自动发送邮件

 更新时间:2021年11月22日 11:04:16   作者:俊红的数据分析之路  
对于一些每天需要发的报表或者是需要一次发送多份的报表,我们可以考虑借助Python来自动发送邮件。本文主要介绍了如何利用Python实现自动发送邮件,感兴趣的小伙伴可以了解一下

自动发送邮件

我们把报表做出来以后一般都是需要发给别人查看,对于一些每天需要发的报表或者是需要一次发送多份的报表,这个时候可以考虑借助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 smtplib

smtp = 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 smtplib
from email.mime.multipart import MIMEMultipart 
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()

最后的结果如下图:

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

批量发送邮件

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

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

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

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

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

import smtplib
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.application import MIMEApplication

host = "smtp.163.com"
port = 25
username = "zhangjunhong1227@163.com"
password = "123zjh"

smtp = smtplib.SMTP() #声明一个链接对象
smtp.connect(host, port)  # 与服务器进行连接
smtp.set_debuglevel(1) #显示出交互信息
smtp.login(username, password)  # 登陆邮箱

sender = username

for 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中的所有人发送邮件的需求。

以上就是 Python如何实现自动发送邮件的详细内容,更多关于 Python发送邮件的资料请关注脚本之家其它相关文章!

相关文章

  • Python Django Vue 项目创建过程详解

    Python Django Vue 项目创建过程详解

    这篇文章主要介绍了Python Django Vue 项目创建过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 简单介绍Python中的struct模块

    简单介绍Python中的struct模块

    这篇文章主要介绍了Python中的struct模块,代码基于Python2.x版本,需要的朋友可以参考下
    2015-04-04
  • Python实现word2Vec model过程解析

    Python实现word2Vec model过程解析

    这篇文章主要介绍了Python实现word2Vec model过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 一文带你详解Python中sys.executable函数的作用

    一文带你详解Python中sys.executable函数的作用

    sys.executable函数是用来获取当前Python解释器的完整路径的,本文主要介绍了一文带你详解Python中sys.executable函数的作用,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Python中的五个神仙级函数一起来看看

    Python中的五个神仙级函数一起来看看

    这篇文章主要为大家介绍了Python中的五个神仙级函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • python中的logging模块的简单应用和高级使用

    python中的logging模块的简单应用和高级使用

    在 Python 中,可以使用内置的 logging 模块来记录应用程序的信息,logging 模块还提供了一些高级功能,如日志回溯、日志轮换、日志缓冲等,需要的朋友可以参考下
    2023-04-04
  • python线程类改变类变量的操作代码

    python线程类改变类变量的操作代码

    这篇文章主要介绍了python线程类改变类变量的操作代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • python神经网络使用tensorflow构建长短时记忆LSTM

    python神经网络使用tensorflow构建长短时记忆LSTM

    这篇文章主要为大家介绍了python机器学习tensorflow构建长短时记忆网络LSTM,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • python编程使用协程并发的优缺点

    python编程使用协程并发的优缺点

    协程是一种用户态的轻量级线程,又称微线程。这篇文章主要介绍了python编程使用协程并发的优缺点,感兴趣的朋友跟随小编一起看看吧
    2018-09-09
  • Python使用type关键字创建类步骤详解

    Python使用type关键字创建类步骤详解

    在本文里我们给读者们整理了关于Python如何使用type关键字创建类的相关知识点,需要的朋友们参考学习下。
    2019-07-07

最新评论