EWS और IMAP का उपयोग करके Exchange Server से कनेक्ट करें

Contents
[ ]

Exchange Web Service का उपयोग करके Exchange सर्वर 2007, 2010 और 2013 से कनेक्ट होने के लिए, Aspose.Email प्रदान करता है IEWSClient इंटरफ़ेस जो लागू करता है EWSClient class। यह EWSClient.GetEWSClient मेथड एक … को इंस्टैंशिएट करके लौटाता है। IEWSClient ऑब्जेक्ट जिसका आगे उपयोग एक्सचेंज मेलबॉक्स और अन्य फ़ोल्डरों से संबंधित कार्य करने के लिए किया जाता है। यह लेख दर्शाता है कि कैसे … के ऑब्जेक्ट बनाएँ। IEWSClient.

EWS का उपयोग करके एक्सचेंज सर्वर से कनेक्ट होना

निम्न कोड स्निपेट दिखाता है कि Exchange Web Service (EWS) का उपयोग करके कनेक्शन कैसे स्थापित करें:

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
private static IEWSClient GetExchangeEWSClient()
{
    const string mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
    const string domain = @"";
    const string username = @"username@ASE305.onmicrosoft.com";
    const string password = @"password";
    NetworkCredential credentials = new NetworkCredential(username, password, domain);
    IEWSClient client = EWSClient.GetEWSClient(mailboxUri, credentials);
    return client;
}

EWSClient इनिशियलाइज़ेशन में कस्टम हेडर्स जोड़ें

उन स्थितियों में जहाँ क्लाइंट इनिशियलाइज़ेशन के दौरान विशिष्ट हेडर आवश्यक होते हैं, जैसे EWS में X-AnchorMailbox हेडर, नीचे दिए गए ओवरलोडेड मेथड्स का उपयोग करके कस्टम हेडर्स जोड़ें जब आप एक इंस्टेंस बना रहे हों IEWSClient:

  • IEWSClient GetEWSClient(string mailboxUri, ICredentials credentials, WebProxy proxy, Dictionary headers)

  • async Task GetEwsClientAsync(string mailboxUri, ICredentials credentials, WebProxy proxy, CancellationToken cancellationToken , Dictionary headers)

निम्न कोड नमूना दिखाता है कि कैसे कस्टम HTTP हेडर्स का उपयोग करते हुए IEWSClient को कॉन्फ़िगर और इनिशियलाइज़ किया जाए:

var headers = new Dictionary<string, string>();
headers.Add("X-AnchorMailbox", smtpExampleAddress);
IEWSClient client = EWSClient.GetEWSClient(HttpsExampleCom, new OAuthNetworkCredential("UserName", "Token"), null, headers);

IMAP का उपयोग करके एक्सचेंज सर्वर से कनेक्ट होना

Microsoft Exchange Server मेलबॉक्स में आइटम्स तक पहुँचने के लिए IMAP प्रोटोकॉल का समर्थन करता है। Aspose.Email का उपयोग करें ImapClient IMAP प्रोटोकॉल का उपयोग करके एक्सचेंज सर्वर से कनेक्ट करने के लिए क्लास। अधिक जानकारी के लिए ImapClient क्लास। सबसे पहले, यह सुनिश्चित करें कि आपके एक्सचेंज सर्वर के लिए IMAP सेवाएँ सक्षम हैं:

  1. Control Panel खोलें।
  2. Administrator Tools पर जाएँ, फिर Services।
  3. Microsoft Exchange IMAP4 सेवा की स्थिति जांचें।
  4. यदि यह पहले से चल नहीं रहा है, तो इसे सक्षम/शुरू करें।

निम्नलिखित कोड स्निपेट दिखाता है कि IMAP प्रोटोकॉल का उपयोग करके Microsoft Exchange सर्वर के इनबॉक्स फ़ोल्डर से कैसे कनेक्ट किया जाए और संदेशों की सूची प्राप्त की जाए।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Connect to Exchange Server using ImapClient class
ImapClient imapClient = new ImapClient("ex07sp1", "Administrator", "Evaluation1");
imapClient.SecurityOptions = SecurityOptions.Auto;

// Select the Inbox folder
imapClient.SelectFolder(ImapFolderInfo.InBox);

// Get the list of messages
ImapMessageInfoCollection msgCollection = imapClient.ListMessages();
foreach (ImapMessageInfo msgInfo in msgCollection)
{
    Console.WriteLine(msgInfo.Subject);
}
// Disconnect from the server
imapClient.Dispose();

