Python实现自动化邮件发送过程详解
简介
本文将为读者介绍如何使用Python实现自动化邮件发送,通过代码编写能够大量减轻我们手工发送邮件的工作量,提高工作效率。本文将从以下几个方面进行介绍:
- 准备工作:Python虚拟环境、SMTP协议、邮件服务等
- 实现发送文本邮件:使用smtplib模块发送邮件
- 实现发送HTML邮件:使用email.mime模块发送HTML格式邮件
- 实现发送附件邮件:使用email.mime模块发送附件
准备工作
Python虚拟环境
在使用Python进行开发时,强烈建议使用虚拟环境隔离不同项目所依赖的模块,以免因某个模块升级导致不同项目出现冲突。
在命令行执行以下命令创建虚拟环境:
python -m venv venv
激活虚拟环境:
- Windows:
venv\Scripts\activate.bat
- Linux/Mac:
source venv/bin/activate
SMTP协议
SMTP(Simple Mail Transfer Protocol)是一种用于发送和传递电子邮件的标准协议。在使用Python发送邮件时,需要对SMTP协议进行了解。
SMTP协议使用的端口有:
- 25:普通SMTP端口,用于最简单的邮件传输
- 587:加密SMTP端口,用于加密的邮件传输
- 465:SSL SMTP端口,用于SSL加密的邮件传输
邮件服务
使用Python发送邮件时,需要在邮件服务商处申请开通SMTP服务。以163邮箱为例,步骤如下:
- 打开“设置”页面
- 点击“客户端授权密码”,开启该选项
- 记录下授权码,稍后将用到
实现发送文本邮件
发送文本邮件时,可以使用Python标准库中的smtplib模块。
示例代码:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 邮件内容
message_text = 'Hello world!'
# 邮件信息
message = MIMEText(message_text, 'plain', 'utf-8')
message['From'] = Header('发件人姓名', 'utf-8')
message['To'] = Header('收件人姓名', 'utf-8')
message['Subject'] = Header('邮件主题', 'utf-8')
# 发送邮件
smtp_host = 'smtp.163.com'
smtp_port = 465
smtp_user = '发送者邮箱地址'
smtp_password = '发送者的授权码'
smtp_server = smtplib.SMTP_SSL(smtp_host, smtp_port)
smtp_server.login(smtp_user, smtp_password)
smtp_server.sendmail(smtp_user, ['接收者邮箱地址'], message.as_string())
smtp_server.quit()
在编写邮件信息时,可以使用email.header模块对邮件头进行编码。
实现发送HTML邮件
除了文本邮件,还可以发送HTML格式的邮件。需要使用Python标准库中的email.mime模块。
示例代码:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.header import Header
# 邮件信息
message = MIMEMultipart()
message['From'] = Header('发件人姓名', 'utf-8')
message['To'] = Header('收件人姓名', 'utf-8')
message['Subject'] = Header('邮件主题', 'utf-8')
# 邮件正文
html = '<html><body><h1>Hello world!</h1><img src="cid:img1"></body></html>'
message_html = MIMEText(html, 'html', 'utf-8')
message.attach(message_html)
# 图片附件
with open('image.jpg', 'rb') as f:
image_data = f.read()
img = MIMEImage(image_data, name='image.jpg')
img.add_header('Content-ID', '<img1>')
message.attach(img)
# 发送邮件
smtp_host = 'smtp.163.com'
smtp_port = 465
smtp_user = '发送者邮箱地址'
smtp_password = '发送者的授权码'
smtp_server = smtplib.SMTP_SSL(smtp_host, smtp_port)
smtp_server.login(smtp_user, smtp_password)
smtp_server.sendmail(smtp_user, ['接收者邮箱地址'], message.as_string())
smtp_server.quit()
HTML邮件中,需要将HTML内容作为MIMEText附加到MIMEMultipart中。
实现发送附件邮件
除了文本和HTML邮件,还可以发送附件。需要使用Python标准库中的email.mime模块。
示例代码:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header
# 邮件信息
message = MIMEMultipart()
message['From'] = Header('发件人姓名', 'utf-8')
message['To'] = Header('收件人姓名', 'utf-8')
message['Subject'] = Header('邮件主题', 'utf-8')
# 邮件正文
message_text = 'Hello world!'
message.attach(MIMEText(message_text, 'plain', 'utf-8'))
# 附件
with open('file.txt', 'rb') as f:
attachment_data = f.read()
file = MIMEApplication(attachment_data, name='file.txt')
file.add_header('Content-Disposition', 'attachment', filename='file.txt')
message.attach(file)
# 发送邮件
smtp_host = 'smtp.163.com'
smtp_port = 465
smtp_user = '发送者邮箱地址'
smtp_password = '发送者的授权码'
smtp_server = smtplib.SMTP_SSL(smtp_host, smtp_port)
smtp_server.login(smtp_user, smtp_password)
smtp_server.sendmail(smtp_user, ['接收者邮箱地址'], message.as_string())
smtp_server.quit()
附件邮件中,需要将附件作为MIMEApplication附加到MIMEMultipart中,并使用Content-Disposition头指定附件的文件名。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现自动化邮件发送过程详解 - Python技术站