下面是一个基于Python实现的自动化邮件发送系统的详细代码示例。
首先,我们需要安装两个Python库——pandas和jinja2:
pip install pandas
pip install jinja2
然后,我们需要准备好三个文件:Excel表格(包含收件人信息)、HTML邮件模板、Python脚本。其中,Excel表格应包含收件人姓名、电子邮件地址和主题等信息,如下所示:
Name | Subject | |
---|---|---|
John | john@example.com | Invitation to the party |
Mary | mary@example.com | Request for feedback |
Tom | tom@example.com | A new product announcement |
HTML邮件模板则应该是一封已经设计好样式、内容可以通过占位符替换的电子邮件,如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{subject}}</title>
</head>
<body>
<h1>{{greeting}}, {{name}}!</h1>
<p>{{message}}</p>
<img src="cid:image">
</body>
</html>
其中,{{subject}}
、{{greeting}}
、{{name}}
和{{message}}
都是占位符,可以在Python脚本中进行替换。<img>
标签中的src
属性则用来引入消息中的图片,而cid:image
则是图片的Content-ID。
最后,我们需要编写Python脚本。下面是一个完整的代码示例,注释中详细说明了各个步骤的实现:
import pandas as pd
from jinja2 import Template
import smtplib, ssl
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.application import MIMEApplication
# 读取Excel表格数据
df = pd.read_excel('recipients.xlsx')
# 设置SMTP服务器地址和端口号
smtp_server = 'smtp.gmail.com'
port = 587
# 设置发件人信息
sender_email = 'your_email@gmail.com' # 发件人电子邮件地址
password = input('Enter your password: ') # Gmail App密码或授权码
# 创建SSL安全连接
context = ssl.create_default_context()
# 准备邮件模板
with open('template.html', 'r', encoding='utf-8') as f:
template = Template(f.read())
# 循环遍历Excel表格中的所有收件人
for _, row in df.iterrows():
# 获取收件人信息
name = row['Name']
recipient_email = row['Email']
subject = row['Subject']
# 替换邮件模板中的占位符
message = template.render(greeting='Hello', name=name, message='How are you doing today?', subject=subject)
# 创建包含邮件内容的MIMEMultipart对象
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = sender_email
msg['To'] = recipient_email
# 添加文本消息
text = MIMEText(message)
msg.attach(text)
# 添加图片消息
with open('image.jpg', 'rb') as f:
img_data = f.read()
img = MIMEImage(img_data, name='image.jpg')
img.add_header('Content-ID', '<image>')
msg.attach(img)
# 添加附件消息
with open('document.pdf', 'rb') as f:
pdf_data = f.read()
pdf = MIMEApplication(pdf_data, name='document.pdf')
pdf['Content-Disposition'] = 'attachment; filename=document.pdf'
msg.attach(pdf)
# 连接SMTP服务器并发送邮件
with smtplib.SMTP(smtp_server, port) as server:
server.starttls(context=context)
server.login(sender_email, password)
server.sendmail(sender_email, recipient_email, msg.as_string())
# 输出成功信息
print('All emails have been sent successfully!')
在这个脚本中,我们首先使用pandas库读取Excel表格中的收件人信息。然后,我们通过smtplib库连接到指定的SMTP服务器,并创建SSL安全连接。
接下来,我们使用jinja2库准备好HTML邮件模板,并循环遍历Excel表格中的所有收件人。在每次循环中,我们获取收件人信息,替换邮件模板中的占位符,并创建包含邮件内容的MIMEMultipart对象。在MIMEMultipart对象中,我们添加了文本消息、图片消息和附件消息。
最后,在连接到SMTP服务器后,我们使用sendmail方法发送邮件,完成自动化邮件发送操作。