Funciones de Utilidad - MailMessage

Cifrado y Descifrado de Mensajes

Aspose.Email proporciona la facilitat de cifrar y descifrar mensajes de correo electrónico utilizando X509Certificates. Este artículo muestra cómo se puede cargar y cifrar un mensaje existente o nuevo utilizando MailMessage. Los métodos Encrypt() y Decrypt() devuelven un objeto MailMessage para los efectos aplicados y deben cuidarse al cifrar/descifrar mensajes. Cifrar y descifrar mensajes implica los siguientes pasos:

  1. Crear un nuevo mensaje o cargar uno existente
  2. Cargar un certificado de cifrado utilizando el objeto X509Certificate
  3. Cifrar el mensaje utilizando el certificado
  4. Enviar el mensaje o guardarlo
  5. Descifrar el mensaje según sea necesario

El siguiente fragmento de código muestra cómo cifrar y descifrar mensajes.

// 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 si un Mensaje está Cifrado

La clase MailMessage de Aspose.Email te permite verificar si un mensaje está cifrado o no. La propiedad IsEncrypted de MailMessage permite verificar esto como se muestra en el siguiente ejemplo 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);

Mensajes de correo electrónico que contienen adjuntos TNEF

El Formato de Encapsulación Neutral de Transporte (TNEF) es un formato propietario de adjunto de correo electrónico utilizado por Microsoft Outlook y Microsoft Exchange Server. La API de Aspose.Email te permite leer mensajes de correo electrónico que tienen adjuntos TNEF y modificar el contenido del adjunto. El correo electrónico se puede guardar como un correo electrónico normal o en el mismo formato, preservando los adjuntos TNEF. Este artículo muestra diferentes ejemplos de código para trabajar con mensajes que contienen adjuntos TNEF. Este artículo también muestra cómo crear archivos TNEF EML a partir de archivos MSG de Outlook.

Leer un Mensaje Preservando Adjuntos TNEF

El siguiente fragmento de código muestra cómo leer un mensaje preservando adjuntos 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);
}

Leer un Mensaje sin Preservar Adjuntos TNEF

El siguiente fragmento de código muestra cómo leer un mensaje sin preservar adjuntos TNEF.

Actualizar Recursos en un Adjunto TNEF y Preservar el Formato TNEF

El siguiente fragmento de código muestra cómo actualizar recursos en un adjunto TNEF y preservar el 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));
}
}

Agregar Nuevos Adjuntos al Mensaje Principal que Contiene TNEF

El siguiente fragmento de código muestra cómo agregar nuevos adjuntos al mensaje principal que contiene 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);

Crear TNEF EML a partir de MSG

Los MSGs de Outlook a veces contienen información como tablas y estilos de texto que pueden verse alteradas si se convierten a EML. Crear mensajes TNEF a partir de dichos archivos MSG permite conservar el formato e incluso enviar tales mensajes a través de clientes de correo electrónico conservando el formato. La propiedad MailConversionOptions.ConvertAsTnef se utiliza para lograr esto. El siguiente fragmento de código muestra cómo crear 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 crear el TNEF, se puede utilizar el siguiente código de muestra.

// 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 si un Mensaje es TNEF

El siguiente fragmento de código muestra cómo detectar si un mensaje es 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 si el Adjunto está en formato TNEF

La propiedad Attachment.IsTnef permite detectar si el adjunto del mensaje es un mensaje en formato TNEF.

var eml = MailMessage.Load(fileName);

foreach (attachment in eml.Attachments)
{
    Console.WriteLine($"¿Es el adjunto TNEF?: {attachment.IsTnef}");
}

Procesar Mensajes Rebotados

Es muy común que un mensaje enviado a un destinatario pueda rebotar por cualquier razón, como una dirección de destinatario inválida. La API de Aspose.Email tiene la capacidad de procesar tal mensaje para verificar si es un correo electrónico rebotado o un mensaje de correo electrónico regular. El método CheckBounced de la clase MailMessage devuelve un resultado válido si el mensaje de correo electrónico es un correo rebotado. Este artículo muestra el uso de la clase BounceResult que proporciona la capacidad de verificar si un mensaje es un correo electrónico rebotado. Además, proporciona información detallada sobre los destinatarios, la acción tomada y la razón de la notificación. El siguiente fragmento de código muestra cómo procesar mensajes rebotados.

// 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();

Analizador de Spam Bayesiano

Aspose.Email proporciona filtrado de correo electrónico utilizando un analizador de spam bayesiano. Proporciona la clase SpamAnalyzer para este propósito. Este artículo muestra cómo entrenar el filtro para distinguir entre spam y correos electrónicos regulares basándose en la base de datos de palabras.

// 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);
}

Obtener preámbulo y epílogo de mensajes eml

Un mensaje de correo electrónico puede contener alguna información oculta como texto simple antes del cuerpo del mensaje (es decir, preámbulo) o después del cuerpo (es decir, epílogo). Normalmente, es información adicional o contexto para el destinatario antes o después de que lean el contenido principal del correo electrónico. Puedes obtener esta información usando las propiedades MailMessage.Preamble o/and MailMessage.Epilogue respectivamente.

El siguiente fragmento de código muestra cómo obtener los textos del preámbulo y del epílogo:

// Obtiene o establece un texto de preámbulo.
public string Preamble

// Obtiene o establece un texto de epílogo.
public string Epilogue