निम्नलिखित कोड स्निपेट दिखाता है कि SSL का उपयोग कैसे किया जाए।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
public static void Run()
{            
    // Connect to Exchange Server using ImapClient class
    ImapClient imapClient = new ImapClient("ex07sp1", 993, "Administrator", "Evaluation1", new RemoteCertificateValidationCallback(RemoteCertificateValidationHandler));
    imapClient.SecurityOptions = SecurityOptions.SSLExplicit;

    // Select the Inbox folder
    imapClient.SelectFolder(ImapFolderInfo.InBox);

    // Get the list of messages
    ImapMessageInfoCollection msgCollection = imapClient.ListMessages();
    foreach (ImapMessageInfo msgInfo in msgCollection)
    {
        Console.WriteLine(msgInfo.Subject);
    }
    // Disconnect from the server
    imapClient.Dispose();   
}

// Certificate verification handler
private static bool RemoteCertificateValidationHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    return true; // ignore the checks and go ahead
}

IMAP का उपयोग करके एक्सचेंज सर्वर से कनेक्ट होने और प्राप्त करने के बाद IMapMessageInfoCollection, आप प्राप्त कर सकते हैं MessageInfo ऑब्जेक्ट। निम्न कोड स्निपेट दिखाता है कि आप क्रमांक का उपयोग कैसे करें MessageInfo विशिष्ट संदेश को सहेजने के लिए ऑब्जेक्ट।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Select the Inbox folder
imapClient.SelectFolder(ImapFolderInfo.InBox);
// Get the list of messages
ImapMessageInfoCollection msgCollection = imapClient.ListMessages();
foreach (ImapMessageInfo msgInfo in msgCollection)
{
    // Fetch the message from inbox using its SequenceNumber from msgInfo
    MailMessage message = imapClient.FetchMessage(msgInfo.SequenceNumber);

    // Save the message to disc now
    message.Save(dataDir + msgInfo.SequenceNumber + "_out.msg", SaveOptions.DefaultMsgUnicode);
}

प्रीफ़र्ड एन्क्रिप्शन प्रोटोकॉल सेट करना

EWS समर्थित ऑपरेशन्स के लिए HTTPS ट्रांसपोर्ट प्रोटोकॉल का उपयोग करता है। एन्क्रिप्शन SSL/TLS प्रोटोकॉल द्वारा प्रदान किया जाता है। ये प्रोटोकॉल .NET फ्रेमवर्क द्वारा लागू होते हैं और वर्तमान .NET फ्रेमवर्क संस्करण के आधार पर विभिन्न हो सकते हैं।

SSL/TLS संस्करण सेट करने के लिए निम्न कोड का उपयोग करें:

var client = new ImapClient("some.host");
client.SupportedEncryption = EncryptionProtocols.Tls13;

या

var client = new ImapClient("some.host");
client.SetSupportedEncryptionUnsafe(EncryptionProtocols.Tls13);

ध्यान दें, यदि निर्दिष्ट EncryptionProtocol को वर्तमान .NET फ्रेमवर्क संस्करण द्वारा सपोर्ट नहीं किया जाता है, तो SupportedEncryption प्रॉपर्टी एन्क्रिप्शन प्रोटोकॉल को समर्थित स्तर पर डाउनग्रेड करती है और SetSupportedEncryptionUnsafe मेथड एक एक्सेप्शन थ्रो करता है।

मॉडर्न ऑथेंटिकेशन का उपयोग करके Exchange Server से कनेक्ट करें

नए Microsoft 365/Azure टेनेंट्स के लिए मॉडर्न ऑथेंटिकेशन अब डिफ़ॉल्ट रूप से सक्रिय है क्योंकि यह प्रोटोकॉल डिप्रीकेटेड बेसिक ऑथेंटिकेशन से अधिक सुरक्षित है।

मॉडर्न ऑथेंटिकेशन Active Directory Authentication Library और OAuth 2.0 पर आधारित है। यह समय‑सीमित टोकन उपयोग करता है, और एप्लिकेशन उपयोगकर्ता क्रेडेंशियल्स संग्रहीत नहीं करते।

पूर्वापेक्षित सेटिंग्स

