Создание электронных сообщений с пользовательскими опциями на 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>"
};

Установить кодировку текста по умолчанию

Установите кодировку текста по умолчанию для следующих свойств:

  • From: Отображаемое имя
  • To: Отображаемое имя
  • 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, можно также предоставить plain text версию на случай, если получатели используют клиенты, не поддерживающие HTML. Для этой цели используйте AlternateView class. Этот класс имеет два свойства, LinkedResources и BaseUri, которые используются для разрешения URL‑адресов в содержимом письма.

  • LinkedResources является коллекцией LinkedResource объектах. При рендеринге URL внутри содержимого письма сначала сравниваются с URL в Content Link каждого LinkedResource объект в LinkedResources коллекции и разрешаются.
  • BaseUri используется почтовым клиентом для разрешения относительных URL в теле и также для разрешения относительных URL ссылок контента в LinkedResources коллекцию.

Рассмотрите следующий код с подробными шагами для установки альтернативного текста.

  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 class для указания кодировки тела письма. Например:

eml.BodyEncoding = Encoding.UTF8;

Указать нескольких получателей

Существует три способа указать получателей сообщения: использовать поля To, CC или BCC.

  • To — основной получатель вашего сообщения. В это поле можно ввести один или несколько адресов, разделённых запятыми. Поле To является обязательным для каждого письма.

  • CC обозначает копию. Используется для отправки копии сообщения другим людям, заинтересованным в теме. Поле CC необязательно и может содержать несколько адресов. Получатели в CC видят, кто ещё получил сообщение.

  • BCC обозначает скрытую копию. Похож на поле CC, но получатели в BCC скрыты от остальных. Поле BCC полезно, когда нужно защитить конфиденциальность получателей или избежать засорения их ящиков ответами. Поле BCC также необязательно и может содержать несколько адресов.

Рассмотрите следующий код с подробными шагами для указания нескольких получателей сообщения.

Шаги кода:

  1. Создайте новый экземпляр MailMessage класс.
  2. Установите From свойство для адреса электронной почты отправителя.
  3. Установите To property в массив адресов основных получателей.
  4. Установите CC property в массив адресов получателей, которые получат копию письма.
  5. Установите Bcc property в массив адресов получателей, которые получат скрытую копию письма.

Пример кода:

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"}
};

Добавить отображаемые имена к адресам электронной почты

Помимо адреса электронной почты, может быть указано display name (отображаемое имя) для идентификации отправителя или получателя. Оно может включать полное имя человека, никнейм или другой идентификатор.

Когда сообщение электронной почты отображается в почтовом клиенте или веб‑почте, отображаемое имя обычно показывается рядом с адресом, что упрощает пользователю идентификацию отправителя или получателя. Чтобы добавить отображаемые имена к адресам в сообщении, рассмотрите следующий код с подробными шагами:

  1. Загрузите сообщение электронной почты из файла, используя MailMessage.Load метод.
  2. Установите отправителя письма, используя From property объекта eml, создавая новый MailAddress объект с адресом электронной почты и отображаемым именем отправителя.
  3. Добавьте получателя в письмо, используя To property объекта eml, при необходимости добавить список CC (Carbon Copy) с помощью CC property, список BCC (Blind Carbon Copy) с использованием 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 class, например:

  • Date property — задаёт дату и время письма. По умолчанию дата соответствует реальной дате отправки сообщения, а время — времени отправки, как отображает 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 enumeration — задаёт уровни приоритета отправки письма. Может быть low, normal или high. Приоритет влияет на скорость передачи и доставки.

  • 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 class. Это свойство содержит значения 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());
}

Note: Запросы подтверждения прочтения могут не учитываться, потому что:

  • Почтовый клиент может не поддерживать эту функцию.
  • У конечного пользователя может быть выключена эта функция.
  • Конечный пользователь может решить не отправлять его.

Настройка заголовков письма

Заголовки электронной почты соответствуют интернет-стандарту, а RFC определяют поля заголовков, включаемые в сообщения электронной почты. Заголовок письма можно задать с помощью MailMessage класс. Общие типы заголовков определены в HeaderType class. Это запечатанный класс, работающий как обычное перечисление.

Обычно заголовок письма содержит следующие поля:

  • To: Адреса получателей указываются в поле To. Получатели в поле To являются основной аудиторией сообщения. Можно указать более одного адреса получателя.
  • From: Это поле показывает адрес электронной почты отправителя сообщения.
  • Cc: Позволяет пользователям отправлять сообщение как «Carbon Copy» (копию) или «Courtesy Copy» (вежливую копию). Получатель не обязан отвечать или предпринимать действия. Обычно таким образом уведомляются руководящие лица.
  • Bcc: Обозначает Blind Carbon Copy (скрытая копия), позволяя отправить письмо получателю, скрывая его от остальных получателей.
  • ReplyTo: Это поле заголовка указывает, куда отправитель хочет получать ответы.
  • Subject: Заголовок, тема, предмет. Часто используется как индикатор темы для сообщений, отвечающих или комментирующих другие сообщения.
  • Date: Этот заголовок указывает дату (и время). Обычно это дата, когда сообщение было составлено и отправлено.
  • XMailer: Информация о клиентском программном обеспечении отправителя. Пример: X-Mailer: Aspose.Email. XMailer используется почтовыми клиентами. У разных почтовых клиентов будут разные значения XMailer. Значение XMailer в MS Outlook — 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

Создать подписанные сообщения

API Aspose.Email предоставляет возможность создавать подписанные сообщения с использованием сертификатов. The AttachSignature метод MailMessage класс можно использовать для подписи сообщения перед сохранением или отправкой с помощью SmtpClient.

Подписать сообщение

Следующий фрагмент кода показывает, как подписать сообщение.

Использование опции отдельного сертификата

Веб‑клиенты электронной почты могут не отображать содержимое тела подписанного сообщения. Это можно решить, отделив сертификат перед отправкой в веб‑клиенты. Флаг detached в перегруженном методе AttachSignature можно использовать для этого. Если установить true, сертификат будет отделён от письма и наоборот. Чтобы увидеть тело подписанного сообщения в веб‑клиентах, необходимо создать MailMessage с отдельной подписью. Следующий фрагмент кода показывает, как использовать опцию отдельного сертификата.