ईमेल्स पर असिंक्रोनस IMAP ऑपरेशन्स कैसे करें

ImapClient के साथ असिंक्रोनस ऑपरेशन्स

संदेशों के साथ काम करना Aspose.Email का उपयोग करके असिंक्रोनस रूप से किया जा सकता है। ImapClient. यह लेख मेलबॉक्स से संदेशों को असिंक्रोनस रूप से पुनः प्राप्त करने को दिखाता है। यह लेख यह भी दिखाता है कि खोज मानदंड प्रदान करके संदेशों की सूची कैसे बनाएं उपयोग करके MailQuery. यह अलग से दिखाया जाएगा कि टास्क-आधारित असिंक्रोनस पैटर्न द्वारा शुरू किए गए ईमेल संदेश संचालन को कैसे रोकें (TAP) विधि।

संदेशों को असिंक्रोनस रूप से प्राप्त करें

निम्नलिखित कोड स्निपेट दिखाता है कि संदेशों को असिंक्रोनस रूप से कैसे प्राप्त किया जाए।

MailQuery के साथ संदेशों को असिंक्रोनस रूप से सूचीबद्ध करें

यह MailQuery क्लास को असिंक्रोनस रूप से निर्दिष्ट सूची के संदेशों को पुनः प्राप्त करने के लिए खोज मानदंड निर्दिष्ट करने हेतु उपयोग किया जा सकता है, जैसा कि निम्नलिखित कोड नमूने में दिखाया गया है।

संदेश असिंक्रोनस रूप से भेजें

ईमेल्स को असिंक्रोनस रूप से भेजना बहुत सुविधाजनक है, क्योंकि प्रक्रिया प्रोग्राम या थ्रेड के निष्पादन को ब्लॉक नहीं करती। अन्य कार्यों की प्रतीक्षा करने के बजाय, प्रोग्राम बैकग्राउंड में ईमेल भेजते हुए चल सकता है।

निम्नलिखित सुविधाएँ आपके प्रोजेक्ट में असिंक्रोनस भेजने को लागू करने में मदद करेंगी:

  • IAsyncImapClient - इंटरनेट मैसेज एक्सेस प्रोटोकॉल (IMAP) का उपयोग करके एप्लिकेशन को संदेशों तक पहुँचने और उन्हें संशोधित करने की अनुमति देता है।

  • ImapClient.CreateAsync - Aspose.Email.Clients.Imap.ImapClient क्लास का एक नया इंस्टेंस बनाता है

नीचे दिया गया कोड उदाहरण दर्शाता है कि बैकग्राउंड में संदेशों को कैसे सूचीबद्ध किया जाए:

// Authenticate the client to obtain necessary permissions
static readonly string tenantId = "YOU_TENANT_ID";
static readonly string clientId = "YOU_CLIENT_ID";
static readonly string redirectUri = "http://localhost";
static readonly string username = "username";
static readonly string[] scopes = { "https://outlook.office.com/IMAP.AccessAsUser.All" };

// Use the ImapAsync method for asynchronous operations
static async Task Main(string[] args)
{
    await ImapAsync();
    Console.ReadLine();
}

// Establish the connection with the server
// Create an instance of the ImapClient asynchronously using the CreateAsync method
// Select the Inbox folder using SelectFolderAsync method to complete and fetch the list of email messages asynchronously using the ListMessagesAsync method.
static async Task ImapAsync()
{
    var tokenProvider = new TokenProvider(clientId, tenantId, redirectUri, scopes);
    var client = ImapClient.CreateAsync("outlook.office365.com", username, tokenProvider, 993).GetAwaiter().GetResult();
    await client.SelectFolderAsync(ImapFolderInfo.InBox);
    var messages = await client.ListMessagesAsync();
    Console.WriteLine("Messages :" + messages.Count);
}

// Token provider implementation
public class TokenProvider : IAsyncTokenProvider
{
    private readonly PublicClientApplicationOptions _pcaOptions;
    private readonly string[] _scopes;

    public TokenProvider(string clientId, string tenantId, string redirectUri, string[] scopes)
    {
        _pcaOptions = new PublicClientApplicationOptions
        {
            ClientId = clientId,
            TenantId = tenantId,
            RedirectUri = redirectUri
        };

        _scopes = scopes;
    }

