Trabajando con Carpetas en el Servidor IMAP

Obteniendo Información de Carpetas

Obtener información sobre carpetas de un servidor IMAP es muy fácil con Aspose.Email. Llama al método ListFolders() de la clase ImapClient. Devuelve un objeto del tipo ImapFolderInfoCollection. Itera a través de esta colección y obtén información sobre carpetas individuales en un bucle. El método está sobrecargado. Puedes pasar un nombre de carpeta como parámetro para obtener una lista de subcarpetas. El siguiente fragmento de código muestra cómo obtener información de carpeta de un servidor IMAP utilizando Aspose.Email con el método descrito en la información.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Get all folders in the currently subscribed folder
ImapFolderInfoCollection folderInfoColl = client.ListFolders();
// Iterate through the collection to get folder info one by one
foreach (ImapFolderInfo folderInfo in folderInfoColl)
{
// Folder name and get New messages in the folder
Console.WriteLine("Folder name is " + folderInfo.Name);
ImapFolderInfo folderExtInfo = client.GetFolderInfo(folderInfo.Name);
Console.WriteLine("New message count: " + folderExtInfo.NewMessageCount);
Console.WriteLine("Is it readonly? " + folderExtInfo.ReadOnly);
Console.WriteLine("Total number of messages " + folderExtInfo.TotalMessageCount);
}

Eliminando y Renombrando Carpetas

Una carpeta en un servidor IMAP se puede eliminar o renombrar en una sola línea con Aspose.Email:

  • El método DeleteFolder() acepta el nombre de la carpeta como parámetro.
  • Para el método RenameFolder(), necesitas pasar el nombre actual de la carpeta y el nuevo nombre de la carpeta.

El siguiente fragmento de código muestra cómo eliminar una carpeta de un servidor IMAP y cómo renombrar una carpeta. Cada operación se realiza con una sola línea de código.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Delete a folder and Rename a folder
client.DeleteFolder("foldername");
client.RenameFolder("foldername", "newfoldername");

Agregando un Nuevo Mensaje en una Carpeta

Puedes agregar un nuevo mensaje a la carpeta utilizando las clases MailMessage y ImapClient. Primero crea un objeto MailMessage proporcionando los valores de asunto, para y de. Luego suscríbete a una carpeta y agrega el mensaje a ella. El siguiente fragmento de código muestra cómo agregar un nuevo mensaje en una carpeta.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Create a message
MailMessage msg = new MailMessage("user@domain1.com", "user@domain2.com", "subject", "message");
// Subscribe to the Inbox folder and Append the newly created message
client.SelectFolder(ImapFolderInfo.InBox);
client.SubscribeFolder(client.CurrentFolder.Name);
client.AppendMessage(client.CurrentFolder.Name, msg);

Agregar Múltiples Mensajes con Soporte de MultiConexión

Puedes agregar múltiples mensajes utilizando el método AppendMessages proporcionado por las clases ImapClient. El método AppendMessages acepta una lista de MailMessage y la agrega a la carpeta actual si la carpeta no se proporciona como parámetro. ImapClient también admite el modo de MultiConexión para operaciones de carga pesada. El siguiente fragmento de código muestra cómo agregar múltiples mensajes utilizando el modo de MultiConexión.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
ImapClient imapClient = new ImapClient();
imapClient.Host = "<HOST>";
imapClient.Port = 993;
imapClient.Username = "<USERNAME>";
imapClient.Password = "<PASSWORD>";
imapClient.SupportedEncryption = EncryptionProtocols.Tls;
imapClient.SecurityOptions = SecurityOptions.SSLImplicit;
List<MailMessage> messages = new List<MailMessage>();
for (int i = 0; i < 20; i++)
{
MailMessage message = new MailMessage(
"<EMAIL ADDRESS>",
"<EMAIL ADDRESS>",
"Test Message - " + Guid.NewGuid().ToString(),
"IMAP Group Append with MultiConnection");
messages.Add(message);
}
imapClient.ConnectionsQuantity = 5;
imapClient.UseMultiConnection = MultiConnectionMode.Enable;
imapClient.AppendMessages(messages);

Mover Mensajes a Otra Carpeta de Correo

