当前位置: 首页 > news >正文

使用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 MIMETextdef send_plain_text_email(sender_email, sender_password, recipient_email, subject, body):# 创建邮件内容message = MIMEText(body)message["From"] = sender_emailmessage["To"] = recipient_emailmessage["Subject"] = subject# 设置SMTP服务器信息smtp_server = "smtp.example.com"smtp_port = 587  # 假设使用的是TLS加密,端口号为587try:# 连接到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 MIMETextdef 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加密,端口号为587try:# 连接到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 MIMEApplicationdef 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加密,端口号为587try:# 连接到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 MIMEImagedef 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加密,端口号为587try:# 连接到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 MIMEImagedef 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加密,端口号为587try:# 连接到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 MIMETextdef 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加密,端口号为587try:# 连接到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 MIMEMultipartdef 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_emailmessage["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)

相关文章:

使用Python发送电子邮件

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

Linux-CentOS7-解决vim修改不了主机名称(无法打开并写入文件)

Linux-CentOS7-修改主机名称 修改之后使用强制保存退出也不行。 解决办法&#xff1a; 使用hostnamectl命令进行修改 查看系统主机名和信息&#xff1a; hostnamectl这条命令会显示当前系统的主机名、操作系统信息、内核版本、架构信息等相关信息。 修改系统主机名&#xff1…...

【RuoYi】使用代码生成器完成CRUD操作

一、前言 前面&#xff0c;介绍了如何下载和启动我们的RuoYi框架。为了让小伙伴们认识到ruoyi的强大&#xff0c;那么这篇博客就介绍一下如何使用ruoyi的代码生成器&#xff0c;自动生成前端页面以及后端的对应数据库表的CRUD操作&#xff01;&#xff01;&#xff01;真的很强…...

七个很酷的GenAI LLM技术性面试问题

不同于互联网上随处可见的传统问题库&#xff0c;这些问题需要跳出常规思维。 大语言模型(LLM)在数据科学、生成式人工智能(GenAI)和人工智能领域越来越重要。这些复杂的算法提升了人类的技能&#xff0c;并在诸多行业中推动了效率和创新性的提升&#xff0c;成为企业保持竞争…...

SARscape雷达图像处理软件简介

合成孔径雷达&#xff08;SAR&#xff09;拥有独特的技术魅力和优势&#xff0c;渐成为国际上的研究热点之一&#xff0c;其应用领域越来越广泛。SAR数据可以全天候对研究区域进行量测、分析以及获取目标信息。高级雷达图像处理工具SARscape&#xff0c;能让您轻松将原始SAR数据…...

开源博客项目Blog .NET Core源码学习(23:App.Hosting项目结构分析-11)

本文学习并分析App.Hosting项目中后台管理页面的标签管理页面、轮播图维护页面。 标签管理页面 标签管理页面用于显示、检索、新建、编辑、删除标签数据&#xff0c;以便在前台页面的首页及文章专栏等页面显示标签数据。标签管理页面附带一新建及编辑页面&#xff0c;以支撑新…...

一.ffmpeg 将内存中的H264跟PCM 数据流合成多媒体文件

在有一些嵌入式平台中&#xff0c;H264数据流一般来自芯片内部的硬编码器&#xff0c; AAC音频数据则是通过采集PCM进行软编码&#xff0c;但是如何对它实时进行封装多媒体文件 &#xff0c;参考ffmpeg example&#xff0c;花了一些时间终于实现了该功能。 流程图如下&#xf…...

C++ (week5):Linux系统编程3:线程

文章目录 三、线程1.线程的基本概念①线程相关概念②我的理解 2.线程的基本操作 (API)(1)获取线程的标识&#xff1a;pthread_self(2)创建线程&#xff1a;pthread_create()(3)终止线程①pthread_exit()&#xff1a;当前线程终止&#xff0c;子线程主动退出②pthread_cancel()&…...

二叉树习题精讲-相同的树

相同的树 100. 相同的树 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/same-tree/description/ /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ bool i…...

「架构」模型驱动架构设计方法及其运用