मॉडर्न ऑथेंटिकेशन का उपयोग करने के लिए सुनिश्चित करें कि यह सक्षम है। हालांकि, 1 अगस्त 2017 से पहले बनाए गए टेनेंट्स में मॉडर्न ऑथेंटिकेशन डिफ़ॉल्ट रूप से बंद है। इसमें Microsoft 365 एडमिन सेंटर, Settings > Org Settings > Modern Authentication पर जाएँ। दिखाई देने वाले Modern authentication फ़्लायआउट में आप उन प्रोटोकॉल को पहचान सकते हैं जो अब बेसिक ऑथेंटिकेशन की आवश्यकता नहीं रखते। Azure में नए Microsoft365 टेनेंट्स के लिए, सभी एप्लिकेशन के लिए बेसिक ऑथेंटिकेशन डिफ़ॉल्ट रूप से बंद है। इसलिए यह टेक्स्ट इस सेक्शन में दिखाया जाएगा।

आपके संगठन में सुरक्षा डिफ़ॉल्ट्स सक्षम हैं, जिसका अर्थ है कि Exchange Online के लिए मॉडर्न ऑथेंटिकेशन आवश्यक है, और बेसिक ऑथेंटिकेशन कनेक्शन ब्लॉक हैं। > यहाँ कोई भी सेटिंग बदलने से पहले आपको Azure पोर्टल में सुरक्षा डिफ़ॉल्ट्स को बंद करना होगा।

आप टेनेंट के लिए बेसिक ऑथ सपोर्ट सक्षम कर सकते हैं Azure पोर्टल में जाएँ, Azure Active Directory > Properties > Manage Security defaults > Enable Security defaults > No पर क्लिक करें। अधिक जानकारी के लिए देखें Microsoft डॉक्यूमेंटेशन लेख.

Azure Active Directory के साथ ऐप रजिस्ट्री

Azure Active Directory के साथ ऐप रजिस्ट्री करना आवश्यक है। दो प्रकार की परमिशन होती हैं जो आपके ऐप के साथ मेलबॉक्स तक पहुँच के लिए उपयोग की जा सकती हैं। अपने द्वारा बनाए जा रहे ऐप के अनुसार विशिष्ट परमिशन प्रकार चुनें:

  • ऐप्स जो डेलिगेटेड परमिशन उपयोग करते हैं, उनके पास साइन‑इन किया हुआ उपयोगकर्ता होता है। दूसरे शब्दों में, जब आप सेवा से कनेक्ट होते हैं, तो उपयोगकर्ता नाम और पासवर्ड के लिए एक डायलॉग विंडो दिखती है। ऐप को साइन‑इन उपयोगकर्ता से अधिक विशेषाधिकार नहीं मिल सकते।
  • ऐप्स जो ऐप्लिकेशन परमिशन उपयोग करते हैं, बिना साइन‑इन किए उपयोगकर्ता के चलते हैं। उदाहरण के लिए, ये ऐसे ऐप्स हैं जो बैकग्राउंड सर्विसेज या डेमॉन्स के रूप में चलते हैं। केवल एक प्रशासक ही एप्लिकेशन परमिशन्स को सहमति दे सकता है।

अतिरिक्त रूप से, देखें Microsoft डॉक्यूमेंटेशन लेख अधिक जानकारी के लिए।

रजिस्ट्रेशन प्रक्रिया चयनित अनुमति प्रकार पर निर्भर करती है। अपना ऐप रजिस्टर करने के लिए देखें Microsoft डॉक्यूमेंटेशन लेख.

EWSClient के साथ मॉडर्न ऑथेंटिकेशन का उपयोग करें

एप्लिकेशन को रजिस्टर्ड करने के बाद, हम कोड लिखने पर ध्यान केंद्रित कर सकते हैं, जो निम्नलिखित भागों से बनेगा:

  • ऑथराइजेशन टोकन प्राप्त करें।
  • टोकन का उपयोग करके प्रमाणीकरण करें।

ऑथराइजेशन टोकन प्राप्त करें

टोकन प्राप्त करने के लिए हम उपयोग करेंगे .NET के लिए Microsoft Authentication Library (MSAL).

ऑथराइजेशन टोकन प्राप्त करने के चरण निम्नलिखित हैं।

  • जोड़ें Microsoft.Identity.Client nuget पैकेज जिसमें MSAL.NET के बाइनरी शामिल हैं।
  • क्रेडेंशियल्स को संग्रहीत करने के लिए AccessParameters क्लास बनाएँ。
  • एक मेथड बनाएं जो एक्सेस पैरामीटर लेता हो और MSAL.NET का उपयोग करके एक्सेस टोकन प्राप्त करे।

निम्नलिखित कोड नमूने चुनी गई ऑथ प्रकार पर निर्भर करेंगे।

डेलिगेटेड ऑथ के साथ टोकन प्राप्त करें

