通过 SMTP 发送电子邮件和转发消息

SmtpClient Aspose.Email for Python via .NET 中的类提供了一个强大且灵活的接口,用于使用简单邮件传输协议 (SMTP) 发送电子邮件。它是希望在应用程序中发送电子邮件的开发者的主要入口点。

关键特性包括 SmtpClient 类包括:

  • SMTP 邮件投递: 允许直接通过 SMTP 服务器发送电子邮件。

  • 替代投递选项: 支持额外的投递方式,如将消息保存到文件系统或写入消息队列。

  • 同步和异步操作:

    • 同步模式:使用 Send 方法阻塞当前线程,直到电子邮件完全传输。

    • 异步模式:使用 SendAsync 方法在后台发送消息,使应用保持响应。

  • TNEF 支持: 允许以传输中立封装格式(TNEF)发送消息,以兼容 Microsoft Outlook 功能。

本文涵盖通过 SmtpClient 类,演示如何发送具有完整配置和交付控制的标准和高级电子邮件。

同步发送电子邮件

SmtpClient.send 该方法允许同步发送电子邮件。这在应用程序需要确认交付后再继续时非常有用。

要使用 Aspose.Email for Python via .NET 同步发送纯文本电子邮件,请使用以下步骤和代码示例:

  1. 创建一个 MailMessage 实例并设置发件人、收件人、主题和正文。
  2. 配置 SmtpClient 包括服务器主机、端口、用户名和密码。
  3. 调用 send 方法位于 SmtpClient 实例并传入 MailMessage 对象。
# Create email
eml = ae.MailMessage()
eml.subject = "Message with Plain Text Body"
eml.body = "This is text body."
eml.from_address = "from@gmail.com"
eml.to.append(ae.MailAddress("to@gmail.com", "Recipient 1")) 

# Configure SmtpClient object
client = SmtpClient("smtp.gmail.com", 995, "username", "password")
client.security_options = SecurityOptions.AUTO 

# Send email
client.send(eml)

通过 SMTP 发送预先编写的 EML 文件

如果您需要发送已经以 EML 格式编写并保存的电子邮件,可以使用 Aspose.Email for Python via .NET 以编程方式加载并发送它。

下面的代码片段和步骤演示了如何使用以下方式发送 EML 文件: SmtpClient:

  1. 使用以下方式加载 EML 文件 MailMessage.load 方法。
  2. 创建并配置一个实例 SmtpClient,提供 SMTP 服务器主机、用户名和密码以进行身份验证。
  3. 调用 send 方法位于 SmtpClient 实例并传入已加载的消息。
import aspose.email as ae

message = ae.MailMessage.load("test.eml")

# Send this message using SmtpClient
client = ae.clients.SmtpClient("host", "username", "password")
client.send(message)

发送纯文本电子邮件

您可以通过将消息正文指定为简单文本来使用 Aspose.Email 发送纯文本电子邮件。该 MailMessage.body 属性用于定义内容,而 SmtpClient 类负责处理发送过程。

下面的代码片段和步骤演示了如何发送纯文本电子邮件:

  1. 创建该类的实例 MailMessage 类。
  2. 设置发件人和收件人的电子邮件地址。
  3. 将纯文本内容分配给 body 属性。
  4. 创建该类的实例 SmtpClient 包含服务器详情和凭证的类。
  5. 使用以下方式发送电子邮件 send 方法。

发送 HTML 电子邮件

Aspose.Email for Python via .NET 允许您使用以下方式发送带有 HTML 格式正文的电子邮件: MailMessage 类。通过将 HTML 内容分配给 html_body 属性和设置 is_body_html 设置为 True,您可以制作丰富且有样式的消息。

下面的代码示例和步骤演示了如何发送 HTML 电子邮件:

  1. 创建该类的实例 MailMessage 类。
  2. 设置发件人和收件人的电子邮件地址。
  3. 设置 is_body_html = True 以指示 HTML 格式。
  4. 将 HTML 内容分配给 html_body 属性。
  5. 创建并配置 SmtpClient 实例。
  6. 使用 send 方法来传输消息。

注意: 虽然此示例使用基础 HTML,但您可以加入更复杂的 HTML 结构,以创建响应式和品牌化的邮件布局。

发送带有纯文本备用的 HTML 邮件

发送 HTML 邮件时,最佳实践是为那些不支持 HTML 的邮件客户端的收件人提供纯文本版本。Aspose.Email for Python via .NET 提供了 AlternateView 类可在单个消息中同时包含 HTML 和纯文本内容,提升兼容性和用户体验。

下面的代码示例和步骤演示了如何发送包含备用文本内容的电子邮件:

  1. 创建该类的实例 MailMessage 类。
  2. 设置发件人和收件人的电子邮件地址。
  3. 将 HTML 内容分配给 html_body 属性并设置 is_body_html = True.
  4. 使用以下方式创建纯文本 AlternateView: create_alternate_view_from_string.
  5. 将备用视图添加到 alternate_views 集合的 MailMessage.
  6. 创建并配置 SmtpClient 实例。
  7. 使用以下方式发送电子邮件 send 方法。

如何批量发送电子邮件

批量发送电子邮件涉及一次性分发多封邮件——每封可能发送给不同的收件人。Aspose.Email 使用以下方式提供此功能: SmtpClient 类。

下面的代码示例演示了如何一次性发送一批电子邮件:

  1. 创建该类的实例 SmtpClient 类并配置其主机、端口、凭证和安全设置。
  2. 创建多个 MailMessage 实例——每个实例代表一封单独的电子邮件。
  3. 为每封邮件指定发件人、收件人、主题和正文。
  4. 添加全部 MailMessage 对象到一个 MailMessageCollection.
  5. 调用 send 方法的 SmtpClient 类,传递 MailMessageCollection 作为参数。
