使用Python发送电子邮件

        大家好,当我们需要迅速、方便地与他人沟通时,电子邮件是无疑是一种不可或缺的通信工具。无论是在个人生活中还是工作场合,电子邮件都是我们日常生活中的重要组成部分。它不仅能够传递文字信息,还可以发送附件、链接和嵌入式多媒体内容,从而满足了各种通信需求。

        随着技术的不断发展,许多任务和流程都变得自动化。在这种背景下,使用Python编写脚本来发送电子邮件变得越来越普遍。Python提供了强大的库,如smtplib和email,使得发送邮件变得异常简单,甚至可以集成到自动化任务或Web应用程序中。

        本文的目标是为大家提供一个简单易懂的教程,介绍如何使用Python发送电子邮件。将逐步引导了解如何准备工作、设置邮件内容、连接到SMTP服务器、发送邮件,并处理可能出现的错误。通过本文,读者将能够掌握发送电子邮件的基本技能,并了解一些关于保护邮件发送安全性的最佳实践。无论是作为Python初学者还是有一定经验的开发者,都能从本文中获得实用的知识,以便更好地利用Python发送电子邮件。

一、发送纯文本邮件

以下是详细介绍如何使用Python发送纯文本邮件的步骤,包括代码示例和对每一步的解释:

1、导入必要的库

        首先,导入Python的smtplib和email库。smtplib库提供了与SMTP服务器通信的功能,而email库用于构建邮件消息。

import smtplib
from email.mime.text import MIMEText

2、设置发件人、收件人和邮件内容

创建一个MIMEText对象来表示邮件的文本内容,并设置发件人、收件人和主题。

# 邮件内容
message = MIMEText("这是一封纯文本邮件。")

# 发件人
message["From"] = "sender@example.com"

# 收件人
message["To"] = "recipient@example.com"

# 主题
message["Subject"] = "纯文本邮件示例"

3、连接到SMTP服务器并发送邮件

使用smtplib库连接到SMTP服务器,并使用登录凭据发送邮件。

# SMTP服务器地址和端口号
smtp_server = "smtp.example.com"
smtp_port = 587  # 假设使用的是TLS加密,端口号为587

# 发件人邮箱登录凭据
username = "sender@example.com"
password = "your_password"

# 连接到SMTP服务器
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()  # 开启TLS加密

# 登录邮箱账号
server.login(username, password)

# 发送邮件
server.sendmail(username, ["recipient@example.com"], message.as_string())

# 关闭连接
server.quit()

解释:

  • 在第2步中,我们创建了一个MIMEText对象来表示纯文本邮件的内容。这个对象接受邮件的正文作为参数。
  • 我们设置了发件人、收件人和主题,分别通过message的["From"]、["To"]和["Subject"]属性实现。
  • 在第3步中,我们连接到SMTP服务器并登录邮箱账号。我们使用starttls()方法开启TLS加密,以确保邮件传输的安全性。
  • 最后,我们使用sendmail()方法将邮件发送给收件人,并通过quit()方法关闭与SMTP服务器的连接。

4、示例

下面是一个完整的示例代码,演示如何使用Python发送纯文本邮件:

import smtplib
from email.mime.text import MIMEText

def send_plain_text_email(sender_email, sender_password, recipient_email, subject, body):
    # 创建邮件内容
    message = MIMEText(body)
    message["From"] = sender_email
    message["To"] = recipient_email
    message["Subject"] = subject

    # 设置SMTP服务器信息
    smtp_server = "smtp.example.com"
    smtp_port = 587  # 假设使用的是TLS加密,端口号为587

    try:
        # 连接到SMTP服务器
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()  # 开启TLS加密

        # 登录邮箱账号
        server.login(sender_email, sender_password)

        # 发送邮件
        server.sendmail(sender_email, [recipient_email], message.as_string())

        print("邮件发送成功!")
    except Exception as e:
        print("邮件发送失败:", e)
    finally:
        # 关闭连接
        server.quit()

# 输入发件人邮箱地址、密码、收件人邮箱地址、主题和邮件内容
sender_email = "sender@example.com"
sender_password = "your_password"
recipient_email = "recipient@example.com"
subject = "纯文本邮件示例"
body = "这是一封纯文本邮件。"

