Recursos de Utilidade - MailMessage
Criptografando e Descriptografando Mensagens
Aspose.Email fornece a capacidade de criptografar e descriptografar mensagens de e-mail usando os X509Certificates. Este artigo mostra como uma mensagem existente ou nova pode ser carregada e criptografada usando MailMessage. Os métodos Encrypt() e Decrypt() retornam um objeto MailMessage para os efeitos aplicados e precisam ser considerados ao criptografar/descriptografar mensagens. Criptografar e descriptografar mensagens envolve os seguintes passos:
- Criar uma nova mensagem ou carregar uma existente
- Carregar um certificado de criptografia usando o objeto X509Certificate
- Criptografar a mensagem usando o certificado
- Enviar a mensagem ou salvá-la
- Descriptografar a mensagem conforme necessário
O seguinte trecho de código mostra como criptografar e descriptografar mensagens.
// 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"); |
Verificar uma Mensagem para Criptografia
A classe Aspose.Email MailMessage permite verificar se uma mensagem está criptografada ou não. A propriedade IsEncrypted da MailMessage permite verificar isso, conforme mostrado no seguinte exemplo de código.
// 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); |
Mensagens de E-mail contendo anexos TNEF
O Formato de Encapsulamento Neutro de Transporte (TNEF) é um formato proprietário de anexo de e-mail usado pelo Microsoft Outlook e pelo Microsoft Exchange Server. A API Aspose.Email permite ler mensagens de e-mail que possuem anexos TNEF e modificar o conteúdo do anexo. O e-mail pode então ser salvo como um e-mail normal ou no mesmo formato, preservando os anexos TNEF. Este artigo mostra diferentes exemplos de código para trabalhar com mensagens contendo anexos TNEF. Este artigo também mostra como criar arquivos EML TNEF a partir de arquivos MSG do Outlook.
Ler uma Mensagem Preservando Anexos TNEF
O seguinte trecho de código mostra como ler uma mensagem preservando anexos 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); | |
} |
Ler uma Mensagem sem Preservar Anexos TNEF
O seguinte trecho de código mostra como ler uma mensagem sem preservar anexos TNEF.
Atualizando Recursos em um Anexo TNEF e Preservando o Formato TNEF
O seguinte trecho de código mostra como atualizar recursos em um anexo TNEF e preservar o formato 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)); | |
} | |
} |
Adicionando Novos Anexos à Mensagem Principal Contendo TNEF
O seguinte trecho de código mostra como adicionar novos anexos à mensagem principal contendo 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); |
Criando TNEF EML a partir de MSG
Os MSGs do Outlook às vezes contêm informações como tabelas e estilos de texto que podem ser perturbados se forem convertidos para EML. Criar mensagens TNEF a partir de arquivos MSG permite reter a formatação e até mesmo enviar tais mensagens via clientes de e-mail mantendo a formatação. A propriedade MailConversionOptions.ConvertAsTnef é usada para conseguir isso. O seguinte trecho de código mostra como criar TNEF EML a partir de 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); |
Para criar o TNEF, o seguinte código de exemplo pode ser usado.
// 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); |
Detectar se uma Mensagem é TNEF
O seguinte trecho de código mostra como detectar se uma mensagem é 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()); |
Verificar se um Anexo está em formato TNEF
A propriedade Attachment.IsTnef permite detectar se o anexo da mensagem é uma mensagem formatada em TNEF.
var eml = MailMessage.Load(fileName);
foreach (attachment in eml.Attachments)
{
Console.WriteLine($"O Anexo é TNEF?: {attachment.IsTnef}");
}
Processando Mensagens Devolvidas
É muito comum que uma mensagem enviada a um destinatário possa ser devolvida por qualquer motivo, como um endereço de destinatário inválido. A API Aspose.Email tem a capacidade de processar tal mensagem para verificar se é um e-mail devolvido ou uma mensagem de e-mail regular. O método CheckBounced da classe MailMessage retorna um resultado válido se a mensagem de e-mail for um e-mail devolvido. Este artigo mostra o uso da classe BounceResult que fornece a capacidade de verificar se uma mensagem é um e-mail devolvido. Ele fornece informações detalhadas sobre os destinatários, a ação tomada e o motivo da notificação. O seguinte trecho de código mostra como processar mensagens devolvidas.
// 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(); |
Analisador de Spam Bayesiano
Aspose.Email fornece filtragem de e-mail usando um analisador de spam bayesiano. Ele fornece a classe SpamAnalyzer para esse propósito. Este artigo mostra como treinar o filtro para distinguir entre spam e e-mails regulares com base no banco de dados de palavras.
// 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); | |
} |
Obtendo preâmbulo e epílogo de mensagens em eml
Uma mensagem de e-mail pode conter algumas informações ocultas como um texto simples antes do corpo da mensagem (ou seja, preâmbulo) ou após o corpo (ou seja, epílogo). Normalmente, é alguma informação adicional ou contexto para o destinatário antes ou depois que eles leem o conteúdo principal do e-mail. Você pode obter essas informações usando as propriedades MailMessage.Preamble ou/and MailMessage.Epilogue respectivamente.
O seguinte trecho de código mostra como obter os textos de preâmbulo e epílogo:
// Obtém ou define um texto de preâmbulo.
public string Preamble
// Obtém ou define um texto de epílogo.
public string Epilogue