Утилитные функции - MailMessage
Шифрование и расшифровка сообщений
Aspose.Email предоставляет возможность шифровать и расшифровывать электронные сообщения с использованием X509Certificates. В этой статье показано, как существующее или новое сообщение может быть загружено и зашифровано с использованием MailMessage. Методы Encrypt() и Decrypt() возвращают объект MailMessage для примененных эффектов, и с ними нужно обращаться с осторожностью при шифровании/расшифровке сообщений. Шифрование и расшифровка сообщений включает в себя следующие шаги:
- Создайте новое сообщение или загрузите существующее
- Загрузите сертификат шифрования с использованием объекта X509Certificate
- Зашифруйте сообщение с использованием сертификата
- Отправьте сообщение или сохраните его
- Расшифруйте сообщение по мере необходимости
Следующий фрагмент кода показывает, как шифровать и расшифровывать сообщения.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// The path to the File directory. | |
string dataDir = RunExamples.GetDataDir_Email(); | |
string publicCertFile = dataDir + "MartinCertificate.cer"; | |
string privateCertFile = dataDir + "MartinCertificate.pfx"; | |
X509Certificate2 publicCert = new X509Certificate2(publicCertFile); | |
X509Certificate2 privateCert = new X509Certificate2(privateCertFile, "anothertestaccount"); | |
// Create a message | |
MailMessage msg = new MailMessage("atneostthaecrcount@gmail.com", "atneostthaecrcount@gmail.com", "Test subject", "Test Body"); | |
// Encrypt the message | |
MailMessage eMsg = msg.Encrypt(publicCert); | |
if (eMsg.IsEncrypted == true) | |
Console.WriteLine("Its encrypted"); | |
else | |
Console.WriteLine("Its NOT encrypted"); | |
// Decrypt the message | |
MailMessage dMsg = eMsg.Decrypt(privateCert); | |
if (dMsg.IsEncrypted == true) | |
Console.WriteLine("Its encrypted"); | |
else | |
Console.WriteLine("Its NOT encrypted"); |
Проверка сообщения на шифрование
Класс Aspose.Email MailMessage позволяет проверить, зашифровано сообщение или нет. Свойство IsEncrypted класса MailMessage позволяет проверить это, как показано в следующем примере кода.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
MailMessage mailMessageOrig = MailMessage.Load(Path.Combine(dataDir, "Message.msg"), new MsgLoadOptions()); | |
X509Certificate2 publicCert = new X509Certificate2(publicCertFile); | |
X509Certificate2 privateCert = new X509Certificate2(privateCertFile, "anothertestaccount"); | |
Console.WriteLine("Message is encrypted: {0}" , mailMessageOrig.IsEncrypted); | |
MailMessage mailMessage = mailMessageOrig.Encrypt(publicCert); | |
Console.WriteLine("Message is encrypted: {0}", mailMessage.IsEncrypted); | |
mailMessage = mailMessage.Decrypt(privateCert); | |
Console.WriteLine("Message is encrypted: {0}", mailMessage.IsEncrypted); |
Электронные сообщения с TNEF-вложениями
Формат транспортной нейтральной инкапсуляции (TNEF) является проприетарным форматом вложений электронной почты, используемым Microsoft Outlook и Microsoft Exchange Server. API Aspose.Email позволяет читать электронные сообщения, которые имеют TNEF-вложения, и изменять содержимое вложения. Электронное сообщение затем может быть сохранено как обычное электронное письмо или в том же формате, сохраняя TNEF-вложения. Эта статья показывает различные примеры кода для работы с сообщениями, содержащими TNEF-вложения. Эта статья также показывает, как создавать TNEF EML файлы из Outlook MSG файлов.
Чтение сообщения с сохранением TNEF-вложений
Следующий фрагмент кода показывает, как читать сообщение, сохраняя TNEF-вложения.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// The path to the File directory. | |
string dataDir = RunExamples.GetDataDir_Email(); | |
MsgLoadOptions options = new MsgLoadOptions(); | |
options.PreserveTnefAttachments = true; | |
MailMessage eml = MailMessage.Load(dataDir + "EmbeddedImage1.msg", options); | |
foreach (Attachment attachment in eml.Attachments) | |
{ | |
Console.WriteLine(attachment.Name); | |
} |
Чтение сообщения без сохранения TNEF-вложений
Следующий фрагмент кода показывает, как читать сообщение без сохранения TNEF-вложений.
Обновление ресурсов в TNEF-вложении и сохранение формата TNEF
Следующий фрагмент кода показывает, как обновить ресурсы в TNEF-вложении и сохранить формат TNEF.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
public static void TestUpdateResources(string dataDir) | |
{ | |
string fileName = dataDir + "tnefEML1.eml"; | |
string imgFileName = dataDir + "Untitled.jpg"; | |
string outFileName = dataDir + "UpdateTNEFAttachments_out.eml"; | |
MailMessage originalMailMessage = MailMessage.Load(fileName); | |
UpdateResources(originalMailMessage, imgFileName); | |
EmlSaveOptions emlSo = new EmlSaveOptions(MailMessageSaveType.EmlFormat); | |
emlSo.FileCompatibilityMode = FileCompatibilityMode.PreserveTnefAttachments; | |
originalMailMessage.Save(outFileName, emlSo); | |
} | |
private static void UpdateResources(MailMessage msg, string imgFileName) | |
{ | |
for (int i = 0; i < msg.Attachments.Count; i++) | |
{ | |
if ((msg.Attachments[i].ContentType.MediaType == "image/png") || (msg.Attachments[i].ContentType.MediaType == "application/octet-stream" && Path.GetExtension(msg.Attachments[i].ContentType.Name) == ".jpg")) | |
{ | |
msg.Attachments[i].ContentStream = new MemoryStream(File.ReadAllBytes(imgFileName)); | |
} | |
else if ((msg.Attachments[i].ContentType.MediaType == "message/rfc822") || (msg.Attachments[i].ContentType.MediaType == "application/octet-stream" && Path.GetExtension(msg.Attachments[i].ContentType.Name) == ".msg")) | |
{ | |
MemoryStream ms = new MemoryStream(); | |
msg.Attachments[i].Save(ms); | |
ms.Position = 0; | |
MailMessage embeddedMessage = MailMessage.Load(ms); | |
UpdateResources(embeddedMessage, imgFileName); | |
MemoryStream msProcessedEmbedded = new MemoryStream(); | |
embeddedMessage.Save(msProcessedEmbedded, SaveOptions.DefaultMsgUnicode); | |
msProcessedEmbedded.Position = 0; | |
msg.Attachments[i].ContentStream = msProcessedEmbedded; | |
} | |
} | |
foreach (LinkedResource att in msg.LinkedResources) | |
{ | |
if (att.ContentType.MediaType == "image/png") | |
att.ContentStream = new MemoryStream(File.ReadAllBytes(imgFileName)); | |
} | |
} |
Добавление новых вложений в основное сообщение, содержащее TNEF
Следующий фрагмент кода показывает, как добавить новые вложения в основное сообщение, содержащее TNEF.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
string fileName = "MainMessage.eml"; | |
string attachName = "s.png"; | |
string outFileName = "test.eml"; | |
MailMessage mailMessage = MailMessage.Load(fileName); | |
mailMessage.Attachments.Add(new Attachment(File.OpenRead(attachName), "s.png", "image/png")); | |
mailMessage.Save(outFileName, FileCompatibilityMode.PreserveTnefAttachments); |
Создание TNEF EML из MSG
MSG-файлы Outlook иногда содержат информацию, такую как таблицы и текстовые стили, которые могут нарушаться при конвертации в EML. Создание TNEF-сообщений из таких MSG-файлов позволяет сохранить форматирование и даже отправить такие сообщения через почтовые клиенты, сохраняя форматирование. Свойство MailConversionOptions.ConvertAsTnef используется для достижения этого. Следующий фрагмент кода показывает, как создать TNEF EML из MSG.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
MapiMessage mapiMsg = MapiMessage.FromFile(dataDir + "Message.msg"); | |
MailConversionOptions mco = new MailConversionOptions(); | |
mco.ConvertAsTnef = true; | |
MailMessage message = mapiMsg.ToMailMessage(mco); |
Для создания TNEF можно использовать следующий образец кода.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
MailMessageLoadOptions options = new MailMessageLoadOptions(); | |
options.MessageFormat = MessageFormat.Msg; | |
// The PreserveTnefAttachments option with MessageFormat.Msg will create the TNEF eml. | |
options.FileCompatibilityMode = FileCompatibilityMode.PreserveTnefAttachments; | |
MailMessage eml = MailMessage.Load(emlFileName, options); |
Определение, является ли сообщение TNEF
Следующий фрагмент кода показывает, как определить, является ли сообщение TNEF.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
MailMessage mail = MailMessage.Load(dataDir + "tnefEml1.eml"); | |
bool isTnef = mail.OriginalIsTnef; | |
Console.WriteLine("Is input EML originally TNEF? {0}", isTnef.ToString()); |
Проверка, является ли вложение в формате TNEF
Свойство Attachment.IsTnef позволяет определить, является ли вложение сообщения вложением, оформленным в формате TNEF.
var eml = MailMessage.Load(fileName);
foreach (attachment in eml.Attachments)
{
Console.WriteLine($"Является ли вложение TNEF?: {attachment.IsTnef}");
}
Обработка возвратных сообщений
Очень часто сообщение, отправленное получателю, может быть возвратным по любой причине, такой как неверный адрес получателя. API Aspose.Email имеет возможность обрабатывать такое сообщение для проверки, является ли оно возвратным письмом или обычным электронным сообщением. Метод CheckBounced класса MailMessage возвращает допустимый результат, если электронное сообщение является возвратным письмом. Эта статья показывает использование класса BounceResult, который предоставляет возможность проверки, является ли сообщение возвратным письмом. Она также предоставляет детальную информацию о получателях, действиях и причинах уведомления. Следующий фрагмент кода показывает, как обрабатывать возвратные сообщения.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
string fileName = RunExamples.GetDataDir_Email() + "failed1.msg"; | |
MailMessage mail = MailMessage.Load(fileName); | |
BounceResult result = mail.CheckBounced(); | |
Console.WriteLine(fileName); | |
Console.WriteLine("IsBounced : " + result.IsBounced); | |
Console.WriteLine("Action : " + result.Action); | |
Console.WriteLine("Recipient : " + result.Recipient); | |
Console.WriteLine(); | |
Console.WriteLine("Reason : " + result.Reason); | |
Console.WriteLine("Status : " + result.Status); | |
Console.WriteLine("OriginalMessage ToAddress 1: " + result.OriginalMessage.To[0].Address); | |
Console.WriteLine(); |
Байесовский анализатор спама
Aspose.Email предоставляет фильтрацию электронной почты с использованием байесовского анализатора спама. Для этой цели предоставляет класс SpamAnalyzer. Эта статья показывает, как обучить фильтр различать спам и обычные электронные письма на основе базы слов.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
string hamFolder = RunExamples.GetDataDir_Email() + "/hamFolder"; | |
string spamFolder = RunExamples.GetDataDir_Email() + "/Spam"; | |
string testFolder = RunExamples.GetDataDir_Email(); | |
string dataBaseFile = RunExamples.GetDataDir_Email() + "SpamFilterDatabase.txt"; | |
TeachAndCreateDatabase(hamFolder, spamFolder, dataBaseFile); | |
string[] testFiles = Directory.GetFiles(testFolder, "*.eml"); | |
SpamAnalyzer analyzer = new SpamAnalyzer(dataBaseFile); | |
foreach (string file in testFiles) | |
{ | |
MailMessage msg = MailMessage.Load(file); | |
Console.WriteLine(msg.Subject); | |
double probability = analyzer.Test(msg); | |
PrintResult(probability); | |
} |
Получение преамбулы и эпилога из сообщений EML
Электронное сообщение может содержать некоторую скрытую информацию в виде обычного текста перед телом сообщения (т.е. преамбула) или после тела (т.е. эпилог). Обычно это какая-то дополнительная информация или контекст для получателя до или после того, как они прочитают основное содержимое электронной почты. Вы можете получить эту информацию с помощью свойств MailMessage.Preamble или/и MailMessage.Epilogue соответственно.
Следующий фрагмент кода показывает, как получить тексты преамбулы и эпилога:
// Получает или задает текст преамбулы.
public string Preamble
// Получает или задает текст эпилога.
public string Epilogue