欢迎访问宙启技术站
智能推送

Python邮件生成器技巧:定制化邮件内容和样式

发布时间:2023-12-23 06:50:56

为了实现定制化的邮件内容和样式生成,我们可以使用Python的邮件库和HTML模板库。下面是一个简单的示例,演示如何使用这些库来生成定制化的邮件。

首先,我们需要导入所需的库:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from jinja2 import Environment, FileSystemLoader

然后,我们可以定义一个生成邮件内容和样式的函数。这个函数将接受一些参数,用于定制邮件的内容。这些参数可以是字符串、图片路径等。

def generate_email(subject, recipient, sender, template, context, images=[]):
    # 创建一个MIMEMultipart对象,用于生成多部分邮件内容
    email = MIMEMultipart()
    
    # 设置邮件的主题、发件人和收件人
    email["Subject"] = subject
    email["From"] = sender
    email["To"] = recipient
    
    # 使用jinja2模板库加载HTML模板
    env = Environment(loader=FileSystemLoader("."))
    template = env.get_template(template)
    
    # 使用模板和上下文生成HTML内容
    html = template.render(context)
    
    # 创建一个MIMEText对象,用于生成邮件的HTML内容
    email_content = MIMEText(html, "html")
    
    # 将邮件的HTML内容添加到MIMEMultipart对象中
    email.attach(email_content)
    
    # 添加图片
    for image in images:
        with open(image, "rb") as fp:
            img_data = fp.read()
            
        email_image = MIMEImage(img_data)
        email_image.add_header("Content-ID", '<{}>'.format(image))
        email.attach(email_image)
    
    return email

接下来,我们可以定义邮件的模板。模板是一个HTML文件,其中包含邮件的内容和样式。我们可以使用jinja2模板语言来插入动态内容。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>{{ subject }}</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            font-size: 14px;
        }
        h1 {
            color: #333;
        }
        .content {
            margin-top: 20px;
        }
        .image {
            margin-top: 10px;
        }
    </style>
</head>
<body>
    <h1>{{ subject }}</h1>
    
    <div class="content">
        <p>Hello, {{ name }}!</p>
        <p>This is a sample email generated using Python.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <p>Etiam in elit dignissim, tempor leo sed, tempus ligula.</p>
    </div>
    
    <div class="image">
        <img src="{{ image_path }}" alt="Sample Image">
    </div>
    
</body>
</html>

在模板中,我们可以使用双花括号来插入变量,例如{{ subject }}{{ name }}。这些变量在生成邮件时将由实际的参数值替代。

最后,我们可以调用generate_email函数来生成邮件。传递相应的参数,包括邮件的主题、收件人、发件人、模板文件、模板上下文和图片路径(可选)。

subject = "Sample Email"
recipient = "recipient@example.com"
sender = "sender@example.com"
template = "email_template.html"
context = {
    "subject": subject,
    "name": "John Doe",
    "image_path": "sample_image.jpg"
}
images = ["sample_image.jpg"]

email = generate_email(subject, recipient, sender, template, context, images)

最后,我们可以使用smtplib库来发送邮件。

try:
    smtp_server = smtplib.SMTP("smtp.example.com", 587)
    smtp_server.ehlo()
    smtp_server.starttls()
    smtp_server.login("sender@example.com", "password")
    smtp_server.send_message(email)
    smtp_server.quit()
    print("Email sent successfully!")
except Exception as e:
    print("Failed to send email. Error:", str(e))

这个示例演示了如何使用Python的邮件库和HTML模板库生成定制化的邮件内容和样式。通过定义邮件模板和相应的上下文,我们可以灵活地生成邮件,并使用HTML来控制邮件的样式。通过添加图片,我们还可以在邮件中包含更丰富的内容。