public class AccessParameters
{
    public string TenantId { get; set; }
    public string ClientId { get; set; }
    public string RedirectUri { get; set; } = "http://localhost";
    public string[] Scopes { get; set; } = { "https://outlook.office365.com/EWS.AccessAsUser.All" };
}

public static async Task<string> GetAccessToken(AccessParameters accessParameters)
{
    var pca = PublicClientApplicationBuilder
                            .Create(accessParameters.ClientId)
                            .WithTenantId(accessParameters.TenantId)
                            .WithRedirectUri(ccessParameters.RedirectUri)
                            .Build();

    var result = await pca.AcquireTokenInteractive(accessParameters.Scopes)
        .WithUseEmbeddedWebView(false)
        .ExecuteAsync();

    return result.AccessToken;
}

ऐप ऑथ के साथ टोकन प्राप्त करें

public class AccessParameters
{
    public string TenantId { get; set; }
    public string ClientId { get; set; }
    public string ClientSecret { get; set; }
    public string[] Scopes { get; set; } = { "https://outlook.office365.com/.default" };
}

public static async Task<string> GetAccessToken(AccessParameters accessParameters)
{
    var cca = ConfidentialClientApplicationBuilder
        .Create(accessParameters.ClientId)
        .WithClientSecret(accessParameters.ClientSecret)
        .WithTenantId(accessParameters.TenantId)
        .Build();

    var result = await cca.AcquireTokenForClient(accessParameters.Scopes).ExecuteAsync();

    return result.AccessToken;
}

टोकन के साथ प्रमाणीकरण

उसके बाद, जब हमने सफलतापूर्वक टोकन प्राप्त कर लिया, तो आइए इसे इनिशियलाइज़ करें EwsClient.

डेलिगेटेड ऑथ के साथ टोकन का उपयोग

NetworkCredential credentials = new OAuthNetworkCredential(accessToken);

using var client = EWSClient.GetEWSClient("https://outlook.office365.com/EWS/Exchange.asmx", credentials);

ऐप ऑथ के साथ टोकन का उपयोग

// Use Microsoft365 username and access token
NetworkCredential credentials = new OAuthNetworkCredential(username, accessToken);

using var client = EWSClient.GetEWSClient("https://outlook.office365.com/EWS/Exchange.asmx", credentials);

IMAP, POP या SMTP क्लाइंट्स के साथ मॉडर्न ऑथेंटिकेशन का उपयोग करें

ऐप्लिकेशन परमिशन्स के माध्यम से IMAP, POP, SMTP एक्सेस समर्थित नहीं है। दूसरे शब्दों में, केवल डेलिगेटेड ऑथेंटिकेशन समर्थित है।

Azure Active Directory के साथ ऐप रजिस्ट्री प्रक्रिया परिभाषित है ऊपर.

Microsoft 365 एडमिन सेंटर में IMAP, POP, SMTP AUTH को सक्षम या अक्षम करें

  • खोलें Microsoft 365 एडमिन सेंटर और Users > Active users पर जाएँ।
  • उपयोगकर्ता चुनें, और दिखाई देने वाले फ़्लायआउट में Mail पर क्लिक करें।
  • Email apps सेक्शन में, Manage email apps पर क्लिक करें।
  • IMAP, POP, Authenticated SMTP सेटिंग जाँचें: अनचेक्ड = डिसेबल्ड, चेक्ड = एनेबल्ड।
  • Save changes पर क्लिक करें।

टोकन सर्वर से ऑथेंटिकेशन टोकन प्राप्त करें

पूरे स्कोप्स, जिसमें Outlook रिसोर्स URLs शामिल हैं, निर्दिष्ट करना सुनिश्चित करें।

IMAP: https://outlook.office.com/IMAP.AccessAsUser.All POP: https://outlook.office.com/POP.AccessAsUser.All SMTP: https://outlook.office.com/SMTP.Send

टोकन प्राप्त करने के लिए हम उपयोग करेंगे .NET के लिए Microsoft Authentication Library (MSAL).

ऑथराइजेशन टोकन प्राप्त करने के चरण निम्नलिखित हैं।

  • जोड़ें Microsoft.Identity.Client nuget पैकेज जिसमें MSAL.NET के बाइनरी शामिल हैं।
  • क्रेडेंशियल्स को संग्रहीत करने के लिए AccessParameters क्लास बनाएँ。
  • एक मेथड बनाएं जो एक्सेस पैरामीटर लेता हो और MSAL.NET का उपयोग करके एक्सेस टोकन प्राप्त करे।