# 发送邮件
send_plain_text_email(sender_email, sender_password, recipient_email, subject, body)

在这个示例中,需要替换以下变量的值:

  • sender_email: 发件人的邮箱地址。
  • sender_password: 发件人的邮箱密码。
  • recipient_email: 收件人的邮箱地址。
  • smtp_server: 发件人邮箱所属的SMTP服务器地址。
  • smtp_port: SMTP服务器的端口号,通常为587(假设使用TLS加密)。
  • subject: 邮件的主题。
  • body: 邮件的正文内容。

二、发送HTML邮件

        发送HTML格式的邮件可以让邮件的内容更具有吸引力和可读性,因为它允许使用各种格式的文本、图像、链接和样式。

以下是详细介绍如何使用Python发送带有HTML格式的邮件的步骤,以及讨论HTML邮件的优点和用例:

1、导入必要的库

        首先,导入Python的smtplib和email库。smtplib库提供了与SMTP服务器通信的功能,而email库用于构建邮件消息。

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

2、设置发件人、收件人和邮件内容

        创建一个MIMEMultipart对象来表示邮件消息的多部分内容,其中一部分是HTML格式的文本。设置发件人、收件人和主题。

# 创建邮件消息对象
message = MIMEMultipart()

# 邮件正文(HTML格式)
html_body = """
<html>
<head></head>
<body>
<h1>这是一封HTML格式的邮件</h1>
<p>这是一段<b>加粗</b>的文本。</p>
<p>这是一个<a href="https://www.example.com">链接</a>。</p>
</body>
</html>
"""

# 将HTML内容添加到邮件消息中
message.attach(MIMEText(html_body, "html"))

# 发件人
message["From"] = "sender@example.com"

# 收件人
message["To"] = "recipient@example.com"

# 主题
message["Subject"] = "HTML邮件示例"

3、连接到SMTP服务器并发送邮件

使用smtplib库连接到SMTP服务器,并使用登录凭据发送邮件。

# SMTP服务器地址和端口号
smtp_server = "smtp.example.com"
smtp_port = 587  # 假设使用的是TLS加密,端口号为587

# 发件人邮箱登录凭据
username = "sender@example.com"
password = "your_password"

try:
    # 连接到SMTP服务器
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()  # 开启TLS加密

    # 登录邮箱账号
    server.login(username, password)

    # 发送邮件
    server.sendmail(username, ["recipient@example.com"], message.as_string())

    print("邮件发送成功!")
except Exception as e:
    print("邮件发送失败:", e)
finally:
    # 关闭连接
    server.quit()

4、示例

下面是一个完整的示例代码,演示如何使用Python发送带有HTML格式的邮件:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

def send_html_email(sender_email, sender_password, recipient_email, subject, html_body):
    # 创建邮件消息对象
    message = MIMEMultipart()

    # 邮件正文(HTML格式)
    message.attach(MIMEText(html_body, "html"))

    # 发件人
    message["From"] = sender_email

    # 收件人
    message["To"] = recipient_email

    # 主题
    message["Subject"] = subject

    # 设置SMTP服务器信息
    smtp_server = "smtp.example.com"
    smtp_port = 587  # 假设使用的是TLS加密,端口号为587

    try:
        # 连接到SMTP服务器
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()  # 开启TLS加密

        # 登录邮箱账号
        server.login(sender_email, sender_password)

        # 发送邮件
        server.sendmail(sender_email, [recipient_email], message.as_string())

        print("邮件发送成功!")
    except Exception as e:
        print("邮件发送失败:", e)
    finally:
        # 关闭连接
        server.quit()

# 输入发件人邮箱地址、密码、收件人邮箱地址、主题和HTML邮件内容
sender_email = "sender@example.com"
sender_password = "your_password"
recipient_email = "recipient@example.com"
subject = "HTML邮件示例"
html_body = """
<html>
<head></head>
<body>
<h1>这是一封HTML格式的邮件</h1>
<p>这是一段<b>加粗</b>的文本。</p>
<p>这是一个<a href="https://www.example.com">链接</a>。</p>
</body>
</html>
"""

# 发送HTML邮件
send_html_email(sender_email, sender_password, recipient_email, subject, html_body)

