Crear y guardar archivos de Outlook
Aspose.Email admite crear archivos de mensaje Outlook (MSG). Este artículo explica cómo:
- Crear y guardar mensajes de Outlook
- Crear archivos MSG con adjuntos
- Crear archivos MSG con cuerpo RTF
- Guardar mensaje en estado borrador
Crear y guardar mensajes Outlook
El MailMessage clase tiene el Save() método que puede guardar archivos Outlook MSG en disco o en un stream. Los fragmentos de código a continuación crean una instancia de la MailMessage clase, establece propiedades como from, to, subject y body. El Save() el método toma el nombre de archivo como argumento. Además, los mensajes de Outlook pueden crearse con un cuerpo RTF comprimido usando el MapiConversionOptions.
- Crea una nueva instancia de la MailMessage clase y establece las propiedades From, To, Subject y Body.
- Llame al MapiMessage clase FromMailMessage método que acepta el objeto de la MailMessage tipo. El FromMailMessage método convierte el MailMessage en un MapiMessage (MSG).
- Llame al MapiMessage.Save() método para guardar el archivo MSG.
Escriba el siguiente código en el evento click del control de botón de la aplicación Windows.
// Create an instance of the MailMessage class
MailMessage mailMsg = new MailMessage();
// Set from, to, subject and body properties
mailMsg.From = "sender@domain.com";
mailMsg.To = "receiver@domain.com";
mailMsg.Subject = "This is test message";
mailMsg.Body = "This is test body";
// Create an instance of the MapiMessage class and pass MailMessage as argument
MapiMessage outlookMsg = MapiMessage.FromMailMessage(mailMsg);
// Save the message (MSG) file
string strMsgFile = @"CreatingAndSavingOutlookMessages_out.msg";
outlookMsg.Save(dataDir + strMsgFile);
Crear archivos MSG con adjuntos
En el ejemplo anterior, creamos un archivo MSG sencillo. Aspose.Email también admite guardar archivos de mensaje con adjuntos. Todo lo que necesitas hacer es agregar los adjuntos al MailMessage instancia. Agregue adjuntos llamando al método Add() en el MailMessage.Attachments colección. Añada un listbox al formulario creado arriba y añada dos botones, uno para agregar y otro para eliminar archivos adjuntos. La aplicación que agrega archivos adjuntos funciona así:
- Al hacer clic en el botón Add Attachment, se muestra un Open File Dialog para ayudar a los usuarios a explorar y seleccionar el adjunto.
- Cuando se ha seleccionado un archivo, la ruta completa se agrega a una lista.
- Cuando se crea el archivo MSG, las rutas de los adjuntos se obtienen de la lista y se agregan al MailMessage.Attachments colección.
Escriba el siguiente código en el evento click del botón Add Attachment.
// Open a file open dialog to select the attachment
OpenFileDialog fd = new OpenFileDialog();
// If user selected the file and clicked OK, add the file name and path to the list
if (fd.ShowDialog() == DialogResult.OK)
{
lstAttachments.Items.Add(fd.FileName);
}
Cuando se hace clic en el botón Remove Attachment, elimine los elementos seleccionados del ListBox. Escriba el siguiente código en el evento click del botón Remove Attachment.
// Check if the user has selected any item in the attachments listbox
if (lstAttachments.SelectedItems.Count > 0)
{
// Remove the selected attachment from the listbox
lstAttachments.Items.RemoveAt(lstAttachments.SelectedIndex);
}
Añada el código para agregar los adjuntos al MailMessage instancia. El código final para la función Write Msg se escribe a continuación.
// File name for output MSG file
string strMsgFile;
// Open a save file dialog for saving the file and Add filter for msg files
SaveFileDialog fd = new SaveFileDialog();
fd.Filter = "Outlook Message files (*.msg)|*.msg|All files (*.*)|*.*";
// If user pressed OK, save the file name + path
if (fd.ShowDialog() == DialogResult.OK)
{
strMsgFile = fd.FileName;
}
else
{
// If user did not selected the file, return
return;
}
// Create an instance of MailMessage class
MailMessage mailMsg = new MailMessage();
// Set from, to, subject and body properties
mailMsg.From = txtFrom.Text;
mailMsg.To = txtTo.Text;
mailMsg.Subject = txtSubject.Text;
mailMsg.Body = txtBody.Text;
// Add the attachments
foreach (string strFileName in lstAttachments.Items)
{
mailMsg.Attachments.Add(new Attachment(strFileName));
}
// Create an instance of MapiMessage class and pass MailMessage as argument
MapiMessage outlookMsg = MapiMessage.FromMailMessage(mailMsg);
outlookMsg.Save(strMsgFile);
Crear archivos MSG con cuerpo RTF
También puedes crear archivos de mensaje Outlook (MSG) con cuerpos de texto enriquecido (RTF) usando Aspose.Email. El cuerpo RTF admite formato de texto. Crea uno estableciendo el MailMessage.HtmlBody propiedad. Cuando conviertes un MailMessage instancia en un MapiMessage instancia, el cuerpo HTML se convierte a RTF. De esta manera, el formato del cuerpo del correo se preserva.
El siguiente ejemplo crea un archivo MSG con un cuerpo RTF. Hay un encabezado, formato en negrita y subrayado aplicado en el cuerpo HTML. Este formato se conserva cuando el HTML se convierte a RTF.
// Create an instance of the MailMessage class
MailMessage mailMsg = new MailMessage();
// Set from, to, subject and body properties
mailMsg.From = "from@domain.com";
mailMsg.To = "to@domain.com";
mailMsg.Subject = "subject";
mailMsg.HtmlBody = "<h3>rtf example</h3><p>creating an <b><u>outlook message (msg)</u></b> file using Aspose.Email.</p>";
MapiMessage outlookMsg = MapiMessage.FromMailMessage(mailMsg);
outlookMsg.Save(dataDir + "CreatingMSGFilesWithRTFBody_out.msg");
Compresión RTF para el cuerpo del mensaje MAPI
NOTA: El proceso de compresión puede ralentizar el rendimiento al crear mensajes. Al comprender este hecho y configurar la bandera de compresión según los requisitos específicos y el compromiso entre el tamaño del archivo y el rendimiento, los desarrolladores pueden gestionar eficazmente la creación de archivos MSG y PST al manejar mensajes de correo electrónico.
La compresión RTF está diseñada para reducir el tamaño de un mensaje así como los archivos PST (Personal Storage Table) resultantes que Microsoft Outlook usa para almacenar mensajes de correo electrónico y otros datos. Al utilizar la compresión RTF al configurar el cuerpo del mensaje, los desarrolladores pueden reducir la cantidad de memoria necesaria para almacenar mensajes de correo electrónico u optimizar el ancho de banda de la red al transmitir mensajes.
Para este propósito, se han diseñado dos métodos sobrecargados:
-
MapiMessageItemBase.SetBodyContent(string content, BodyContentType contentType, bool compression): Este método le permite establecer el contenido del cuerpo del mensaje usando la cadena especificada y especificando el contentType del cuerpo (por ejemplo, texto plano, HTML, etc.). El parámetro opcional compression es un valor que indica si el contenido debe comprimirse usando compresión RTF. Si el parámetro compression es true, el contenido se comprimirá, resultando en un mensaje de menor tamaño.
-
MapiMessageItemBase.SetBodyRtf(string content, bool compression): Este método establece específicamente el contenido del cuerpo del mensaje en formato RTF. El parámetro content es una cadena que representa el contenido RTF que se establecerá como cuerpo del mensaje. Al igual que en el método anterior, el parámetro compression determina si se debe aplicar compresión RTF al contenido. Si compression es true, el contenido RTF se comprimirá para reducir su tamaño.
El siguiente ejemplo de código muestra cómo establecer el cuerpo HTML y mantenerlo comprimido:
var htmlBody = "<html><body><h1>This is the body content</h1></body></html>";
var msg = new MapiMessage("from@domain.com", "to@domain.com", "subject", "body");
// set the html body and keep it compressed
// this will reduce the message size
msg.SetBodyContent(htmlBody, BodyContentType.Html, true);
También hay un MapiConversionOptions.UseBodyCompression propiedad. Cuando esta propiedad está habilitada, se aplica compresión del cuerpo RTF durante la conversión de MailMessage a MapiMessage, lo que resulta en un archivo MSG de menor tamaño. Se muestra en el siguiente ejemplo de código:
var message = MailMessage.Load(fileName);
var options = new MapiConversionOptions();
options.UseBodyCompression = true;
var msg = MapiMessage.FromMailMessage(message, options);
Guardar mensaje en estado borrador
Los correos electrónicos se guardan como borradores cuando alguien ha comenzado a editarlos pero quiere volver a ellos para completarlos más tarde. Aspose.Email admite guardar mensajes de correo en estado de borrador estableciendo una bandera de mensaje. A continuación se muestra el código de ejemplo para guardar un mensaje de correo de Outlook (MSG) como borrador.
// Change properties of an existing MSG file
string strExistingMsg = @"message.msg";
// Load the existing file in MailMessage and Change the properties
MailMessage msg = MailMessage.Load(dataDir + strExistingMsg, new MsgLoadOptions());
msg.Subject += "NEW SUBJECT (updated by Aspose.Email)";
msg.HtmlBody += "NEW BODY (updated by Aspose.Email)";
// Create an instance of type MapiMessage from MailMessage, Set message flag to un-sent (draft status) and Save it
MapiMessage mapiMsg = MapiMessage.FromMailMessage(msg);
mapiMsg.SetMessageFlags(MapiMessageFlags.MSGFLAG_UNSENT);
mapiMsg.Save(dataDir + "SavingMessageInDraftStatus_out.msg");