本文通过一个实际的软件项目案例,深入探讨了模型驱动架构(MDA)在软件开发全过程中的应用。MDA是一种以模型为中心的设计方法,它通过分离计算、数据和业务逻辑,提高了软件的可维护性、可扩展性和可移植性。文章将从需求分析、架构设计、实现与测试三个阶段出发,分析MDA的应…...

基于 React + Nest 全栈开发的后台系统

Xmw Admin 基于 React Nest 全栈开发的后台系统 &#x1fab4; 项目简介 &#x1f3af; 前端技术栈&#xff1a; React、Ant Design、Umi、TypeScript&#x1f3af; 后端技术栈&#xff1a; Nest.js、Sequelize、Redis、Mysql&#x1f61d; 线上预览&#xff1a; https://r…...

jQuery值操作例子 (代码)

直接上代码 <!DOCTYPE html> <html><head></head><body><div id"x1">例子</div><script src"js/jquery-3.7.1.min.js"></script><script>console.log($("#x1").text()) // 在浏览…...

Next-Admin,一款基于Nextjs开发的开箱即用的中后台管理系统(全剧终)

hello&#xff0c;大家好&#xff0c;我是徐小夕。之前和大家分享了很多可视化&#xff0c;零代码和前端工程化的最佳实践&#xff0c;今天继续分享一下最近开源的 Next-Admin 项目的最新更新。 这次更新是1.0版本最后一次更新&#xff0c;也根据用户反馈的问题做了一些优化&am…...

HTML5 文件处理及应用

HTML5 文件处理及应用 目录 核心对象文件信息读取文件拖放FileReaderSyncFileWriter APIBlob URL与 revokeObjectURL()跨源资源共享 (CORS)HTML5文件File API为浏览器提供了与用户计算机上的文件进行交互的能力,使得Web应用程序能够在客户端直接处理文件数据,而无需依赖服务…...

逻辑分析仪的调试使用

调试软件下载&#xff1a;点击跳转 一、接线 逻辑分析仪 设备 GND --- GND CHX&#xff08;数据通道&#xff09; --- 通信引脚 二、数据采集 图中两个可以选择数字大小的地方分别表示 采样深度 &#xff08;10M Samples&a…...

AI学习指南数学工具篇-Python中的凸优化库

AI学习指南数学工具篇-Python中的凸优化库 在人工智能和机器学习领域&#xff0c;凸优化是一个非常重要的数学工具。它可以帮助我们解决各种问题&#xff0c;包括线性规划、二次规划、半定规划等。而在Python中&#xff0c;有一个非常优秀的凸优化库&#xff0c;即CVXPY。本文…...

数据库mysql

一、mysql常用语句 登录MySQLmysql -u root -p列出所有数据库SHOW DATABASES;创建一个新数据库CREATE DATABASE test;删除一个数据库DROP DATABASE test;对一个数据库进行操作时USE test;列出当前数据库的所有表SHOW TABLES;要查看一个表的结构DESC students;创建表CREATE TAB…...

AWS联网和内容分发之Transit Gateway

将Amazon VPC、AWS账户和本地网络连接到一个网关中。AWS Transit Gateway通过中央枢纽连接Amazon虚拟私有云&#xff08;VPC&#xff09;和本地网络。此连接简化了您的网络&#xff0c;并且结束了复杂的对等关系。Transit Gateway充当高度可扩展的云路由器&#xff0c;每个新的…...

牛客NC236 最大差值【simple 动态规划 Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/a01abbdc52ba4d5f8777fb5dae91b204 思路 不难看出该题可以使用动态规划的方式解题。 在循环数组的过程中&#xff0c;记录截止到当前位置-1的最小值&#xff0c; 然后用当前的值去计算最大的差值。Java代码 im…...

ORACLE 6节点组成的ACFS文件系统异常的分析思路

近期遇到多次6节点集群的ACFS文件系统环境异常问题&#xff1b;如24日中午12点附近出现ACFS文件系统访问异常&#xff0c;通过查看集群ALERT日志、CSSD进程日志及OSW监控软件的日志&#xff0c;可以发现OSW监控软件在11:55-12:40分时没有收集到虚拟机LINUX主机的监控数据&#…...