在这个示例中,需要替换以下变量的值:

  • sender_email: 发件人的邮箱地址。
  • sender_password: 发件人的邮箱密码。
  • recipient_email: 收件人的邮箱地址。
  • smtp_server: 发件人邮箱所属的SMTP服务器地址。
  • smtp_port: SMTP服务器的端口号,通常为587(假设使用TLS加密)。
  • subject: 邮件的主题。
  • html_body: 邮件的HTML格式内容。

三、发送带附件的邮件

        发送带附件的邮件是非常常见的需求,它允许你在邮件中包含文档、图片、PDF文件等附件。以下是详细介绍如何使用Python发送包含附件的邮件的步骤,以及演示如何添加文本、图像或其他文件作为附件的示例代码:

1、导入必要的库

        首先,导入Python的smtplib和email库。smtplib库提供了与SMTP服务器通信的功能,而email库用于构建邮件消息。

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.application import MIMEApplication

2、设置发件人、收件人和邮件内容

        创建一个MIMEMultipart对象来表示邮件消息的多部分内容。设置发件人、收件人和主题。添加文本或HTML格式的正文。

# 创建邮件消息对象
message = MIMEMultipart()

# 邮件正文
text_body = "这是一封带附件的邮件。"
message.attach(MIMEText(text_body, "plain"))

# 发件人
message["From"] = "sender@example.com"

# 收件人
message["To"] = "recipient@example.com"

# 主题
message["Subject"] = "带附件的邮件示例"

3、添加附件

        为了添加附件,需要使用MIMEApplication(对于二进制文件)或MIMEImage(对于图片文件)等MIME子类,并将附件内容读取并添加到消息中。

# 添加文本文件附件
text_attachment = MIMEApplication(open("document.txt", "rb").read())
text_attachment.add_header('Content-Disposition', 'attachment', filename="document.txt")
message.attach(text_attachment)

# 添加图片文件附件
image_attachment = MIMEImage(open("image.jpg", "rb").read())
image_attachment.add_header('Content-Disposition', 'attachment', filename="image.jpg")
message.attach(image_attachment)

4、连接到SMTP服务器并发送邮件

使用smtplib库连接到SMTP服务器,并使用登录凭据发送邮件。

# 设置SMTP服务器信息
smtp_server = "smtp.example.com"
smtp_port = 587  # 假设使用的是TLS加密,端口号为587

# 发件人邮箱登录凭据
username = "sender@example.com"
password = "your_password"

try:
    # 连接到SMTP服务器
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()  # 开启TLS加密

    # 登录邮箱账号
    server.login(username, password)

    # 发送邮件
    server.sendmail(username, ["recipient@example.com"], message.as_string())

    print("邮件发送成功!")
except Exception as e:
    print("邮件发送失败:", e)
finally:
    # 关闭连接
    server.quit()

5、示例

下面是一个完整的示例代码,演示如何使用Python发送带有附件的邮件:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.application import MIMEApplication

def send_email_with_attachment(sender_email, sender_password, recipient_email, subject, body, attachment_paths):
    # 创建邮件消息对象
    message = MIMEMultipart()

    # 邮件正文
    message.attach(MIMEText(body, "plain"))

    # 添加附件
    for attachment_path in attachment_paths:
        attachment = create_attachment(attachment_path)
        message.attach(attachment)

    # 发件人
    message["From"] = sender_email

    # 收件人
    message["To"] = recipient_email

    # 主题
    message["Subject"] = subject

    # 设置SMTP服务器信息
    smtp_server = "smtp.example.com"
    smtp_port = 587  # 假设使用的是TLS加密,端口号为587

    try:
        # 连接到SMTP服务器
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()  # 开启TLS加密

        # 登录邮箱账号
        server.login(sender_email, sender_password)

        # 发送邮件
        server.sendmail(sender_email, [recipient_email], message.as_string())

        print("邮件发送成功!")
    except Exception as e:
        print("邮件发送失败:", e)
    finally:
        # 关闭连接
        server.quit()

