Создание MIME-сообщений с помощью C#

При отправке электронного письма вам может понадобиться отправить мультимедийный контент, такой как изображения, аудио и видео. Здесь на помощь приходят MIME (расширения интернет-почты многоцелевого назначения) сообщения. В этой статье мы рассмотрим, как программно создать EML сообщения на C#. К концу статьи вы получите понимание как создавать MIME-сообщения, добавлять изображения в HTML-содержимое электронного письма и сохранять электронную почту в формате EML.

.NET API для создания MIME-сообщений

Перед тем, как создать ваше первое MIME-сообщение, первым шагом будет установка Aspose.Email для .NET в вашем проекте. Это мощная библиотека для разработчиков C#, которая предоставляет широкий набор инструментов для работы с электронными сообщениями, включая возможность программного создания MIME-сообщений. Библиотека помогает разработчикам легко манипулировать различными аспектами MIME-сообщений, такими как вложение, тело, заголовок, кодирование и другие. Вы можете установить библиотеку через NuGet или скачать ее DLL.

PM> Install-Package Aspose.Email

Создание EML-файла с нуля

Теперь, когда ваш API установлен, пришло время создать ваш первый eml с нуля. Один из самых простых способов сделать это — использовать класс MailMessage из Aspose.Email. Класс MailMessage позволяет вам создать объект электронного письма с различными свойствами и методами, которые позволяют задавать отправителя, получателей, тему, тело, вложения, заголовки и другие детали вашего электронного письма.

Следующие шаги и фрагмент кода помогут вам создать EML с нуля:

  • Создайте новый объект MailMessage с использованием конструктора по умолчанию.
  • Установите свойства объекта MailMessage в соответствии с вашими потребностями.
  • Сохраните объект MailMessage в EML-файл с помощью метода Save.
// Create a new MailMessage object
var eml = new MailMessage()
{
// Set the sender address
From = "sender@sender.com",
// Add a recipient address
To = "receiver@receiver.com",
// Set the subject
Subject = "New message",
// Set the HTML body
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>"
};
// Save the MailMessage object to an EML file
eml.Save("message.eml", SaveOptions.DefaultEml);

Метод Save класса MailMessage принимает два параметра: путь к файлу и параметры сохранения. Параметры сохранения указывают формат выходного файла.

Добавление изображения в HTML-содержимое

Чтобы выполнить эту функцию, вам нужно встроить изображение в HTML-тело. Для этого вы можете использовать тег “img”.

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

  • HTML-тело содержит тег изображения с атрибутом src, установленным на cid:image1.
  • Класс AlternateView используется для получения альтернативного представления тела сообщения, которое содержит встроенное изображение.
  • Класс LinkedResource используется для представления встроенного изображения, и его идентификатор содержимого установлен на image1.
  • Наконец, альтернативное представление добавляется в коллекцию альтернативных представлений сообщения.
// Create a new instance of MailMessage class
var eml = new MailMessage
{
// Set sender and recipient
From = new MailAddress("sender@domain.com"),
To = new MailAddress("recipient@domain.com"),
// Set subject and body
Subject = "New message with image",
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>
<img src='cid:myImage' />
</body>
</html>"
};
var alternateView = eml.AlternateViews.GetView(MediaTypeNames.Text.Html);
var imageResource = new LinkedResource(path + "image.png", MediaTypeNames.Image.Png)
{
ContentId = "image1"
};
alternateView.LinkedResources.Add(imageResource);
eml.Save("message_with_image.eml", SaveOptions.DefaultEml);

Создание EML-файла из HTML-файла

Один из способов сделать это — начать с HTML-файла и конвертировать его в EML. Это может быть полезно, если у вас есть HTML, который вы хотите отправить в качестве электронного сообщения. Для этой цели нам сначала нужно иметь HTML-содержимое. Назовем этот файл content.html. Вот пример его:

<!DOCTYPE html>
<html>
<head>
	<title>Мое электронное письмо</title>
</head>
<body>
	<h1>Здравствуйте,</h1>
	<img src="logo.png" alt="Логотип">
	<p>Это мое первое электронное письмо, созданное из HTML.</p>
</body>
</html>

Также вам необходимо заранее подготовить все изображения, содержащиеся в HTML, и указать правильный путь к ним в HTML-файле.

Теперь мы можем легко создать MailMessage, установив HTML-тело из content.html.

  • Сначала создайте новый объект HtmlLoadOptions.
  • Установите строку, содержащую путь к изображениям в PathToResources.
  • Установите свойство ShouldAddPlainTextView в true, если EML должен содержать AlternateView с обычным текстом.
  • Создайте объект MailMessage, загрузив HTML-файл и передав объект HtmlLoadOptions в качестве параметра.
  • Установите дополнительные свойства сообщения.
  • Наконец, сохраните объект MailMessage в EML-файл с помощью метода Save.
var htmlloadOptions = new HtmlLoadOptions
{
PathToResources = path,
ShouldAddPlainTextView = true
};
var eml = MailMessage.Load(path + @"content.html", htmlloadOptions);
// Set sender and recipient
eml.From = new MailAddress("sender@domain.com");
eml.To = new MailAddress("recipient@domain.com");
// Set subject
eml.Subject = "New message from HTML";
// Save the message in EML format
eml.Save("message_from_html.eml", SaveOptions.DefaultEml);

Советы по улучшению отображения HTML-сообщения в Outlook

Чтобы просмотреть ваше HTML-сообщение в Outlook, вам необходимо убедиться, что его код совместим с движком рендеринга Outlook, который отличается от большинства веб-браузеров. Некоторые распространенные проблемы, которые могут повлиять на ваше HTML-письмо в Outlook, это:

  • Outlook не поддерживает некоторые теги и CSS-свойства, такие как фоновое изображение, плавающие элементы, отступы, заполнение и т. д. Вам может потребоваться использовать встроенные стили, таблицы или условные комментарии для достижения желаемой макета и форматирования.
  • Outlook может добавлять лишние пробелы или линии между элементами или удалять некоторые элементы совсем. Вам может потребоваться использовать неразрывные пробелы, пробелы нулевой ширины или пустые ячейки таблицы, чтобы предотвратить это.
  • Outlook может изменить кодировку или набор символов вашего HTML-файла, что может привести к неправильному отображению некоторых символов. Вам может потребоваться указать кодировку и набор символов с помощью мета-тега.

Заключение

В этом блоге вы узнали, как программно создавать MIME-сообщения на C# с использованием Aspose.Email. Пошаговое руководство и образцы кода показали, как создать EML-файл с нуля и из HTML-файла, добавить изображение в HTML-содержимое электронного сообщения и поддержали все вышеупомянутое с полезными советами по улучшению отображения вашего HTML-сообщения в Outlook.

  • Вы можете узнать больше о Aspose.Email для .NET и попробовать его бесплатно.
  • Вы также можете ознакомиться с другими функциями и возможностями Aspose.Email в документации.
  • Ваши вопросы приветствуются на нашем форуме.

См. также