vscode当前分支有未提交的修改,但是暂时不想提交,想要切换到另一个分支该怎么办

当前分支有未提交的修改,但是暂时不想提交,想要切换到另一个分支该怎么办? 首先,可以将当前修改暂存起来,以便之后恢复 git stash 然后切换到目标分支,例如需求A所在分支 git checkout feat-a-jie 修改完A需求后,需要先切换回之前的分支,例如需求B所在分支 git checkout feat…...

前端API: IntersectionObserver的那一二三件事

IntersectionObserver 基础 IntersectionObserver 可以监听一个元素和可视区域相交部分的比例&#xff0c;然后在可视比例达到某个阈值的时候触发回调。比如可以用来处理图片的懒加载等等 首先我们来看下基本的格式&#xff1a; const observer new IntersectionObserver(c…...

C++迈向精通:vector复现与sort复现

vector复现 思考过程 对于vector考虑如下几点&#xff1a; 底层数据结构算法实现方式对外表现形式 这里底层的数据结构采用了顺序表&#xff0c;当然&#xff0c;原版STL中的vector也是采用的顺序表。 算法实现的方式放在代码中去设计 对外表现形式是数组&#xff0c;因此需…...

【头歌】计算机网络DHCP服务器配置第二关access口配置答案

头歌计算机网络DHCP服务器配置第二关access口配置操作步骤 任务描述 本关任务&#xff1a;创建 vlan &#xff0c;并且将与 pc 机相连接口划分 vlan 。 操作要求 在第一关的拓扑图的基础上&#xff0c;配置交换机&#xff0c;具体要求如下&#xff1a; 1、在特权模式下进入 vla…...

Python机器学习 Tensorflow + keras 实现CNN

一、实验目的 1. 了解SkLearn Tensorlow使用方法 2. 了解SkLearn keras使用方法 二、实验工具&#xff1a; 1. SkLearn 三、实验内容 &#xff08;贴上源码及结果&#xff09; 使用Tensorflow对半环形数据集分 #encoding:utf-8import numpy as npfrom sklearn.datasets i…...

基于事件的架构工作机制和相关产品

基于事件的架构 基于事件的架构可否这样理解&#xff0c;每个事件相当于传统API的一次函数调用请求&#xff0c;比如Add(123,456)。区别在于&#xff0c;基于事件的架构只是把这个请求发出&#xff0c;并不急于得到结果&#xff0c;而是等合适的子系统处理完这个请求&#xff…...

OSINT 与心理学:通过开源情报进行剖析和行为分析

在不断发展的心理学领域&#xff0c;人们越来越认识到通过应用开源情报 (OSINT) 方法取得进步的潜力。OSINT 主要以其在安全和情报领域的应用而闻名&#xff0c;并且越来越多地展示其在心理分析和行为分析方面的潜力。本文探讨了 OSINT 和心理学的迷人交叉点&#xff0c;研究如…...

yarn 设置淘宝镜像配置

为了提升在中国大陆地区的下载速度&#xff0c;你可以将Yarn的包仓库配置为淘宝镜像。最新的推荐做法是使用npmmirror.com作为镜像源&#xff0c;替代旧的npm.taobao.org。以下是设置Yarn使用淘宝镜像&#xff08;npmmirror.com&#xff09;的步骤&#xff1a; 查询当前镜像配置…...

debian 常用命令

Debian 是一个广泛使用的 Linux 发行版&#xff0c;这里列出了一些常用的 Debian 命令&#xff0c;适用于系统管理和日常使用&#xff1a; ### 文件与目录操作 1. **ls** - 列出目录内容&#xff1a; bash ls ls -l # 长格式显示 ls -a # 显示所有文件&#xff…...

流水账(CPU设计实战)——lab3

Lab3 Rewrite V1.0 版本控制 版本描述V0V1.0相对V0变化&#xff1a; 修改了文件名&#xff0c;各阶段以_stage结尾&#xff08;因为if是关键词&#xff0c;所以module名不能叫if&#xff0c;遂改为if_stage&#xff0c;为了统一命名&#xff0c;将所有module后缀加上_stage&a…...