def create_attachment(file_path):
    # 获取文件名和文件扩展名
    filename = file_path.split("/")[-1]
    file_extension = filename.split(".")[-1]

    # 根据文件扩展名选择合适的MIME类型
    if file_extension.lower() == "txt":
        attachment = MIMEText(open(file_path, "rb").read())
    elif file_extension.lower() in ["jpg", "jpeg", "png", "gif"]:
        attachment = MIMEImage(open(file_path, "rb").read())
    else:
        attachment = MIMEApplication(open(file_path, "rb").read())

    # 添加文件名到附件的头部
    attachment.add_header('Content-Disposition', 'attachment', filename=filename)
    return attachment

# 输入发件人邮箱地址、密码、收件人邮箱地址、主题、正文和附件路径
sender_email = "sender@example.com"
sender_password = "your_password"
recipient_email = "recipient@example.com"
subject = "带附件的邮件示例"
body = "这是一封带附件的邮件。请查收附件。"
attachment_paths = ["document.txt", "image.jpg"]

# 发送带附件的邮件
send_email_with_attachment(sender_email, sender_password, recipient_email, subject, body, attachment_paths)

在这个示例中,需要替换以下变量的值:

  • sender_email: 发件人的邮箱地址。
  • sender_password: 发件人的邮箱密码。
  • recipient_email: 收件人的邮箱地址。
  • subject: 邮件的主题。
  • body: 邮件的正文内容。
  • attachment_paths: 包含要添加为附件的文件的路径列表。

四、发送带图片嵌入的邮件

        在邮件中嵌入图片可以使邮件内容更加生动,例如创建富文本签名、发送图文并茂的内容等。以下是详细介绍如何在邮件中嵌入图片的步骤,以及讨论嵌入图片的用途:

1、导入必要的库

        首先,导入Python的smtplib和email库。smtplib库提供了与SMTP服务器通信的功能,而email库用于构建邮件消息。

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

2、设置发件人、收件人和邮件内容

        创建一个MIMEMultipart对象来表示邮件消息的多部分内容。设置发件人、收件人和主题。添加文本或HTML格式的正文。

# 创建邮件消息对象
message = MIMEMultipart()

# 邮件正文(HTML格式)
html_body = """
<html>
<head></head>
<body>
<h1>这是一封带图片的邮件</h1>
<p>以下是嵌入的图片:</p>
<img src="cid:image1" alt="image">
</body>
</html>
"""

# 将HTML内容添加到邮件消息中
message.attach(MIMEText(html_body, "html"))

# 发件人
message["From"] = "sender@example.com"

# 收件人
message["To"] = "recipient@example.com"

# 主题
message["Subject"] = "带图片嵌入的邮件示例"

3、添加嵌入的图片

        使用MIMEImage类将图片文件加载到消息中,并为每个嵌入的图片指定一个唯一的CID(Content-ID),以便在HTML内容中引用。

# 添加嵌入的图片
with open("image.jpg", "rb") as img_file:
    image = MIMEImage(img_file.read())
    image.add_header('Content-ID', '<image1>')
    message.attach(image)

4、连接到SMTP服务器并发送邮件

使用smtplib库连接到SMTP服务器,并使用登录凭据发送邮件。

# 设置SMTP服务器信息
smtp_server = "smtp.example.com"
smtp_port = 587  # 假设使用的是TLS加密,端口号为587

# 发件人邮箱登录凭据
username = "sender@example.com"
password = "your_password"

try:
    # 连接到SMTP服务器
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()  # 开启TLS加密

    # 登录邮箱账号
    server.login(username, password)

    # 发送邮件
    server.sendmail(username, ["recipient@example.com"], message.as_string())

    print("邮件发送成功!")
except Exception as e:
    print("邮件发送失败:", e)
finally:
    # 关闭连接
    server.quit()

5、示例

下面是一个完整的示例代码,演示如何使用Python发送带有嵌入图片的邮件:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

