创建和管理电子邮件

创建新电子邮件消息

MailMessage 类表示电子邮件消息,允许开发者创建新邮件。基本的邮件属性如 From、To、Subject 和正文可以轻松附加到新创建的邮件中。同样,我们可以将邮件保存为不同的格式,如 EML、MSG 和 MHTML。

  • 创建该类的实例 MailMessage 类。
  • 设置邮件消息属性。
  • 以不同格式保存邮件消息。

以下代码片段展示了如何创建具有不同属性的新电子邮件。

指定多个收件人

MailMessage 对象表示电子邮件消息。该类的实例 MailMessage 类用于构建通过以下方式发送到 SMTP 服务器的电子邮件消息 SmtpClient 类。本文演示如何指定多个电子邮件地址。电子邮件地址可以使用以下方式指定 MailMessage 类。它们是:

  • To - 收件人地址可以在 ‘To’ 字段指定。‘To’ 字段的收件人是消息的主要受众。可以有多个收件人地址。
  • Cc - CC(抄送)代表“副本”或“礼貌副本”,允许您添加需要查看邮件但不一定需要采取行动的收件人。例如经理或需要了解对话的团队成员。使用 Aspose.Email,您可以在代码中指定 CC 地址。这样,自动邮件或发送到特定地址的所有邮件都可以抄送给相关人员。
  • Bcc - Bcc(密件抄送),允许您向收件人发送邮件而对其他收件人隐藏。CC 在收件人可见的邮件信息中出现,而 Bcc 则不会。它用于隐藏通知。 

要在电子邮件中指定多个邮箱地址,请按以下步骤操作:

  1. 创建该类的实例 MailMessage 类。
  2. 使用以下方式指定 From 以及多个 To、Cc 和 Bcc 地址 MailMessage 实例。
  3. 创建该类的实例 SmtpClient 类,并使用 Send 方法发送电子邮件。

下面的代码示例展示了如何指定多个 To、CC 和 BCC 地址。

设置发件人和收件人显示名称

下面的编程示例演示如何在电子邮件中将电子邮件地址更改为友好名称。友好名称是比电子邮件地址更易读的名称,例如将 js346@domain.com 替换为 John Smith。发送邮件时,我们可以在 MailMessage 类构造函数。

要在电子邮件中将电子邮件地址更改为友好名称,请按以下步骤操作:

  • 创建该类的实例 MailMessage 类,并在 ToFrom 字段中指定带有友好名称的电子邮件地址。
  • 通过调用以下方法指定带有友好名称的 Cc 和 Bcc 电子邮件地址 MailMessage 类构造函数在 MailMessage 实例。
  • 创建该类的实例 SmtpClient 类并使用 发送 方法。

以下代码片段展示了如何为电子邮件地址显示名称。

设置电子邮件主题

MailMessage 类允许您使用以下方式指定消息内容的简要摘要 主题 属性。以下代码示例演示如何创建电子邮件并设置其主题:

from aspose.email import MailMessage

# Create a new email message
message = MailMessage()

# Set the subject of the email
message.subject = "Meeting Reminder: Project Update"

# Set other email properties (optional)
message.from_address = "sender@example.com"
message.to.append("recipient@example.com")
message.body = "This is a reminder for the upcoming project update meeting."

# Print the email details
print(f"Subject: {message.subject}")
print(f"From: {message.from_address}")
print(f"To: {', '.join(message.to)}")
print(f"Body: {message.body}")

设置电子邮件正文

除了消息主题外,电子邮件正文也可以使用相同的 MailMessage 类。电子邮件可以有多个正文。该类中有两种类型的邮件正文:

  • HTML 正文
  • 文本正文

除了 HtmlBody 和 TextBody,Aspose.Email 还有另外两个只读的邮件正文相关属性:

  • IsBodyText:告诉用户正文是否为文本。
  • IsBodyHtml:告诉用户正文是 HTML 还是纯文本。

本文展示了如何定义纯文本或 HTML 正文、设置备用文本以及对电子邮件正文进行编码。

设置 HTML 正文

Html body 用于指定消息正文的 HTML 内容。Html body 必须包含在 标签之间。以下代码片段展示了如何设置 HTML 正文。

设置备用文本

使用 AlternateView 类用于指定电子邮件的不同格式副本。例如,如果您以 HTML 发送消息,您可能还想提供纯文本版本,以防部分收件人使用无法显示 HTML 内容的邮件阅读器。此类有两个属性, linked_resources 和 base_uri,用于解析电子邮件内容中的 URL。

  • LinkedResources 是 LinkedResources 对象的集合。渲染时,电子邮件内容中的 URL 首先与 LinkedResources 集合中每个 LinkedResources 对象的 Content Link 中的 URL 匹配并解析。
  • BaseUri 被邮件阅读器用于解析正文中的相对 URL,以及在 LinkedResources 集合中解析相对内容链接 URL。

