下面是一个基于Python实现的自动化邮件发送系统的详细代码示例。

首先,我们需要安装两个Python库——pandas和jinja2:

pip install pandas
pip install jinja2

然后,我们需要准备好三个文件:Excel表格(包含收件人信息)、HTML邮件模板、Python脚本。其中,Excel表格应包含收件人姓名、电子邮件地址和主题等信息,如下所示:

Name

Email

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方法发送邮件,完成自动化邮件发送操作。