def send_email_with_embedded_image(sender_email, sender_password, recipient_email, subject, html_body, image_path):
    # 创建邮件消息对象
    message = MIMEMultipart()

    # 邮件正文(HTML格式)
    message.attach(MIMEText(html_body, "html"))

    # 添加嵌入的图片
    with open(image_path, "rb") as img_file:
        image = MIMEImage(img_file.read())
        image.add_header('Content-ID', '<image1>')
        message.attach(image)

    # 发件人
    message["From"] = sender_email

    # 收件人
    message["To"] = recipient_email

    # 主题
    message["Subject"] = subject

    # 设置SMTP服务器信息
    smtp_server = "smtp.example.com"
    smtp_port = 587  # 假设使用的是TLS加密,端口号为587

    try:
        # 连接到SMTP服务器
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()  # 开启TLS加密

        # 登录邮箱账号
        server.login(sender_email, sender_password)

        # 发送邮件
        server.sendmail(sender_email, [recipient_email], message.as_string())

        print("邮件发送成功!")
    except Exception as e:
        print("邮件发送失败:", e)
    finally:
        # 关闭连接
        server.quit()

# 输入发件人邮箱地址、密码、收件人邮箱地址、主题、HTML邮件内容和图片路径
sender_email = "sender@example.com"
sender_password = "your_password"
recipient_email = "recipient@example.com"
subject = "带图片嵌入的邮件示例"
html_body = """
<html>
<head></head>
<body>
<h1>这是一封带图片的邮件</h1>
<p>以下是嵌入的图片:</p>
<img src="cid:image1" alt="image">
</body>
</html>
"""
image_path = "image.jpg"

# 发送带图片嵌入的邮件
send_email_with_embedded_image(sender_email, sender_password, recipient_email, subject, html_body, image_path)

在这个示例中,需要替换以下变量的值:

  • sender_email: 发件人的邮箱地址。
  • sender_password: 发件人的邮箱密码。
  • recipient_email: 收件人的邮箱地址。
  • subject: 邮件的主题。
  • html_body: 邮件的HTML格式内容,其中的<img>标签使用了CID(Content-ID)来引用嵌入的图片。
  • image_path: 要嵌入的图片文件的路径。

五、发送带样式的邮件

        发送带样式的邮件可以使邮件内容更加美观和吸引人。在HTML邮件中使用CSS样式可以控制文本的字体、颜色、大小,设置背景色、边框等,从而实现更丰富的邮件内容样式。

        以下是详细介绍如何在HTML邮件中使用CSS样式的步骤,以及演示如何美化邮件内容的示例代码:

1、创建HTML邮件内容

        首先,构建HTML格式的邮件内容,包括所需的文本、图片和其他元素。在HTML中使用<style>标签添加CSS样式。

<!DOCTYPE html>
<html>
<head>
<style>
/* CSS样式 */
body {
    font-family: Arial, sans-serif;
    background-color: #f2f2f2;
    padding: 20px;
}

h1 {
    color: #333;
    text-align: center;
}

p {
    color: #666;
    font-size: 16px;
}

.img-container {
    text-align: center;
}

img {
    width: 300px;
    border-radius: 10px;
}
</style>
</head>
<body>

<h1>这是一封带样式的邮件</h1>
<p>这是一段带有样式的文本。</p>
<div class="img-container">
    <img src="cid:image1" alt="image">
</div>

</body>
</html>

2、创建邮件消息对象并添加内容

使用Python的email库创建邮件消息对象,并将HTML内容添加到邮件中。

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

def send_styled_email(sender_email, sender_password, recipient_email, subject, html_content, image_path):
    # 创建邮件消息对象
    message = MIMEMultipart()

    # 邮件正文(HTML格式)
    message.attach(MIMEText(html_content, "html"))

    # 添加嵌入的图片
    with open(image_path, "rb") as img_file:
        image = MIMEImage(img_file.read())
        image.add_header('Content-ID', '<image1>')
        message.attach(image)

    # 发件人
    message["From"] = sender_email

    # 收件人
    message["To"] = recipient_email

    # 主题
    message["Subject"] = subject

    # 设置SMTP服务器信息
    smtp_server = "smtp.example.com"
    smtp_port = 587  # 假设使用的是TLS加密,端口号为587

    try:
        # 连接到SMTP服务器
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()  # 开启TLS加密

        # 登录邮箱账号
        server.login(sender_email, sender_password)

        # 发送邮件
        server.sendmail(sender_email, [recipient_email], message.as_string())

        print("邮件发送成功!")
    except Exception as e:
        print("邮件发送失败:", e)
    finally:
        # 关闭连接
        server.quit()