以下代码片段展示了如何设置备用文本。

MailMessage 功能

该 MailMessage class 表示电子邮件消息的内容。该类的实例 MailMessage class 用于构建要发送到 SMTP 服务器进行投递的电子邮件消息,使用 SmtpClient class。本篇文章展示了如何使用 MailMessage class 实用功能用于控制以下电子邮件特性:

  • 日期和时间 - 通过 MailMessage class Date 属性用于获取或设置电子邮件的日期和时间。
  • 消息优先级 -  MailPriority 类指定发送电子邮件的优先级别,可为低、普通或高。优先级影响传输速度和投递。
  • 消息敏感性 -  MailSensitivity 类指定了五个敏感性级别。
  • 投递通知 - 投递通知让发送者知道他们发送的邮件已送达收件人的收件箱。

默认情况下,Date 是实际发送邮件的日期,Time 是发送时的时间,均由 Microsoft Outlook 显示。然而,真实的邮件投递时间由 SMTP 服务器在邮件头中添加。例如,下面是一段常见的邮件头,其中 Date 设置了 Date 字段的值。

import aspose.email as ae
from aspose.email import MailMessage

# Create a new MailMessage instance
message = MailMessage()

# Add SMTP headers to the message
message.headers.add("Received", "from ip-123.56.99.216.dsl-cust.ca.inter.net ([216.99.56.123]) by Aspose.secureserver.net with MailEnable ESMTP; Thu, 22 Feb 2007 13:58:57 -0700")
message.headers.add("Return-Path", "<xyz@oikoscucine.it>")
message.headers.add("Received", "from 195.120.225.20 (HELO mail.oikoscucine.it) by aspose.com with esmtp (:1CYY+<LA*- *1WK@) id Q8,/O/-.N83@7-9M for abc@aspose.com; Thu, 22 Feb 2007 20:58:51 +0300")

# Set email details
message.from_address = "XYZ <xyz@oikoscucine.it>"
message.to.append("abc@aspose.com")
message.subject = "For ABC"
message.date = "Thu, 22 Feb 2007 20:58:51 +0300"
message.message_id = "<01c756c4$41b554d0$6c822ecf@dishonestyinsufferably>"
message.headers.add("MIME-Version", "1.0")
message.headers.add("Content-Type", "multipart/alternative; boundary=\"----=_NextPart_000_0006_01C7569A.58DF4CD0\"")
message.headers.add("X-Mailer", "Microsoft Office Outlook, Build 11.0.5510")
message.headers.add("X-MimeOLE", "Produced By Microsoft MimeOLE V6.00.2800.1106")
message.headers.add("Thread-Index", "Aca6Q:=ES0M(9-=(<.<1.<Q9@QE6CD==")
message.headers.add("X-Read", "1")

# Save the message as an EML file
message.save("output.eml", ae.EmlSaveOptions())

下面的代码片段演示了如何使用上述每个功能。

import aspose.email as ae
from aspose.email import MailMessage, MailPriority, MailSensitivity
from datetime import datetime

# Create a new MailMessage instance
message = MailMessage("sender@gmail.com", "receiver@gmail.com", "Some subject", "Some body text")

# Set additional properties
message.date = datetime.now()
message.priority = MailPriority.HIGH
message.sensitivity = MailSensitivity.NORMAL
message.headers.add("X-Mailer", "Aspose.Email")

# Save the message as an EML file
message.save("output.eml", ae.EmlSaveOptions())

请求阅读回执

下面的编程示例展示了如何请求阅读回执。 MailMessage 类 DeliveryNotificationOptions 枚举属性描述电子邮件的投递通知选项。要在发送电子邮件后请求阅读回执,请按照以下步骤操作:

  1. 创建该类的实例 MailMessage 类。
  2. 在中指定电子邮件的发件人、收件人和 HTML 正文 MailMessage 实例。
  3. 指定 DeliveryNotificationOptions 在其他 MailMessage 实例。
  4. 创建该类的实例 SmtpClient 类并使用 Send 方法发送电子邮件。

读取回执请求可能并不总是被满足,原因如下:

  • 邮件客户端可能未实现此功能。
  • 最终用户可能已关闭此功能。
  • 最终用户可能选择不发送回执。

以下代码片段展示了如何请求阅读回执。

import aspose.email as ae
from aspose.email import MailMessage, SmtpClient, DeliveryNotificationOptions

# Create an instance of MailMessage class
message = MailMessage()

