Gérer, déplacer et organiser les dossiers IMAP
Opérations sur les dossiers
Obtenir les informations du dossier
Obtenir des informations sur les dossiers d’un serveur IMAP est très simple avec Aspose.Email. Appelez le ListFolders() méthode du ImapClient classe. Elle renvoie un objet du ImapFolderInfoCollection type. Parcourez cette collection et obtenez des informations sur chaque dossier dans une boucle. La méthode est surchargée. Vous pouvez passer un nom de dossier comme paramètre pour obtenir la liste des sous‑dossiers. Le fragment de code suivant montre comment obtenir les informations de dossiers depuis un serveur IMAP en utilisant Aspose.Email avec la méthode décrite.
// 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);
}
Supprimer et renommer les dossiers
Un dossier sur un serveur IMAP peut être supprimé ou renommé en une seule ligne avec Aspose.Email :
- Le DeleteFolder() méthode accepte le nom du dossier en paramètre.
- Pour le RenameFolder() méthode, vous devez fournir le nom du dossier actuel et le nouveau nom de dossier. Le fragment de code suivant montre comment supprimer un dossier d’un serveur IMAP, et comment renommer un dossier. Chaque opération s’effectue avec une ligne de code.
// Delete a folder and Rename a folder
client.DeleteFolder("foldername");
client.RenameFolder("foldername", "newfoldername");
Travailler avec les dossiers de boîtes aux lettres à usage spécial
Certaines boutiques de messages IMAP comprennent des boîtes aux lettres à usage spécial, comme celles utilisées pour stocker les brouillons ou les messages envoyés. De nombreux clients de messagerie permettent aux utilisateurs de spécifier où les brouillons ou les messages envoyés doivent être placés, mais leur configuration nécessite que l’utilisateur connaisse les boîtes aux lettres réservées à ces fins par le serveur. Aspose.Email peut identifier ces boîtes aux lettres à usage spécial en utilisant le ImapMailboxInfo classe pour faciliter leur utilisation. L’exemple de code suivant montre comment accéder à ces boîtes aux lettres à usage spécial en utilisant le ImapMailboxInfo classe.
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);
Opérations sur les messages au sein des dossiers
Ajouter un nouveau message à un dossier
Vous pouvez ajouter un nouveau message à un dossier en utilisant le MailMessage et ImapClient classes. Créez d’abord un MailMessage objet en fournissant les valeurs sujet, à et de. Puis abonnez‑vous à un dossier et ajoutez le message. Le fragment de code suivant montre comment ajouter un nouveau Message dans un dossier.
// 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);
Ajouter plusieurs messages avec MultiConnection
Vous pouvez ajouter plusieurs messages en utilisant le AppendMessages méthode fournie par le ImapClient classes. Le AppendMessages méthode accepte une liste de MailMessage et l’ajoute au dossier actuel si le dossier n’est pas fourni en paramètre. ImapClient prend également en charge le mode MultiConnection pour les opérations lourdes. Le fragment de code suivant montre comment ajouter plusieurs messages en utilisant le mode MultiConnection.
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);
Déplacer des messages entre dossiers
Aspose.Email pour .NET permet de déplacer des messages d’un dossier de boîte aux lettres à un autre en utilisant le ImapClient API. Le MoveMessage La méthode utilise l’identifiant unique du message et le nom du dossier de destination pour déplacer un message vers le dossier de destination. Le fragment de code suivant montre comment déplacer des messages vers un autre dossier de boîte aux lettres.
///<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 { }
}
}
Copier des messages entre dossiers
L’API Aspose.Email offre la capacité de copier des messages d’un dossier de boîte aux lettres à un autre. Elle permet de copier un seul ou plusieurs messages en utilisant le CopyMessage et CopyMessages méthodes. Le CopyMessages méthode offre la capacité de copier plusieurs messages du dossier source d’une boîte aux lettres vers le dossier de destination. Le fragment de code suivant montre comment copier des messages vers un autre dossier de boîte aux lettres.
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 { }
}
}