# 输入发件人邮箱地址、密码、收件人邮箱地址、主题、HTML邮件内容和图片路径
sender_email = "sender@example.com"
sender_password = "your_password"
recipient_email = "recipient@example.com"
subject = "带样式的邮件示例"
html_content = """<!DOCTYPE html>
<html>
<head>
<style>
/* CSS样式 */
body {
    font-family: Arial, sans-serif;
    background-color: #f2f2f2;
    padding: 20px;
}

h1 {
    color: #333;
    text-align: center;
}

p {
    color: #666;
    font-size: 16px;
}

.img-container {
    text-align: center;
}

img {
    width: 300px;
    border-radius: 10px;
}
</style>
</head>
<body>

<h1>这是一封带样式的邮件</h1>
<p>这是一段带有样式的文本。</p>
<div class="img-container">
    <img src="cid:image1" alt="image">
</div>

</body>
</html>"""
image_path = "image.jpg"

# 发送带样式的邮件
send_styled_email(sender_email, sender_password, recipient_email, subject, html_content, image_path)

六、发送带链接的邮件

        在邮件中添加链接可以使邮件更具交互性和实用性,例如发送通知邮件时可以提供查看更多信息的链接,或者发送订阅确认邮件时可以包含确认订阅的链接。

以下是详细介绍如何在邮件中添加链接的步骤,以及提供了实际用例和示例代码:

1、创建邮件内容

首先,构建邮件的HTML内容,并在需要添加链接的地方使用<a>标签添加链接。

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1>这是一封带链接的邮件</h1>
<p>点击以下链接查看更多信息:</p>
<a href="https://www.example.com">点击这里</a>。
</body>
</html>

2、创建邮件消息对象并添加内容

使用Python的email库创建邮件消息对象,并将HTML内容添加到邮件中。

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

def send_email_with_link(sender_email, sender_password, recipient_email, subject, html_content):
    # 创建邮件消息对象
    message = MIMEMultipart()

    # 邮件正文(HTML格式)
    message.attach(MIMEText(html_content, "html"))

    # 发件人
    message["From"] = sender_email

    # 收件人
    message["To"] = recipient_email

    # 主题
    message["Subject"] = subject

    # 设置SMTP服务器信息
    smtp_server = "smtp.example.com"
    smtp_port = 587  # 假设使用的是TLS加密,端口号为587

    try:
        # 连接到SMTP服务器
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()  # 开启TLS加密

        # 登录邮箱账号
        server.login(sender_email, sender_password)

        # 发送邮件
        server.sendmail(sender_email, [recipient_email], message.as_string())

        print("邮件发送成功!")
    except Exception as e:
        print("邮件发送失败:", e)
    finally:
        # 关闭连接
        server.quit()

# 输入发件人邮箱地址、密码、收件人邮箱地址、主题和HTML邮件内容
sender_email = "sender@example.com"
sender_password = "your_password"
recipient_email = "recipient@example.com"
subject = "带链接的邮件示例"
html_content = """<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1>这是一封带链接的邮件</h1>
<p>点击以下链接查看更多信息:</p>
<a href="https://www.example.com">点击这里</a>。
</body>
</html>"""

# 发送带链接的邮件
send_email_with_link(sender_email, sender_password, recipient_email, subject, html_content)

七、发送群发邮件

        发送群发邮件是一种常见的需求,它允许你一次性向多个收件人发送相同的邮件内容。以下是详细介绍如何使用Python发送群发邮件的步骤,以及提供了示例代码:

1、准备邮件内容

        首先,准备好要发送的邮件内容,包括主题、正文等。在邮件内容中,可以使用{name}等占位符来个性化地填充收件人的信息。

subject = "关于XXX活动的通知"
body = "尊敬的{name}先生/女士,您好,我们诚挚邀请您参加我们举办的XXX活动。"

2、准备收件人列表

创建一个收件人列表,包含所有要发送邮件的收件人邮箱地址。

recipients = [
    {"name": "张三", "email": "zhangsan@example.com"},
    {"name": "李四", "email": "lisi@example.com"},
    {"name": "王五", "email": "wangwu@example.com"},
    # 添加更多收件人...
]

3、创建邮件消息对象并发送邮件

使用Python的smtplib库连接到SMTP服务器,并循环发送邮件给每个收件人。

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

