在 C# 中使用自定义选项创建电子邮件

创建新电子邮件消息

要创建新电子邮件,您可以使用 MailMessage 类。MailMessage 类还会初始化已创建电子邮件的属性,如发件人电子邮件地址、收件人电子邮件地址、邮件主题以及 HTML 格式的邮件正文内容。

请参考以下代码及详细步骤,以创建新电子邮件并设置其属性。

  1. 创建该类的新实例 MailMessage 类。
  2. 设置 From 属性用于发件人的电子邮件地址。
  3. 设置 To 属性用于收件人的逗号分隔的电子邮件地址列表。
  4. 设置 Subject 属性用于电子邮件的主题。
  5. 设置 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 类。此类有两个属性, LinkedResourcesBaseUri,用于解析电子邮件内容中的 URL。

请参见以下带详细步骤的代码,以设置备用文本。

  1. 创建以下实例: MailMessage 类。
  2. Create AlternateView 以字符串中指定的内容查看电子邮件消息。
  3. 使用以下方式添加备用文本 添加 方法的 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;

指定多个收件人

指定电子邮件收件人有三种方式:使用 ToCCBCC 字段。

  • To 字段是您消息的主要收件人。您可以在此字段中输入一个或多个电子邮件地址,使用逗号分隔。To 字段是每封电子邮件的必填项。

  • CC 字段代表抄送。用于将您的消息副本发送给对主题感兴趣或参与的其他人。CC 字段是可选的,也可以包含多个电子邮件地址。CC 字段的收件人可以看到还有谁收到该消息。

  • BCC 字段代表盲目抄送。它类似于 CC 字段,但 BCC 字段中的收件人对其他收件人是隐藏的。当您想保护某些收件人的隐私或避免收件箱被回复信息淹没时,BCC 字段很有用。BCC 字段也是可选的,可包含多个电子邮件地址。

请参见以下带详细步骤的代码,用于为电子邮件指定多个收件人。

代码步骤

  1. 创建该类的新实例 MailMessage 类。
  2. 设置 From 属性用于发件人的电子邮件地址。
  3. 设置 To 属性,指向主要收件人的电子邮件地址数组。
  4. 设置 CC 属性,指向将收到邮件副本的收件人电子邮件地址数组。
  5. 设置 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 界面显示时,显示名称通常会与电子邮件地址一起显示,便于用户识别发信人或收信人。要在电子邮件地址中添加显示名称,请参考以下带详细步骤的代码:

  1. 使用以下方式从文件加载电子邮件消息 MailMessage.Load 方法。
  2. 使用以下方式设置邮件的发件人 From 通过创建新对象的 eml 对象属性 MailAddress 包含发件人电子邮件地址和显示名称的对象。
  3. 使用以下方法向邮件添加收件人 To eml 对象的属性,如有必要可使用的 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 使用分离签名。以下代码片段展示了如何使用分离证书选项。