public class AccessParameters
{
    public string TenantId { get; set; }
    public string ClientId { get; set; }
    public string RedirectUri { get; set; } = "http://localhost";
    public string[] Scopes { get; set; } = { 
        "https://outlook.office.com/IMAP.AccessAsUser.All", 
        "https://outlook.office.com/SMTP.Send" };
}

public static async Task<string> GetAccessToken(AccessParameters accessParameters)
{
    var pca = PublicClientApplicationBuilder
                            .Create(accessParameters.ClientId)
                            .WithTenantId(accessParameters.TenantId)
                            .WithRedirectUri(ccessParameters.RedirectUri)
                            .Build();

    var result = await pca.AcquireTokenInteractive(accessParameters.Scopes)
        .WithUseEmbeddedWebView(false)
        .ExecuteAsync();

    return result.AccessToken;
}

टोकन के साथ प्रमाणीकरण

उसके बाद, जब हमने सफलतापूर्वक टोकन प्राप्त कर लिया, तो आइए इसे इनिशियलाइज़ करें ImapClient.

var imapClient = new ImapClient(
    "outlook.office365.com", 
    993, 
    username, 
    accessToken, 
    true);

इसी प्रकार, SmtpClient इनिशियलाइज़ेशन इस प्रकार दिखेगा।

var smtpClient = new SmtpClient(
    "smtp.office365.com",
    587, 
    username,
    accessToken, 
    true);

क्लाइंट रिक्वेस्ट ID लौटाएँ

यह ReturnClientRequestId आपकी सुविधा के लिए EWSClient में एक प्रॉपर्टी जोड़ी गई है जिससे यह निर्दिष्ट किया जा सके कि क्या क्लाइंट रिक्वेस्ट ID को Exchange Web Services (EWS) कॉल्स की प्रतिक्रिया में वापस किया जाना चाहिए। क्लाइंट रिक्वेस्ट ID एक अद्वितीय पहचानकर्ता है जिसे आप अपने एप्लिकेशन से भेजे जाने वाले प्रत्येक EWS अनुरोध के लिए सेट कर सकते हैं। इसे सेट करके ReturnClientRequestId प्रॉपर्टी को true सेट करने पर, आप संकेत देते हैं कि क्लाइंट अनुरोध ID को EWS सर्वर के उत्तर में शामिल किया जाना चाहिए। यह उन स्थितियों में उपयोगी हो सकता है जहाँ कई अनुरोध असिंक्रोनस रूप से किए और प्रोसेस किए जाते हैं, जिससे अनुरोधों और उत्तरों को ट्रैक और सहसंबंधित किया जा सके।

निम्न कोड स्निपेट दिखाता है कि प्रॉपर्टी का उपयोग कैसे किया जा सकता है:

using (IEWSClient client = TestUtil.CreateEWSClient(user))
{
   // Client will create random id and pass it to the server.
   // The server should include this id in request-id header of all responses.
   client.ReturnClientRequestId = true;
   
   client.LogFileName = "ews.log";
   client.GetMailboxInfo();
}

EWS अनुरोधों में X-AnchorMailbox और अन्य हेडर्स जोड़ें

Aspose.Email API एक्सचेंज अनुरोधों में हेडर्स जोड़ने की अनुमति देता है। यह विभिन्न उद्देश्यों के लिए विभिन्न हेडर्स को EWS अनुरोधों में जोड़ने के लिए उपयोग किया जा सकता है। एक उदाहरण है X-AnchorMailbox हेडर जोड़ना, जिसका उपयोग एक्सचेंज सर्वर पर थ्रॉटलिंग समस्याओं को प्रबंधित करने के लिए किया जाता है। The AddHeader विधि IEWSClient निम्न कोड स्निपेट में दिखाए अनुसार EWS अनुरोधों में हेडर्स जोड़ने के लिए उपयोग किया जाता है।

अमान्य या समाप्त SSL प्रमाणपत्र को अनदेखा या बायपास करें

Aspose.Email दोनों तरीकों का उपयोग करके Exchange Server पर SSL प्रमाणपत्रों को संभाल सकता है ExchangeClient और EWSClient क्लासेस। यदि SSL प्रमाणपत्र समाप्त हो गया है या अमान्य हो गया है, तो Aspose.Email अमान्य SSL प्रमाणपत्र के कारण अपवाद फेंकता है। नीचे दिए गए कोड में उपयोग की गई विधि का उपयोग करके उन्हें अनदेखा करके ऐसे SSL प्रमाणपत्र त्रुटियों से बचें। अपने main() या init() मेथड में कॉलबैक हैंडलर पंजीकृत करें और नीचे दिए गए मेथड को क्लास का सदस्य के रूप में जोड़ें।