import aspose.email as ae
from aspose.email.clients import SmtpClient, SecurityOptions
from aspose.email import MailMessage, MailMessageCollection

# Create individual email messages
message1 = MailMessage("from@gmail.com", "to1@gmail.com", "Bulk Email - Message 1", "Hello, this is message 1.")
message2 = MailMessage("from@gmail.com", "to2@gmail.com", "Bulk Email - Message 2", "Hello, this is message 2.")
message3 = MailMessage("from@gmail.com", "to3@gmail.com", "Bulk Email - Message 3", "Hello, this is message 3.")

# Add messages to a collection
many_messages = MailMessageCollection()
many_messages.append(message1)
many_messages.append(message2)
many_messages.append(message3)

# Configure SMTP client
client = SmtpClient("smtp.gmail.com", 995, "username", "password")
client.security_options = SecurityOptions.AUTO

# Send all messages in bulk
client.send(many_messages)

使用多连接支持发送电子邮件

Aspose.Email for Python via .NET 允许您在通过以下方式发送电子邮件时使用多个并发连接: SmtpClient 类。此功能通过在多个连接之间分配工作负载,可帮助在发送大量电子邮件时优化性能。但请注意,启用多连接模式并不保证在所有场景下都有性能提升——这取决于服务器配置和网络状况。

关键属性:

  • use_multi_connection:为 SMTP 客户端启用或禁用多连接模式。

  • connections_quantity:指定启用多连接模式时要打开的连接数。

下面的代码示例展示了如何启用多连接模式:

  1. 创建并配置一个实例 SmtpClient.
  2. 设置服务器详情,例如主机、端口、用户名、密码和加密方式。
  3. 通过设置启用多连接模式 use_multi_connection.
  4. 使用以下方式指定连接数: connections_quantity.
import aspose.email as ae

client = ae.clients.smtp.SmtpClient
client.host = "<HOST>"
client.username = "<USERNAME>"
client.password = "<PASSWORD>"
client.port = 587
client.supported_encryption = ae.clients.base.EncryptionProtocols.TLS
client.security_options = ae.clients.SecurityOptions.SSL_EXPLICIT

client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE
client.send(messages)

发送 TNEF 格式的电子邮件

传输中立封装格式 (TNEF) 是 Microsoft Outlook 和 Exchange 使用的专有电子邮件格式,用于保留丰富的格式、嵌入对象以及投票按钮等特殊功能。标准电子邮件客户端在使用普通 MIME 消息时可能无法保留这些格式。

Aspose.Email for Python via .NET 支持以 TNEF 格式发送电子邮件,以确保所有高级格式和功能得以保留。这通过启用以下功能实现: use_tnef 属性的 SmtpClient 类。

下面的代码示例和步骤演示了如何发送 TNEF 邮件:

  1. 使用以下方式加载现有的 EML 消息或创建新消息: MailMessage 类。
  2. 设置发件人和收件人的地址。
  3. 通过设置启用 TNEF 格式化 use_tnef = TrueSmtpClient 实例。
  4. 使用以下方式发送消息: send() 方法。

通过电子邮件发送会议请求

Microsoft Outlook 以及 IBM Lotus Notes 等支持日历的电子邮件客户端允许用户直接在收件箱中管理约会。当用户收到会议邀请时,他们可以在邮件客户端内直接接受或拒绝。使用 Aspose.Email for Python via .NET,开发者可以以编程方式创建并发送符合 iCalendar(RFC 2445)标准的会议邀请。

如何通过电子邮件发送会议邀请

Aspose.Email 内置支持在电子邮件中撰写和发送 iCalendar 会议请求。这些请求兼容流行的日历客户端,并允许收件人轻松回复邀请。

|iCalendar 会议请求通过电子邮件发送| | :- | |todo:image_alt_text|

下面的代码片段展示了如何通过电子邮件发送请求:

  1. 创建一个 MailMessage 实例。
  2. 指定发件人和收件人的电子邮件地址。
  3. 创建一个 Appointment 对象包括地点、开始/结束时间、发件人和收件人。
  4. 设置约会摘要和描述。
  5. 使用以下方式将约会附加到电子邮件中: add_alternate_view().
  6. 使用以下方式发送电子邮件 SmtpClient.

对 IBM Lotus Notes 的 iCalendar 支持

Aspose.Email 使用 iCalendar 格式(RFC 2445),确保您的会议请求兼容 Microsoft Outlook、IBM Lotus Notes 以及任何支持该标准的客户端。无论收件人使用何种平台,都可以采用相同的流程。

使用 SMTP 客户端转发电子邮件

转发电子邮件是数字交流中的常见任务,常用于与他人共享收到的邮件。Aspose.Email for Python via .NET 允许开发者使用以下方式以编程方式转发电子邮件: SmtpClient 类。forward 方法可将已保存或已接收的电子邮件转发给新收件人,而不涉及原始发件人。

下面的代码示例演示了如何使用以下方式转发电子邮件: MailMessage 类:

无需加载到 MailMessage 即可转发 EML 文件

Aspose.Email 还支持在不先将 .eml 文件加载到 MailMessage 对象。这在需要最小化系统内存使用的场景中特别有用。

下面的代码示例演示了如何直接转发 EML 文件:

import aspose.email as ae

client = ae.clients.smtp.SmtpClient(host, smtp_port, username, password, ae.clients.SecurityOptions.AUTO)
file = open("test.eml", "rb")
client.forward(sender, recipients, file)