在 C# 中使用自定义选项创建电子邮件
创建新电子邮件消息
要创建新电子邮件,您可以使用 MailMessage 类。MailMessage 类还会初始化已创建电子邮件的属性,如发件人电子邮件地址、收件人电子邮件地址、邮件主题以及 HTML 格式的邮件正文内容。
请参考以下代码及详细步骤,以创建新电子邮件并设置其属性。
- 创建该类的新实例 MailMessage 类。
- 设置 From 属性用于发件人的电子邮件地址。
- 设置 To 属性用于收件人的逗号分隔的电子邮件地址列表。
- 设置 Subject 属性用于电子邮件的主题。
- 设置 HtmlBody 属性用于电子邮件正文的 HTML 内容。
// Create a new instance of MailMessage class
var message = new MailMessage
{
From = "from@domain.com",
To = "to1@domain.com, to2@domain.com",
Subject = "New message",
HtmlBody = @"<!DOCTYPE html>
<html>
<head>
<style>
h3{font-family:Verdana, sans-serif;color:#000000;background-color:#ffffff;}
p {font-family:Verdana, sans-serif;font-size:14px;font-style:normal;
font-weight:normal;color:#000000;background-color:#ffffff;}
</style>
</head>
<body>
<h3>New message</h3>
<p>This is a new message created by Aspose.Email.</p>
</body>
</html>"
};
设置默认文本编码
为以下属性设置默认文本编码:
- 发件人:显示名称
- 收件人:显示名称
- Subject
- 正文
使用 MailMessage.PreferredTextEncoding 属性用于确保上述属性中的所有文本在电子邮件中正确编码。以下代码片段展示了如何使用法语单词作为电子邮件地址、主题和正文的显示名称。
设置邮件正文
设置纯文本正文
邮件正文可以使用 正文 属性的 MailMessage 类。
// Declare message as MailMessage instance
var eml = new MailMessage
{
// Specify HtmlBody
Body = "This is a plain text body"
};
设置 HTML 正文
邮件正文也可以使用以下方式指定 HtmlBody 属性的 MailMessage 类。
// Declare message as MailMessage instance
var eml = new MailMessage
{
// Specify HtmlBody
HtmlBody = "<html><body>This is the HTML body</body></html>"
};
设置备用文本
EML 文件中的备用视图是电子邮件内容的另一种表示形式,可用于提供不同的渲染方式。例如,如果您发送 HTML 消息,可能还想提供 纯文本 版本,以防收件人使用无法显示 HTML 内容的阅读器。为此请使用 AlternateView 类。此类有两个属性, LinkedResources 和 BaseUri,用于解析电子邮件内容中的 URL。
- LinkedResources 是一组 LinkedResource 对象。当渲染时,电子邮件内容中的 URL 首先与每个 LinkedResource 对象中 LinkedResources 集合并解析。
- BaseUri 被邮件阅读器用于解析正文中的相对 URL,也用于解析内容链接中的相对 URL,位于 LinkedResources 集合。
请参见以下带详细步骤的代码,以设置备用文本。
- 创建以下实例: MailMessage 类。
- Create AlternateView 以字符串中指定的内容查看电子邮件消息。
- 使用以下方式添加备用文本 添加 方法的 MailMessage.AlternateViews 集合。
// Declare message as MailMessage instance
var eml = new MailMessage();
// Creates AlternateView to view an email message using the content specified in the //string
var alternate = AlternateView.CreateAlternateViewFromString("Alternate Text");
// Adding alternate text
eml.AlternateViews.Add(alternate);
指定邮件正文编码
Aspose.Email 使用 BodyEncoding 属性的 MailMessage 类,用于指定电子邮件正文编码。例如:
eml.BodyEncoding = Encoding.UTF8;
指定多个收件人
指定电子邮件收件人有三种方式:使用 To、CC 或 BCC 字段。
-
To 字段是您消息的主要收件人。您可以在此字段中输入一个或多个电子邮件地址,使用逗号分隔。To 字段是每封电子邮件的必填项。
-
CC 字段代表抄送。用于将您的消息副本发送给对主题感兴趣或参与的其他人。CC 字段是可选的,也可以包含多个电子邮件地址。CC 字段的收件人可以看到还有谁收到该消息。
-
BCC 字段代表盲目抄送。它类似于 CC 字段,但 BCC 字段中的收件人对其他收件人是隐藏的。当您想保护某些收件人的隐私或避免收件箱被回复信息淹没时,BCC 字段很有用。BCC 字段也是可选的,可包含多个电子邮件地址。
请参见以下带详细步骤的代码,用于为电子邮件指定多个收件人。
代码步骤:
- 创建该类的新实例 MailMessage 类。
- 设置 From 属性用于发件人的电子邮件地址。
- 设置 To 属性,指向主要收件人的电子邮件地址数组。
- 设置 CC 属性,指向将收到邮件副本的收件人电子邮件地址数组。
- 设置 Bcc 属性,指向将收到邮件盲抄送的收件人电子邮件地址数组。
代码示例:
var eml = new MailMessage
{
// Specify From address
From = "sender@sender.com",
// Specify recipients’ mail addresses
To = {"receiver1@receiver.com", "receiver2@receiver.com", "receiver3@receiver.com"},
// Specify CC addresses
CC = {"CC1@receiver.com", "CC2@receiver.com"},
// Specify BCC addresses
Bcc = {"Bcc1@receiver.com", "Bcc2@receiver.com"}
};
向电子邮件地址添加显示名称
除了电子邮件地址外,还可以包含 显示名称 来标识发送者或收件人。它可能包括人的全名、昵称或其他标识。
当电子邮件在客户端或 webmail 界面显示时,显示名称通常会与电子邮件地址一起显示,便于用户识别发信人或收信人。要在电子邮件地址中添加显示名称,请参考以下带详细步骤的代码:
- 使用以下方式从文件加载电子邮件消息
MailMessage.Load方法。 - 使用以下方式设置邮件的发件人
From通过创建新对象的 eml 对象属性MailAddress包含发件人电子邮件地址和显示名称的对象。 - 使用以下方法向邮件添加收件人
Toeml 对象的属性,如有必要可使用的 CC(抄送)列表CC属性,使用 BCC(盲目抄送)列表的Bcc属性并调用Add使用新方法MailAddress包含收件人电子邮件地址和显示名称的对象。
代码示例:
// Load eml from file
var eml = MailMessage.Load(Data.Email/"test.eml");
eml.From = new MailAddress("TimothyFairfield@from.com", "Timothy Fairfield");
// A To address with a friendly name can also be specified like this
eml.To.Add(new MailAddress("kyle@to.com", "Kyle Huang"));
// Specify Cc and Bcc email address along with a friendly name
eml.CC.Add(new MailAddress("guangzhou@cc.com", "Guangzhou Team"));
eml.Bcc.Add(new MailAddress("ahaq@bcc.com", "Ammad ulHaq "));
设置其他属性
使用 Aspose.Email,您可以使用的附加属性 MailMessage 类,例如:
-
Date 属性 - 设置电子邮件的 日期和时间。默认情况下,日期是消息发送时的实际日期,时间是发送时的时间,显示方式与 Microsoft Outlook 相同。然而,实际的邮件投递时间由 SMTP 服务器在邮件标题中自行添加。例如,下面是一个常见的邮件标题,其中 Date 设置 Date 字段。
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET // Add by SMTP server in delivery emails 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 // Add by SMTP server in delivery emails Return-Path: <xyz@oikoscucine.it> // Add by SMTP server in delivery emails 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 From: "XYZ" <xyz@oikoscucine.it> To: <abc@aspose.com> Subject: For ABC // Date will set the Date field, outlook will show this as Date: Thu, 22 Feb 2007 20:58:51 +0300 Message-ID: <01c756c4$41b554d0$6c822ecf@dishonestyinsufferably> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_0006_01C7569A.58DF4CD0" X-Mailer: Microsoft Office Outlook, Build 11.0.5510 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 Thread-Index: Aca6Q:=ES0M(9-=(<.<1.<Q9@QE6CD== X-Read: 1 -
MailPriority 枚举 - 指定发送电子邮件的优先级。可以是低、正常或高。优先级影响传输速度和交付。
-
MailSensitivity 枚举 - 指定五个敏感度级别。
-
XMailer- 指定创建电子邮件的软件。
下面的代码片段展示了如何使用上述讨论的每个属性。
var eml = new MailMessage("sender@gmail.com", "receiver@gmail.com", "Some subject", "Some body text")
{
Date = DateTime.Now,
Priority = MailPriority.High,
Sensitivity = MailSensitivity.Normal,
Xmailer = "Aspose.Email"
};
请求阅读回执
请求一个 阅读回执,使用 Aspose.Email DeliveryNotificationOptions 属性的 MailMessage 类。此属性包含以下值的 DeliveryNotificationOptions 枚举。
请参见以下 代码示例:
// Create an Instance of MailMessage class
var eml = new MailMessage
{
// Specify From, To, HtmlBody, DeliveryNotificationOptions field
From = "sender@sender.com",
To = "receiver@receiver.com",
HtmlBody = "<html><body>This is the Html body</body></html>",
DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess
};
eml.Headers.Add("Return-Receipt-To", "sender@sender.com");
eml.Headers.Add("Disposition-Notification-To", "sender@sender.com");
// Create an instance of SmtpClient Class
var client = new SmtpClient
{
// Specify your mailing host server, Username, Password and Port No
Host = "smtp.server.com",
Username = "Username",
Password = "Password",
Port = 25
};
try
{
// Client.Send will send this message
client.Send(eml);
// Display ‘Message Sent’, only if message sent successfully
Console.WriteLine(@"Message sent");
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.ToString());
}
注意:阅读回执请求可能不会总是被满足,因为:
- 邮件客户端可能未实现此功能。
- 终端用户可能已关闭此功能。
- 终端用户可能选择不发送。
自定义电子邮件标题
电子邮件标题代表互联网标准,RFC 定义了包含在互联网电子邮件中的标题字段。电子邮件标题可以使用以下方式指定: MailMessage 类。常见的标题类型在此定义: HeaderType 类。它是一个密封类,充当普通枚举。
通常,电子邮件标题包含以下字段:
- To:收件人地址可在 To 字段中指定。To 字段的收件人是消息的主要受众。可以有多个收件人地址。
- From:此字段显示消息发送者的电子邮件地址。
- Cc:允许用户将消息作为“抄送”或“礼貌抄送”发送。即收件人不需要回复或采取行动。通常用于通知监管人员。
- Bcc:代表盲目抄送(Blind Carbon Copy),可让您向收件人发送邮件,而其他收件人看不到该收件人。
- 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 实例。
以下 代码片段 演示了如何设置电子邮件头部。
var eml = new MailMessage
{
ReplyToList = "reply@reply.com",
From = "sender@sender.com",
To = "receiver1@receiver.com",
CC = "receiver2@receiver.com",
Bcc = "receiver3@receiver.com",
Subject = "test mail",
Date = new System.DateTime(2006, 3, 6),
XMailer = "Aspose.Email"
};
以上代码片段生成如下格式的电子邮件头:
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
在特定位置插入头部
该 添加 方法的 HeaderCollection 类将在集合末尾插入头部。但有时需要在特定位置插入头部。在这种情况下, 添加 方法无效。要实现此功能,请使用 Insert 方法的 HeaderCollection。如果集合中已存在同名头部,则此头部将插入到其他同名头部之前。以下代码片段展示了如何在特定位置插入头部。
eml.Headers.Insert("Received", "Value");
添加自定义头部
可以使用以下方式指定电子邮件头部: MailMessage 类。要在电子邮件中指定 自定义头部,请参考以下代码示例:
eml.Headers.Add("secret-header", "mystery");
以上代码片段生成如下格式的电子邮件头:
secret-header: mystery
创建已签名消息
Aspose.Email API 提供使用证书创建已签名消息的功能。该 AttachSignature 方法的 MailMessage 类可用于对消息进行签名以便保存或使用 SmtpClient.
对消息签名
以下代码片段展示了如何对消息进行签名。
使用分离证书选项
基于 Web 的电子邮件客户端可能无法显示已签名邮件的正文内容。可以通过在发送给基于 Web 的邮箱客户端之前分离证书来解决此问题。分离标志位于重载方法的 AttachSignature 可用于实现此目的。如果设置为 true,证书将从电子邮件中分离,反之亦然。要在基于 Web 的客户端中查看已签名邮件正文,需要创建 MailMessage 使用分离签名。以下代码片段展示了如何使用分离证书选项。