Gestionar adjuntos de correo y objetos incrustados en C#
Gestionar adjuntos de correo
Un adjunto de correo electrónico es un archivo que se envía junto con un mensaje de correo. El archivo puede enviarse como un mensaje separado así como como parte del mensaje al que está adjunto. El Attachment clase se usa con el MailMessage clase. Todos los mensajes incluyen un cuerpo. Además del cuerpo, podría querer enviar archivos adicionales. Estos se envían como adjuntos y se representan como una instancia de la Attachment clase. Puede enviar cualquier número de adjuntos, pero el tamaño del adjunto está limitado por el servidor de correo. Gmail, por ejemplo, no admite archivos de más de 10 MB.
¡Pruébalo!
Agregar o eliminar adjuntos de correo electrónico en línea con la aplicación gratuita Aspose.Email Editor App.
Agregar un adjunto
Para agregar un adjunto a un correo electrónico, sigue estos pasos:
- Cree una instancia de la MailMessage clase.
- Cree una instancia de la Attachment clase.
- Cargue el adjunto en el Attachment instancia.
- Añada el Attachment instancia en el MailMessage instancia.
El siguiente fragmento de código muestra cómo añadir un adjunto a un correo electrónico.
// Create an instance of MailMessage class
var eml = new MailMessage
{
From = "sender@from.com",
To = "receiver@to.com",
Subject = "This is message",
Body = "This is body"
};
// Load an attachment
var attachment = new Attachment("1.txt");
// Add Multiple Attachment in instance of MailMessage class and Save message to disk
eml.Attachments.Add(attachment);
eml.AddAttachment(new Attachment("1.jpg"));
eml.AddAttachment(new Attachment("1.doc"));
eml.AddAttachment(new Attachment("1.rar"));
eml.AddAttachment(new Attachment("1.pdf"));
eml.Save("AddAttachments.eml");
Arriba describimos cómo añadir adjuntos a su mensaje de correo electrónico con Aspose.Email. Lo que sigue muestra cómo eliminar adjuntos y mostrar información sobre ellos en la pantalla.
Agregar un adjunto de referencia
Un adjunto de referencia es un tipo de adjunto que incluye un enlace o una referencia a un archivo o elemento, en lugar de incluir el propio archivo o elemento en el mensaje de correo electrónico. Cuando los destinatarios del correo hagan clic en el adjunto de referencia, podrán acceder al archivo enlazado si poseen los permisos adecuados para hacerlo. Al usar un adjunto de referencia, puedes enviar un mensaje de correo más pequeño y asegurarte de que todos tengan acceso a la versión más actualizada del archivo o elemento.
El fragmento de código a continuación muestra cómo agregar un adjunto de referencia a un correo electrónico. El código realiza los siguientes pasos:
- Carga el archivo de mensaje de correo electrónico usando el MailMessage.Load() método.
- Crea un nuevo objeto ReferenceAttachment llamado refAttach, pasando la URL del adjunto "https://[attach_uri]" como parámetro a su constructor.
- Establece el nombre del archivo adjunto a "Document.docx" usando el Name propiedad del objeto refAttach.
- Establece el tipo de proveedor del adjunto a AttachmentProviderType.OneDrivePro usando el ProviderType propiedad del objeto refAttach.
- Establece el tipo de permiso del adjunto a AttachmentPermissionType.AnyoneCanEdit usando el PermissionType propiedad del objeto refAttach.
- Añade el objeto refAttach al Adjuntos colección del objeto eml usando el Add() método.
var eml = MailMessage.Load("fileName");
var refAttach = new ReferenceAttachment("https://[attach_uri]")
{
Name = "Document.docx",
ProviderType = AttachmentProviderType.OneDrivePro,
PermissionType = AttachmentPermissionType.AnyoneCanEdit
};
eml.Attachments.Add(refAttach);
Eliminar adjunto
Para eliminar un adjunto, siga los pasos que se indican a continuación:
- Cree una instancia de Attachment clase.
- Cargue el adjunto en la instancia de Attachment clase.
- Añada el adjunto a la instancia de MailMessage clase.
- Elimine los adjuntos de la instancia de Attachment clase usando el MailMessage instancia de clase.
El siguiente fragmento de código muestra cómo eliminar un adjunto.
// Create an instance of MailMessage class
var eml = new MailMessage {From = "sender@sender.com", To = "receiver@gmail.com"};
// Load an attachment
var attachment = new Attachment("1.txt");
eml.Attachments.Add(attachment);
// Remove attachment from your MailMessage
eml.Attachments.Remove(attachment);
Mostrar nombre de archivo del adjunto
Para mostrar el nombre de archivo de un adjunto, siga estos pasos:
- Recorra los adjuntos en el mensaje de correo y guarde cada adjunto.
- Muestre cada nombre de adjunto en la pantalla.
El siguiente fragmento de código muestra cómo mostrar el nombre de archivo de un adjunto en la pantalla.
var eml = MailMessage.Load("Attachments.eml");
foreach (var attachment in eml.Attachments)
{
// Display the the attachment file name
Console.WriteLine(attachment.Name);
}
Extraer adjuntos de correo
Este tema explica cómo extraer un adjunto de un archivo de correo electrónico. Un adjunto de correo es un archivo que se envía junto con un mensaje de correo. El archivo puede enviarse como un mensaje separado o como parte del mensaje al que está adjunto. Todos los mensajes de correo electrónico incluyen la opción de enviar archivos adicionales. Estos se envían como adjuntos y se representan como instancias de la Attachment clase. El Attachment clase se usa con el MailMessage clase para trabajar con adjuntos. Para extraer adjuntos de un mensaje de correo electrónico, siga estos pasos:
- Cree una instancia de la MailMessage clase.
- Cargue un archivo de correo electrónico en el MailMessage instancia.
- Cree una instancia de la Attachment clase y úsela en un bucle para extraer todos los adjuntos.
- Guarde el adjunto y muéstrelo en pantalla.
|Adjuntos extraídos en el correo| | :- | |
| El siguiente fragmento de código muestra cómo extraer los adjuntos del correo.
var eml = MailMessage.Load("Message.eml", new MsgLoadOptions());
foreach (var attachment in eml.Attachments)
{
attachment.Save("MessageEmbedded_out.eml");
Console.WriteLine(attachment.Name);
}
Recuperar Content-Description del adjunto
La API de Aspose.Email proporciona la capacidad de leer la Content-Description de un adjunto desde el encabezado del adjunto. El siguiente fragmento de código muestra cómo recuperar la descripción del contenido del adjunto.
var eml = MailMessage.Load("EmailWithAttachEmbedded.eml");
Console.WriteLine(eml.Attachments[0].Headers["Content-Description"]);
Identificar mensajes incrustados
El siguiente fragmento de código demuestra cómo determinar si el adjunto es un mensaje incrustado o no.
var eml = MailMessage.Load("EmailWithAttachEmbedded.eml");
Console.WriteLine(eml.Attachments[0].IsEmbeddedMessage
? "Attachment is an embedded message."
: "Attachment isn't an embedded message.");
Recuperar adjuntos de correos firmados
Los correos firmados contienen un solo adjunto smime.p7m. Esto significa que el correo está encriptado por SMIME. El formato de archivo smime.p7m es la firma digital. Para ver el contenido de este correo use el RemoveSignature método. El método devuelve un MailMessage objeto sin firma digital.
var signedEml = MailMessage.Load("signed.eml");
if (signedEml.IsSigned)
{
for (var i = 0; i < signedEml.Attachments.Count; i++)
{
Console.WriteLine($@"Signed email attachment{i}: {signedEml.Attachments[i].Name}");
}
// The email is signed. Remove a signature.
var eml = signedEml.RemoveSignature();
Console.WriteLine(@"Signature removed.");
for (var i = 0; i < eml.Attachments.Count; i++)
{
Console.WriteLine($@"Email attachment{i}: {eml.Attachments[i].Name}");
}
}
Manejo de imágenes en línea
Agregar imagen en línea al cuerpo del correo
El LinkedResource clase se usa con el MailMessage clase para incrustar objetos en su mensaje de correo. Para agregar un objeto incrustado, siga estos pasos
- Cree una instancia de la MailMessage clase.
- Especifique los valores de remitente, destinatario y asunto en MailMessage instancia.
- Cree una instancia de la AlternateView clase.
- Cree una instancia de la LinkedResource clase.
- Cargue un objeto incrustado en el LinkedResourceCollection.
- Añada el objeto incrustado cargado al MailMessage instancia de clase.
- Añada el AlternateView instancia al MailMessage instancia de clase.
Los fragmentos de código a continuación generan un mensaje de correo electrónico con cuerpos de texto plano y HTML, y una imagen incrustada en el HTML
|Imagen incrustada en el correo| | :- | |
| Puede enviar cualquier número de objetos incrustados. El tamaño del adjunto está limitado por el servidor de correo. Gmail, por ejemplo, no admite archivos de más de 10 MB. Los fragmentos de código a continuación demuestran cómo incrustar objetos en un correo electrónico.
var eml = new MailMessage
{
From = "AndrewIrwin@from.com",
To = "SusanMarc@to.com",
Subject = "This is an email"
};
// Create the plain text part It is viewable by those clients that don't support HTML
var plainView =
AlternateView.CreateAlternateViewFromString("This is my plain text content", null, "text/plain");
// Create the HTML part.To embed images, we need to use the prefix 'cid' in the img src value.
// The cid value will map to the Content-Id of a Linked resource. Thus <img src='cid:barcode'>
// will map to a LinkedResource with a ContentId of 'barcode'.
var htmlView =
AlternateView.CreateAlternateViewFromString("Here is an embedded image.<img src=cid:barcode>", null,
"text/html");
// Create the LinkedResource (embedded image) and Add the LinkedResource to the appropriate view
var barcode = new LinkedResource("1.jpg", MediaTypeNames.Image.Jpeg)
{
ContentId = "barcode"
};
eml.LinkedResources.Add(barcode);
eml.AlternateViews.Add(plainView);
eml.AlternateViews.Add(htmlView);
eml.Save("EmbeddedImage_out.msg", SaveOptions.DefaultMsgUnicode);
Eliminar imagen en línea del cuerpo del correo
LinkedResourceCollection accedido a través de MailMessage.LinkedResources propiedad. El LinkedResourceCollection la colección proporciona un método para eliminar completamente los objetos incrustados añadidos a un mensaje de correo electrónico. Utilice la versión sobrecargada de LinkedResourceCollection.RemoveAt método para eliminar todos los rastros de un objeto incrustado de un mensaje de correo electrónico.
El código de ejemplo a continuación muestra cómo eliminar objetos incrustados de un mensaje de correo electrónico.
//Load the test message with Linked Resources
var eml = MailMessage.Load("EmlWithLinkedResources.eml");
//Remove a LinkedResource
eml.LinkedResources.RemoveAt(0, true);
//Now clear the Alternate View for linked Resources
eml.AlternateViews[0].LinkedResources.Clear(true);
Manejo de objetos incrustados
Un objeto incrustado es un objeto creado con una aplicación y encerrado dentro de un documento o archivo creado por otra aplicación. Por ejemplo, una hoja de cálculo de Microsoft Excel puede incrustarse en un informe de Microsoft Word, o un archivo de video puede incrustarse en una presentación de Microsoft PowerPoint. Cuando un archivo está incrustado, en lugar de insertarse o pegarse en otro documento, conserva su formato original. El documento incrustado puede abrirse en la aplicación original y modificarse.
Extraer objetos incrustados
Este tema explica cómo extraer objetos incrustados de un archivo de correo. El documento incrustado puede abrirse en la aplicación original y modificarse. Para extraer un objeto incrustado de un mensaje de correo, siga estos pasos:
- Cree una instancia de la MailMessage clase.
- Cargue un archivo de correo electrónico en el MailMessage instancia.
- Cree un bucle y cree una instancia de la Attachment clase en ella.
- Guarde el adjunto y muéstrelo en pantalla.
- Especifique la dirección del remitente y del destinatario en el MailMessage instancia.
- Enviar correo electrónico usando el SmtpClient clase.
El fragmento de código a continuación extrae objetos incrustados de un correo electrónico.
|Objetos incrustados extraídos en el correo| | :- | |
| El siguiente fragmento de código muestra cómo extraer objetos incrustados.
var eml = MailMessage.Load("Message.msg", new MsgLoadOptions());
foreach (var attachment in eml.Attachments)
{
attachment.Save("MessageEmbedded_out.msg");
Console.WriteLine(attachment.Name);
}
Extraer imágenes vinculadas en correos HTML
Extraer recursos de imágenes vinculadas externamente del cuerpo HTML e incrustarlos en la salida HTML con Aspose.Email para .NET. Establecer HtmlSaveOptions.ExtractHTMLBodyResourcesAsAttachments a True, y las imágenes vinculadas y otros recursos en el cuerpo HTML serán extraídos e incrustados. Esto ayuda a preservar la apariencia original de los mensajes con contenido enlazado. El siguiente ejemplo de código demuestra cómo cargar un mensaje de correo, extraer sus recursos HTML externos como adjuntos, opcionalmente manejar eventos de renderizado de recursos, y luego guardar el mensaje como un archivo HTML usando Aspose.Email para .NET.
// Load the email message
var mailMessage = MailMessage.Load("input.eml");
// Set options to extract external HTML resources
var options = new HtmlSaveOptions();
options.ExtractHTMLBodyResourcesAsAttachments = true;
// Optional: Handle resource rendering events
options.ResourceHtmlRendering += (sender, e) =>
{
Console.WriteLine(e.PathToResourceFile + " " + ((Attachment)sender).ContentId);
};
// Save the HTML representation of the email
mailMessage.Save("output.html", options);