def send_group_email(sender_email, sender_password, subject, body, recipients):
    smtp_server = "smtp.example.com"
    smtp_port = 587  # 使用TLS加密的端口号

    try:
        # 连接到SMTP服务器
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()  # 开启TLS加密

        # 登录邮箱账号
        server.login(sender_email, sender_password)

        for recipient in recipients:
            # 创建邮件消息对象
            message = MIMEMultipart()
            message["From"] = sender_email
            message["To"] = recipient["email"]
            message["Subject"] = subject

            # 填充邮件内容
            personalized_body = body.format(name=recipient["name"])
            message.attach(MIMEText(personalized_body, "plain"))

            # 发送邮件
            server.sendmail(sender_email, recipient["email"], message.as_string())

            print(f"邮件发送给 {recipient['name']} ({recipient['email']}) 成功!")

        print("群发邮件完成!")
    except Exception as e:
        print("群发邮件失败:", e)
    finally:
        # 关闭连接
        server.quit()

# 输入发件人邮箱地址、密码、主题、正文和收件人列表
sender_email = "your_email@example.com"
sender_password = "your_password"
subject = "关于XXX活动的通知"
body = "尊敬的{name}先生/女士,您好,我们诚挚邀请您参加我们举办的XXX活动。"
recipients = [
    {"name": "张三", "email": "zhangsan@example.com"},
    {"name": "李四", "email": "lisi@example.com"},
    {"name": "王五", "email": "wangwu@example.com"},
    # 添加更多收件人...
]

# 发送群发邮件
send_group_email(sender_email, sender_password, subject, body, recipients)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/657549.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CANDela studio使用小tips

打开软件的时候注意先选择英文&#xff0c;因为双击CDD/CDDT文件默认打开的是德文&#xff0c;所以最正确的打开方式是先打开CANDela studio&#xff0c;再导入CDD&#xff0c;不仅可以避免用德文打开&#xff0c;还能避免vector软件的bug。 不同的版本有不同的权限。 admin有…

uni微信小程序input框过滤中文字节以及规定以外的符号

问题描述 需求是输入账号只能为手机号、邮箱、字母和数字组成的字符串&#xff0c;那么就是所有大小写字母、数字、以及符号 - _ . 四种。 条件限制 微信小程序无法直接通过type属性实现&#xff0c;type属性中没有专门为只允许英文字母的输入类型。详情见input | uni-ap…

【Python】搭建pypi私仓

1. 下载依赖 pip install pypiserver # 命令安装 pypiserver 库 pip install passlib # passlib 包来读取 Apache htpasswd 文件apt-get install -y apache2-utils2. 生成密码 使用htpasswd库在指定路径/path/to/.pypipasswd生成密码文件 htpasswd -c /path/to/.pypipasswd …

数据结构之堆(优先级队列)

前言 在上一章我们讲了二叉树&#xff0c;这一节我们来讲堆&#xff08;优先级队列&#xff09;&#xff0c;所以想知道堆创建&#xff0c;可以看一下二叉树的一些简单概念。http://t.csdnimg.cn/4jUR6http://t.csdnimg.cn/4jUR6 目录 前言 堆 1.概念 2.优先级队列的模拟实…

补环境——A股市场

补环境 吐环境 1.Proxy对象 Proxy对象由两个部分组成&#xff1a;target、handler target:目标对象 handler&#xff1a;是一个对象&#xff0c;声明了代理target的指定行为&#xff0c;支持的拦截操作&#xff0c;一共13种&#xff1a; get(target,propKey,receiver)&…

【全开源】酒店订单管理系统源码(FastAdmin+ThinkPHP)

一款基于FastAdminThinkPHP开发的旨在为民宿、酒店、宾馆等提供房态、订单、财务、客史等数据化、信息化的智慧管理工具&#xff0c;实现一站式订房管理&#xff0c;帮助酒店、民宿、宾馆提升管理效率&#xff0c;降低管理成本&#xff0c;提升行业竞争力。 打造高效、便捷的酒…

为什么c语言不对0和NULL做严格的区分?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「c语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;这个答案很简单:c语言不区分…

ubuntu中idea创建spark项目步骤