Aspose.Email para .NET permite mover mensajes de una carpeta de correo a otra utilizando la API ImapClient. El método MoveMessage utiliza el ID único del mensaje y el nombre de la carpeta de destino para mover un mensaje a la carpeta de destino. El siguiente fragmento de código muestra cómo mover mensajes a otra carpeta de correo.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
///<summary>
/// This example shows how to move a message from one folder of a mailbox to another one using the ImapClient API of Aspose.Email for .NET
/// Available from Aspose.Email for .NET 6.4.0 onwards
/// -------------- Available API Overload Members --------------
/// Void ImapClient.MoveMessage(IConnection iConnection, int sequenceNumber, string folderName, bool commitDeletions)
/// Void ImapClient.MoveMessage(IConnection iConnection, string uniqueId, string folderName, bool commitDeletions)
/// Void ImapClient.MoveMessage(int sequenceNumber, string folderName, bool commitDeletions)
/// Void ImapClient.MoveMessage(string uniqueId, string folderName, bool commitDeletions)
/// Void ImapClient.MoveMessage(IConnection iConnection, int sequenceNumber, string folderName)
/// Void ImapClient.MoveMessage(IConnection iConnection, string uniqueId, string folderName)
/// Void ImapClient.MoveMessage(int sequenceNumber, string folderName)
/// Void ImapClient.MoveMessage(string uniqueId, string folderName)
///</summary>
using (ImapClient client = new ImapClient("host.domain.com", 993, "username", "password"))
{
string folderName = "EMAILNET-35151";
if (!client.ExistFolder(folderName))
client.CreateFolder(folderName);
try
{
MailMessage message = new MailMessage(
"from@domain.com",
"to@domain.com",
"EMAILNET-35151 - " + Guid.NewGuid(),
"EMAILNET-35151 ImapClient: Provide option to Move Message");
client.SelectFolder(ImapFolderInfo.InBox);
// Append the new message to Inbox folder
string uniqueId = client.AppendMessage(ImapFolderInfo.InBox, message);
ImapMessageInfoCollection messageInfoCol1 = client.ListMessages();
Console.WriteLine(messageInfoCol1.Count);
// Now move the message to the folder EMAILNET-35151
client.MoveMessage(uniqueId, folderName);
client.CommitDeletes();
// Verify that the message was moved to the new folder
client.SelectFolder(folderName);
messageInfoCol1 = client.ListMessages();
Console.WriteLine(messageInfoCol1.Count);
// Verify that the message was moved from the Inbox
client.SelectFolder(ImapFolderInfo.InBox);
messageInfoCol1 = client.ListMessages();
Console.WriteLine(messageInfoCol1.Count);
}
finally
{
try { client.DeleteFolder(folderName); }
catch { }
}
}

Copiar Mensajes a Otra Carpeta de Correo

La API de Aspose.Email proporciona la capacidad de copiar mensajes de una carpeta de correo a otra. Permite copiar un solo mensaje así como múltiples mensajes utilizando los métodos CopyMessage y CopyMessages. El método CopyMessages proporciona la capacidad de copiar múltiples mensajes de la carpeta de origen de un buzón a la carpeta de destino. El siguiente fragmento de código muestra cómo copiar mensajes a otra carpeta de correo.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
using (ImapClient client = new ImapClient("exchange.aspose.com", "username", "password"))
{
// Create the destination folder
string folderName = "EMAILNET-35242";
if (!client.ExistFolder(folderName))
client.CreateFolder(folderName);
try
{
// Append a couple of messages to the server
MailMessage message1 = new MailMessage(
"asposeemail.test3@aspose.com",
"asposeemail.test3@aspose.com",
"EMAILNET-35242 - " + Guid.NewGuid(),
"EMAILNET-35242 Improvement of copy method.Add ability to 'copy' multiple messages per invocation.");
string uniqueId1 = client.AppendMessage(message1);
MailMessage message2 = new MailMessage(
"asposeemail.test3@aspose.com",
"asposeemail.test3@aspose.com",
"EMAILNET-35242 - " + Guid.NewGuid(),
"EMAILNET-35242 Improvement of copy method.Add ability to 'copy' multiple messages per invocation.");
string uniqueId2 = client.AppendMessage(message2);
// Verify that the messages have been added to the mailbox
client.SelectFolder(ImapFolderInfo.InBox);
ImapMessageInfoCollection msgsColl = client.ListMessages();
foreach (ImapMessageInfo msgInfo in msgsColl)
Console.WriteLine(msgInfo.Subject);
// Copy multiple messages using the CopyMessages command and Verify that messages are copied to the destination folder
client.CopyMessages(new[] { uniqueId1, uniqueId2 }, folderName);
client.SelectFolder(folderName);
msgsColl = client.ListMessages();
foreach (ImapMessageInfo msgInfo in msgsColl)
Console.WriteLine(msgInfo.Subject);
}
finally
{
try
{
client.DeleteFolder(folderName);
}
catch { }
}
}

Trabajando con Carpetas de Buzón de Uso Especial

Algunos almacenes de mensajes IMAP incluyen buzones de uso especial, como aquellos utilizados para mantener borradores o mensajes enviados. Muchos clientes de correo permiten a los usuarios especificar dónde deberían colocarse los mensajes borradores o enviados, pero configurarlos requiere que el usuario sepa qué buzones ha reservado el servidor para estos fines. Aspose.Email puede identificar estos buzones de uso especial utilizando la clase ImapMailboxInfo para facilitar su trabajo. El siguiente ejemplo de código demuestra cómo acceder a estos buzones de uso especial utilizando la clase ImapMailboxInfo.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
ImapClient imapClient = new ImapClient();
imapClient.Host = "<HOST>";
imapClient.Port = 993;
imapClient.Username = "<USERNAME>";
imapClient.Password = "<PASSWORD>";
imapClient.SupportedEncryption = EncryptionProtocols.Tls;
imapClient.SecurityOptions = SecurityOptions.SSLImplicit;
ImapMailboxInfo mailboxInfo = imapClient.MailboxInfo;
Console.WriteLine(mailboxInfo.Inbox);
Console.WriteLine(mailboxInfo.DraftMessages);
Console.WriteLine(mailboxInfo.JunkMessages);
Console.WriteLine(mailboxInfo.SentMessages);
Console.WriteLine(mailboxInfo.Trash);