
При отправке электронного письма вам может понадобиться отправить мультимедийный контент, такой как изображения, аудио и видео. Здесь на помощь приходят MIME (расширения интернет-почты многоцелевого назначения) сообщения. В этой статье мы рассмотрим, как программно создать EML сообщения на C#. К концу статьи вы получите понимание как создавать MIME-сообщения, добавлять изображения в HTML-содержимое электронного письма и сохранять электронную почту в формате EML.
- .NET API для создания MIME-сообщений
- Создание EML-файла с нуля
- Добавление изображения в HTML-содержимое
- Создание EML-файла из HTML-файла
- Советы по улучшению отображения HTML-сообщения в Outlook
.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 в документации.
- Ваши вопросы приветствуются на нашем форуме.