前言:利用
Python
发送邮件时我们主要借助smtplib
和smtplib
主要用来建立和断开与服务器连接的工作,而
1. 准备工作
不同邮箱的服务器连接地址不一样,大家根据自己使用的邮箱设置相应的服务器连接。其中 163 邮箱在国内比较常用,所以这里以 163 邮箱为例给大家演示一下如何利用 Python
自动发送邮件。在开始进行正式的代码编写之前,需要先登录 163 邮箱进行授权码设置,授权码设置界面如下图所示。
在开始发送邮件编写代码之前,我们需要先登录 163 邮箱进行 POP3/SMTP/IMAP 授权码设置,授权码设置界面如下图所示。
根据提示进行授权码设置,开启 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
格式内容,附件添加图片等等,有兴趣的可以进一步探索 smtplib
和 email
模块。