    public async Task<OAuthToken> GetAccessTokenAsync(bool ignoreExistingToken = false, CancellationToken cancellationToken = default)
    {

        var pca = PublicClientApplicationBuilder
            .CreateWithApplicationOptions(_pcaOptions).Build();

        try
        {
            var result = await pca.AcquireTokenInteractive(_scopes)
                .WithUseEmbeddedWebView(false)
                .ExecuteAsync(cancellationToken);

            return new OAuthToken(result.AccessToken);
        }
        catch (MsalException ex)
        {
            Console.WriteLine($"Error acquiring access token: {ex}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex}");
        }

        return null;
    }

    public void Dispose()
    {

    }
}

असिंक्रोनस ऑपरेशन्स का प्रबंधन

TAP मेथड को बाधित करें

.NET Framework 4.5 से शुरू करके, आप TAP मॉडल के अनुसार लागू असिंक्रोनस मेथड्स का उपयोग कर सकते हैं। नीचे दिया गया कोड स्निपेट दिखाता है कि टास्क-आधारित असिंक्रोनस पैटर्न मेथड जिसका नाम है, का उपयोग करके कई संदेश कैसे जोड़ें। AppendMessagesAsync और फिर कुछ देर के बाद इस प्रक्रिया को बाधित करें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET

List<MailMessage> mailMessages = new List<MailMessage>();

// create mail messages
for (int i = 0; i < 100; i++)
    mailMessages.Add(new MailMessage(senderEmail, receiverEmail, $"Message #{i}", "Text"));

using (ImapClient client = new ImapClient(host, 993, senderEmail, password, SecurityOptions.SSLImplicit))
{
    CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
    AutoResetEvent autoResetEvent = new AutoResetEvent(false);
    Exception exception = null;

    ThreadPool.QueueUserWorkItem(delegate
    {
        try
        {
            // start uploading the messages
            var task = client.AppendMessagesAsync(mailMessages, cancellationTokenSource.Token);
            AppendMessagesResult appendMessagesResult = task.GetAwaiter().GetResult();
            Console.WriteLine("All messages have been appended.");
        }
        catch (Exception e)
        {
            exception = e;
        }
        finally
        {
            autoResetEvent.Set();
        }
    });

    Thread.Sleep(5000);

    // stop uploading the messages
    cancellationTokenSource.Cancel();
    autoResetEvent.WaitOne();

    foreach (MailMessage mailMessage in mailMessages)
        mailMessage.Dispose();

    if (exception is OperationCanceledException)
        Console.WriteLine("Operation has been interrupted: " + exception.Message);
}

असिंक्रोनस ऑपरेशन्स को रद्द करें

कभी-कभी आपको असिंक्रोनस ऑपरेशन्स को रोकने की जरूरत पड़ सकती है। इस उद्देश्य के लिए हमारी लाइब्रेरी CancellationToken पैरामीटर के उपयोग से असिंक्रोनस ऑपरेशन्स को रद्द करने की सुविधा देती है। जब आप किसी असिंक्रोनस मेथड को कॉल करते हैं जो रद्दीकरण को सपोर्ट करता है, तो आप एक CancellationToken इंस्टेंस को पैरामीटर के रूप में पास कर सकते हैं। CancellationToken का उपयोग ऑपरेशन के रद्दीकरण को संकेत करने और नियंत्रित करने के लिए किया जाता है।

रद्दीकरण सक्षम करने के लिए, आपको पहले एक CancellationTokenSource इंस्टेंस बनाना होगा जो CancellationToken प्रदान करता है। फिर, CancellationToken को असिंक्रोनस मेथड में पास करें, जिससे वह निष्पादन के दौरान रद्दीकरण अनुरोधों की जाँच कर सके।

यहाँ एक उदाहरण है जो CancellationToken का उपयोग करके रद्द करना दर्शाता है:

CancellationTokenSource tokenSource = new CancellationTokenSource();
AppendMessagesResult appendMessagesResult = null;
AutoResetEvent autoResetEvent = new AutoResetEvent(false);
ThreadPool.QueueUserWorkItem(delegate(object state)
    {
        try
        {
            appendMessagesResult = imapClient.AppendMessagesAsync(mmList, tokenSource.Token).GetAwaiter().GetResult();
        }
        catch (Exception ex)
        {

        }
        finally
        {
            autoResetEvent.Set();
        }
    });

tokenSource.Cancel();
autoResetEvent.WaitOne();