إدارة، نقل، وتنظيم مجلدات IMAP

عمليات المجلد

الحصول على معلومات المجلد

الحصول على معلومات حول المجلدات من خادم IMAP سهل جدًا باستخدام Aspose.Email. استدعِ الـ ListFolders() طريقة الـ ImapClient فئة. تُعيد كائنًا من الـ ImapFolderInfoCollection نوع. تكرار عبر هذه المجموعة والحصول على معلومات حول كل مجلد على حدة في حلقة. الطريقة محملة بأكثر من نسخة. يمكنك تمرير اسم مجلد كمعامل للحصول على قائمة بالمجلدات الفرعية. يوضح المقتطف البرمجي التالي كيفية الحصول على معلومات المجلد من خادم IMAP باستخدام Aspose.Email باستخدام الطريقة الموصوفة في المعلومات.

// 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، وكيفية إعادة تسمية مجلد. يتم تنفيذ كل عملية بسطر واحد من الشيفرة.
// Delete a folder and Rename a folder
client.DeleteFolder("foldername");
client.RenameFolder("foldername", "newfoldername");

العمل مع صناديق البريد ذات الاستخدام الخاص

بعض مخازن رسائل IMAP تشمل صناديق بريد ذات استخدام خاص، مثل تلك المستخدمة لحفظ مسودات الرسائل أو الرسائل المرسلة. many clients allow users to specify where the draft or sent messages should be put, but configuring them requires that the user knows which mailboxes the server has set aside for these purposes. Aspose.Email يمكنه تحديد هذه الصناديق باستخدام ImapMailboxInfo فئة لتسهيل التعامل معها. يُظهر مثال الشيفرة التالي كيفية الوصول إلى هذه صناديق البريد ذات الاستخدام الخاص باستخدام ImapMailboxInfo فئة.

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

عمليات الرسائل داخل المجلدات

إضافة رسالة جديدة إلى مجلد

يمكنك إضافة رسالة جديدة إلى مجلد باستخدام MailMessage و ImapClient فئات. أولاً أنشئ MailMessage كائن عن طريق توفير قيم الموضوع، والمرسل، والمتلقي. ثم الاشتراك في مجلد وإضافة الرسالة إليه. يوضح المقتطف البرمجي التالي كيفية إضافة رسالة جديدة في مجلد.

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

إضافة رسائل متعددة باستخدام MultiConnection

يمكنك إضافة رسائل متعددة باستخدام AppendMessages طريقة مقدمة من ImapClient فئات. الـ AppendMessages طريقة تقبل قائمة من MailMessage ويضيفها إلى المجلد الحالي إذا لم يتم توفير المجلد كمعامل. كما يدعم ImapClient وضع MultiConnection للعمليات ذات الحمل الثقيل. يُظهر مقتطف الشيفرة التالي كيفية إضافة رسائل متعددة باستخدام وضع 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);

نقل الرسائل بين المجلدات

Aspose.Email لـ .NET يتيح نقل الرسائل من مجلد صندوق بريد إلى آخر باستخدام الـ ImapClient API. الـ MoveMessage الطريقة تستخدم المعرف الفريد للرسالة واسم مجلد الوجهة لنقل رسالة إلى المجلد المحدد. يوضح مقطع الشيفرة التالي كيفية نقل الرسائل إلى مجلد بريد آخر.

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

نسخ الرسائل بين المجلدات

توفر Aspose.Email API القدرة على نسخ الرسائل من مجلد صندوق بريد إلى آخر. تتيح نسخ رسالة واحدة أو عدة رسائل باستخدام الـ CopyMessage و CopyMessages طرق. الـ CopyMessages طريقة توفر القدرة على نسخ رسائل متعددة من مجلد المصدر في صندوق بريد إلى مجلد الصندوق البريدي الوجهة. يُظهر مقتطف الشيفرة التالي كيفية نسخ الرسائل إلى مجلد صندوق بريد آخر.

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