Trabalhando com Pastas no Servidor IMAP

Obtendo Informações sobre Pastas

Obter informações sobre pastas de um servidor IMAP é muito fácil com Aspose.Email. Chame o método ListFolders() da classe ImapClient. Ele retorna um objeto do tipo ImapFolderInfoCollection. Percorra essa coleção e obtenha informações sobre pastas individuais em um loop. O método está sobrecarregado. Você pode passar um nome de pasta como parâmetro para obter uma lista de subpastas. O seguinte trecho de código mostra como obter informações de pastas de um servidor IMAP usando Aspose.Email com o método descrito na informação.

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

Excluindo e Renomeando Pastas

Uma pasta em um servidor IMAP pode ser excluída ou renomeada em uma única linha com Aspose.Email:

  • O método DeleteFolder() aceita o nome da pasta como um parâmetro.
  • Para o método RenameFolder(), você precisa passar o nome atual da pasta e o novo nome da pasta.

O seguinte trecho de código mostra como remover uma pasta de um servidor IMAP e como renomear uma pasta. Cada operação é realizada com uma linha 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");

Adicionando uma Nova Mensagem em uma Pasta

Você pode adicionar uma nova mensagem à pasta usando as classes MailMessage e ImapClient. Primeiro, crie um objeto MailMessage fornecendo o assunto, valores de para e de. Depois, inscreva-se em uma pasta e adicione a mensagem a ela. O seguinte trecho de código mostra como adicionar uma nova mensagem em uma pasta.

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

Adicionar Várias Mensagens com Suporte a MultiConexão

Você pode adicionar várias mensagens usando o método AppendMessages fornecido pelas classes ImapClient. O método AppendMessages aceita uma lista de MailMessage e a adiciona à pasta atual se a pasta não for fornecida como um parâmetro. O ImapClient também oferece suporte ao modo MultiConexão para operações com carga pesada. O seguinte trecho de código mostra como adicionar várias mensagens usando o modo MultiConexão.

// 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 Mensagens para Outra Pasta de Caixa de Entrada

Aspose.Email para .NET permite mover mensagens de uma pasta de caixa de entrada para outra usando a API ImapClient. O método MoveMessage utiliza o id único da mensagem e o nome da pasta de destino para mover uma mensagem para a pasta de destino. O seguinte trecho de código mostra como mover mensagens para outra pasta de caixa de entrada.

// 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 Mensagens para Outra Pasta de Caixa de Entrada

A API Aspose.Email fornece a capacidade de copiar mensagens de uma pasta de caixa de entrada para outra. Ela permite copiar uma única mensagem, bem como várias mensagens, usando os métodos CopyMessage e CopyMessages. O método CopyMessages oferece a capacidade de copiar várias mensagens da pasta de origem de uma caixa de entrada para a pasta de destino. O seguinte trecho de código mostra como copiar mensagens para outra pasta de caixa de entrada.

// 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 { }
}
}

Trabalhando com Pastas de Caixa de Entrada de Uso Especial

Alguns armazenamentos de mensagens IMAP incluem caixas de entrada de uso especial, como aquelas usadas para manter mensagens de rascunho ou mensagens enviadas. Muitos clientes de e-mail permitem que os usuários especifiquem onde as mensagens de rascunho ou enviadas devem ser colocadas, mas configurá-las requer que o usuário saiba quais caixas de entrada o servidor reservou para esses fins. Aspose.Email pode identificar essas caixas de entrada de uso especial usando a classe ImapMailboxInfo para facilitar o trabalho com elas. O seguinte exemplo de código demonstra como acessar essas caixas de entrada de uso especial usando a classe 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);