1.前置条件 ubuntu中已经安装idea,jdk,scala,spark 2.打开idea&#xff0c;新建&#xff0c;选择Maven项目 3.在IDEA中&#xff0c;File-Setting-Plugin&#xff0c;下载Scala插件 4.File-project structure&#xff0c;导入插件 4.1在全局库中&#xff0c;选择导入刚才的sca…

HTML 页面布局

慢慢生活&#xff0c;慢慢变好 —— 24.5.28 页面布局 盒子: 页面中所有的元素(标签)&#xff0c;都可以看做是一个盒子&#xff0c;由盒子将页面中的元素包含在一个矩形区域内&#xff0c;通过盒子的视角更方便的进行页面布局 盒子模型组成: 内容区域(content)、内边距区域(pa…

什么是知识中台?为什么企业需要知识中台?

如今市面上的企业数不胜数&#xff0c;企业的任何一个小细节都会产生很大的影响。近几年来一直很热门的知识中台备受企业关注。关于如何高效地管理、整合和运用知识&#xff0c;成为了每一家企业都在重点关注的问题。而知识中台&#xff0c;就是为了解决这一问题而诞生的一个全…

鸿蒙开发接口UI界面:【@ohos.router (页面路由)】

页面路由 说明开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。页面路由需要在页面渲染完…

如何在生产环境中以非 Root 用户启动 Kafka

目录 如何在生产环境中以非 Root 用户启动 Kafka1. 创建 Kafka 用户2. 设置目录权限3. 配置 systemd 服务文件4. 启动和启用 Kafka 服务5. 验证 Kafka 服务经验总结 为了在生产环境中以非 root 用户&#xff08;如 kafka 用户&#xff09;启动 Kafka&#xff0c;您需要确保 Ka…

Unity之如何使用Localization来实现文本+资源多语言

前言 使用Unity实现本地化&#xff08;Localization&#xff09;功能 在当今的游戏开发中&#xff0c;支持多语言已成为一项基本需求。Unity作为主流的游戏开发引擎&#xff0c;提供了强大的本地化工具&#xff0c;使开发者能够方便地为游戏添加多语言支持。本文将介绍如何在U…

Linux 防火墙 firewalld 常用命令

1 防火墙 - firewalld 1.1 开启防火墙 # 临时性开启&#xff0c;服务器重启后会恢复为原来的状态 systemctl start firewalld # 永久性开启&#xff08;即开机启动&#xff09;&#xff0c;重启服务器后生效 systemctl enable firewalld1.2 关闭防火墙 # 临时性关闭&#xf…

Neural Filters:照片恢复

Ps菜单&#xff1a;滤镜/Neural Filters/恢复/照片恢复 Neural Filters/RESTORATION/Photo Restoration 照片恢复 Photo Restoration借助 AI 强大功能快速恢复旧照片&#xff0c;提高对比度、增强细节、消除划痕。将此滤镜与着色相结合以进一步增强效果。 “照片恢复”滤镜利用…

Vue3 之 动态组件和KeepAlive组件

一、动态组件 1、简介 ​ 在某些业务场景下&#xff0c;页面的某模块具有多个组件但在同一时间只显示一个&#xff0c;需要在多个组件之间进行频繁的切换&#xff0c;如&#xff1a;tab切换等场景。除了可以使用v-if、v-show根据不同条件显示不同组件之外&#xff0c;还可以通…

Sora,数据驱动的物理引擎

文生视频技术 Text-to-Video 近日&#xff0c;Open AI发布文生视频模型Sora&#xff0c;能够生成一分钟高保真视频。人们惊呼&#xff1a;“真实世界将不再存在。” Open AI自称Sora是“世界模拟器”&#xff0c;让“一句话生成视频”的AI技术向上突破了一大截&#xff0c;引…

AI早班车5.22

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

Linux:进程控制(二.详细讲解进程程序替换)

上次讲了&#xff1a;Linux&#xff1a;进程地址空间、进程控制&#xff08;一.进程创建、进程终止、进程等待&#xff09; 文章目录 1.进程程序替换1.1概念1.2原理1.3使用一个exec 系列函数execl&#xff08;&#xff09;函数结论与细节 2.多进程时的程序替换3.其他几个exec系…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-24.3,4 SPI驱动实验-I.MX6U SPI 寄存器

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…