Работа с папками на IMAP сервере
Получение информации о папках
Получение информации о папках с IMAP сервера очень просто с помощью Aspose.Email. Вызовите метод ListFolders() класса ImapClient. Он возвращает объект типа ImapFolderInfoCollection. Переберите эту коллекцию и получите информацию о отдельных папках в цикле. Метод перегружен. Вы можете передать имя папки в качестве параметра, чтобы получить список подпапок. Следующий фрагмент кода показывает, как получить информацию о папке с IMAP сервера, используя Aspose.Email и описанный метод.
// 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); | |
} |
Удаление и переименование папок
Папку на IMAP сервере можно удалить или переименовать в одну строчку с помощью Aspose.Email:
- Метод
DeleteFolder()
принимает имя папки в качестве параметра. - Для метода
RenameFolder()
вам нужно передать текущее имя папки и новое имя папки.
Следующий фрагмент кода показывает, как удалить папку с IMAP сервера и как переименовать папку. Каждая операция выполняется одной строкой кода.
// 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"); |
Добавление нового сообщения в папку
Вы можете добавить новое сообщение в папку, используя классы MailMessage и ImapClient. Сначала создайте объект MailMessage с указанием темы, а также адресов “Кому” и “От”. Затем подпишитесь на папку и добавьте сообщение в неё. Следующий фрагмент кода показывает, как добавить новое сообщение в папку.
// 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); |
Добавление нескольких сообщений с поддержкой многоподключения
Вы можете добавить несколько сообщений, используя метод AppendMessages класса ImapClient. Метод AppendMessages принимает список MailMessage и добавляет его в текущую папку, если папка не была предоставлена как параметр. ImapClient также поддерживает режим многоподключения для высоконагруженных операций. Следующий фрагмент кода показывает, как добавить несколько сообщений, используя режим многоподключения.
// 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); |
Перемещение сообщений в другую папку почтового ящика
Aspose.Email для .NET позволяет перемещать сообщения из одной папки почтового ящика в другую с помощью API ImapClient. Метод MoveMessage использует уникальный идентификатор сообщения и имя папки назначения для перемещения сообщения в папку назначения. Следующий фрагмент кода показывает, как перемещать сообщения в другую папку почтового ящика.
// 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 { } | |
} | |
} |
Копирование сообщений в другую папку почтового ящика
API Aspose.Email предоставляет возможность копировать сообщения из одной папки почтового ящика в другую. Он позволяет копировать как одно, так и несколько сообщений, используя методы CopyMessage и CopyMessages. Метод CopyMessages предоставляет возможность копировать несколько сообщений из папки источника почтового ящика в папку назначения. Следующий фрагмент кода показывает, как копировать сообщения в другую папку почтового ящика.
// 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 { } | |
} | |
} |
Работа со специальными папками почтового ящика
Некоторые хранилища IMAP-сообщений включают специальные почтовые ящики, такие как те, которые используются для хранения черновиков или отправленных сообщений. Многие почтовые клиенты позволяют пользователям указывать, куда должны помещаться черновики или отправленные сообщения, но для их настройки требуется, чтобы пользователь знал, какие почтовые ящики сервер зарезервировал для этих целей. Aspose.Email может идентифицировать эти специальные почтовые ящики, используя класс ImapMailboxInfo, чтобы упростить работу с ними. Следующий пример кода демонстрирует, как получить доступ к этим специальным почтовым ящикам, используя класс 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); |