登录
原创

利用Python的smtplib和email模块自动发送邮件方法

发布于 2020-10-14 阅读 104
  • Python
原创

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

1. 准备工作

不同邮箱的服务器连接地址不一样,大家根据自己使用的邮箱设置相应的服务器连接。其中 163 邮箱在国内比较常用,所以这里以 163 邮箱为例给大家演示一下如何利用 Python 自动发送邮件。在开始进行正式的代码编写之前,需要先登录 163 邮箱进行授权码设置,授权码设置界面如下图所示。

在开始发送邮件编写代码之前,我们需要先登录 163 邮箱进行 POP3/SMTP/IMAP 授权码设置,授权码设置界面如下图所示。

163POP3SMTPIMAPsetting.png

根据提示进行授权码设置,开启 IMAP/SMTP服务 和 POP3/SMTP服务,可能需要发送短信验证码校验,校验通过后会生成一串类似于 YMTACOTFTCP***** 字符串,记得保存起来。 设置成功后就可以在 Python 中利用授权码登录。此时如果在 Python 中使用原先的邮箱密码登录会报错。

2. 编写发送邮件代码

#!/usr/bin/env python3

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

# 发件人邮箱
asender = "sendxxx@163.com"
# 收件人邮箱
areceiver = "407505xxx@qq.com"
# 抄送人邮箱
acc = "xxx@think-land.com"
# 邮件主题
asubject = "测试发送邮件!"

# 发件人地址
from_addr = asender
# 邮箱授权码(请自行替换)
password = "YMTACOTFTCP*****"

# 邮件设置
msg = MIMEMultipart()
msg['Subject'] = asubject
msg['to'] = areceiver
msg['Cc'] = acc
msg['from'] = 'Lisgroup'

# 邮件正文
body = "你好,这是一封测试发送的邮件"
# 添加邮件正文
msg.attach(MIMEText(body, 'plain', 'utf-8'))

# 添加附件
# 注意:这里的文件路径是分割线
xlsxpart = MIMEApplication(open('/home/lisgroup/Desktop/sale.xlsx', 'rb').read())
xlsxpart.add_header('Content-Disposition', 'attachment', filename='sale.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()

3. 案例总结

如果需要同时发送多封邮件,可以把上述邮件发送过程定义成一个函数,把收件人及其他内容生成一个列表,然后遍历每一个收件人,最后调用发送邮件函数进行批量发送操作。

关于自动发送邮件还有很多内容,比如定时发送,正文显示 html 格式内容,附件添加图片等等,有兴趣的可以进一步探索 smtplibemail 模块。

评论区

lisgroup
8粉丝

励志做一条安静的咸鱼,从此走上人生巅峰。

0

0

0