# Specify From, To, HtmlBody, and DeliveryNotificationOptions
message.from_address = "sender@sender.com"
message.to.append("receiver@receiver.com")
message.html_body = "<html><body>This is the Html body</body></html>"
message.delivery_notification_options = DeliveryNotificationOptions.ON_SUCCESS

message.headers.add("Return-Receipt-To", "sender@sender.com")
message.headers.add("Disposition-Notification-To", "sender@sender.com")

# Create an instance of SmtpClient class
client = SmtpClient()

# Specify your mailing host server, Username, Password, and Port
client.host = "smtp.server.com"
client.username = "Username"
client.password = "Password"
client.port = 25

try:
    # Client.send will send this message
    client.send(message)
    # Display 'Message sent' only if the message is sent successfully
    print("Message sent")
except Exception as ex:
    import traceback
    traceback.print_exc()

设置电子邮件标题

电子邮件头部遵循互联网标准,RFC 定义了包含在互联网电子邮件中的头部字段。可以使用 MailMessage 类指定电子邮件头部。常见的头部类型在 HeaderType 类中定义。它是一个密封类,像普通枚举一样工作。

通常,电子邮件标题包含以下字段:

  • To:收件人地址可以在 To 字段指定。这些收件人是消息的主要受众。可以有多个收件人地址。
  • From:此字段显示消息发送者的电子邮件地址。
  • Cc:允许用户将消息作为“抄送”或“礼貌抄送”发送。即收件人不需要回复或采取行动。通常用于通知监管人员。
  • Bcc:指盲目抄送,指向多个收件人发送消息,但收件人所收到的内容不包含完整的收件人列表。用于隐藏通知。
  • ReplyTo:此头部字段用于指示发件人希望回复发送到何处。
  • Subject:标题、主题。通常用作回复或评论其他消息的线程指示。
  • Date:此头部指定日期(和时间)。通常,这是消息撰写并发送的日期。
  • XMailer:关于发件人客户端软件的信息。例如:X-Mailer: Aspose.Email。XMailer 被邮件客户端使用。不同的邮件客户端会有不同的 XMailer 值。MS Outlook 的 XMailer 值是 Microsoft Office Outlook, Build 11.0.5510。邮件接收方或阅读器会忽略该字段。

通常,电子邮件标题看起来类似于以下内容:


Reply-To: reply@reply.com

From: sender@sender.com

To: guangzhou@guangzhoo.com

Subject: test mail

Date: 6 Mar 2006 8:2:2 +0800

X-Mailer: Aspose.Email

要自定义电子邮件标题,请按照以下步骤操作:

  • 创建该类的实例 MailMessage 类。
  • 使用实例指定 To、From、CC、Bcc、ReplyTo、Subject、Date 与 XMailer MailMessage.
  • 创建该类的实例 MimeHeader 类并指定秘密标题。
  • 将秘密头部添加到 MailMessage 实例。

以下代码片段展示了如何设置电子邮件头部。

import aspose.email as ae
from aspose.email import MailMessage
from datetime import datetime

# Create an instance of MailMessage class
message = MailMessage()

# Specify email details
message.reply_to_list.append("reply@reply.com")
message.from_address = "sender@sender.com"
message.to.append("receiver1@receiver.com")
message.cc.append("receiver2@receiver.com")
message.bcc.append("receiver3@receiver.com")
message.subject = "test mail"
message.date = datetime(2006, 3, 6)
message.headers.add("X-Mailer", "Aspose.Email")

以上代码片段生成如下格式的电子邮件头。您可以通过在 Microsoft Outlook 中打开生成的文件 "MsgHeaders.msg" 并查看属性来观察。


Reply-To: reply@reply.com

From: sender@sender.com

To: receiver1@receiver.com

CC: receiver2@receiver.com

BCC: receiver3@receiver.com

Subject: test mail

Date: 6 Mar 2006 8:2:2 +0800

X-Mailer: Aspose.Email

secret-header: mystery

在特定位置插入标题

该 添加 方法的 HeadersCollection 类将在集合末尾插入头部。然而,有时需要在特定位置插入头部。在这种情况下, 添加 方法无效。要实现此功能,请使用 Insert 方法的 HeadersCollection。如果集合中包含相同名称的头部,则此头部会插入到其他同名头部之前。

以下代码片段展示了如何在特定位置插入头部。

# Insert a header into the MailMessage instance
message.headers.insert("Received", "Value")

向电子邮件添加自定义标题

下面的编程示例演示如何使用以下方式在电子邮件中指定自定义头部: MailMessage 类。

# Add a header into the MailMessage instance
message.headers.add("secret-header", "mystery")

以上代码片段生成如下格式的电子邮件头:

secret-header: mystery