C# में IMAP कनेक्शन स्थापित करने का तरीका

IMAP सर्वर एक्सटेंशन सूचीबद्ध करना

Aspose.Email का ImapClient आपको सर्वर द्वारा समर्थित एक्सटेंशन (जैसे IDLE, UNSELECT, QUOTA आदि) प्राप्त करने देता है। यह क्लाइंट द्वारा किसी विशेष कार्यक्षमता के उपयोग से पहले एक्सटेंशन की उपलब्धता पहचानने में मदद करता है। GetCapabilities() method समर्थित एक्सटेंशन प्रकारों को स्ट्रिंग एरे के रूप में लौटाता है। नीचे दिया गया कोड स्निपेट दिखाता है कि एक्सटेंशन कैसे प्राप्त किए जाएँ।

स्टैंडर्ड IMAP कनेक्शन

यह ImapClient क्लास एप्लिकेशन को IMAP प्रोटोकॉल का उपयोग करके IMAP मेलबॉक्स प्रबंधित करने की अनुमति देती है। ImapClient क्लास का उपयोग IMAP मेल सर्वरों से कनेक्ट करने और IMAP ईमेल फ़ोल्डरों में ईमेल प्रबंधित करने के लिए किया जाता है। IMAP सर्वर से कनेक्ट करने के लिए

  1. का एक इंस्टेंस बनाएं ImapClient क्लास।
  2. होस्टनाम, उपयोगकर्ता नाम और पासवर्ड को निर्दिष्ट करें ImapClient कन्स्ट्रक्टर.

ध्यान दें, पासवर्ड प्रतिबंध सर्वर की आवश्यकताओं को पूरा करना चाहिए। ईमेल क्लाइंट पासवर्ड प्रतिबंध नहीं जोड़ता है।

एक बार ImapClient इंस्टेंस शुरू किया जाता है, इस इंस्टेंस का उपयोग करके अगले किसी भी ऑपरेशन कॉल पर सर्वर से कनेक्ट हो जाएगा। नीचे दिया गया कोड स्निपेट दिखाता है कि ऊपर बताए गए चरणों का उपयोग करके IMAP सर्वर से कैसे कनेक्ट करें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Create an imapclient with host, user and password
ImapClient client = new ImapClient("localhost", "user", "password");

SSL-सक्षम IMAP कनेक्शन

IMAP सर्वर से कनेक्ट करना चार सरल चरणों में IMAP सर्वर से कनेक्ट करने का विवरण दिया गया है:

  1. का एक इंस्टेंस बनाएं ImapClient क्लास।
  2. होस्टनाम, उपयोगकर्ता नाम और पासवर्ड निर्दिष्ट करें।
  3. पोर्ट निर्दिष्ट करें।
  4. सुरक्षा विकल्प निर्दिष्ट करें।

SSL सक्षम IMAP सर्वर से कनेक्ट करने की प्रक्रिया समान है लेकिन इसके लिए कुछ अतिरिक्त प्रॉपर्टीज़ सेट करनी होती हैं:

निम्नलिखित कोड स्निपेट दिखाता है कैसे

  1. उपयोगकर्ता नाम, पासवर्ड और पोर्ट सेट करें।
  2. सुरक्षा विकल्प सेट करें।
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Create an instance of the ImapClient class
ImapClient client = new ImapClient("imap.domain.com", 993, "user@domain.com", "pwd");
            
// Set the security mode to implicit
client.SecurityOptions = SecurityOptions.SSLImplicit;

प्रॉक्सी कनेक्शन सेटअप

प्रॉक्सी के माध्यम से सर्वर से कनेक्ट होना

प्रॉक्सी सर्वर सामान्यतः बाहरी दुनिया से संचार करने के लिए उपयोग किए जाते हैं। ऐसे मामलों में, मेल क्लाइंट इंटरनेट पर संचार करने के लिए प्रॉक्सी पता निर्दिष्ट किए बिना सक्षम नहीं होते। Aspose.Email SOCKS प्रॉक्सी प्रोटोकॉल के संस्करण 4, 4a और 5 का समर्थन प्रदान करता है। यह लेख प्रॉक्सी मेल सर्वर का उपयोग करके मेलबॉक्स तक पहुंचने का एक कार्यशील उदाहरण प्रदान करता है। प्रॉक्सी सर्वर के माध्यम से मेलबॉक्स तक पहुंचने के लिए:

  1. आरंभ करें SocksProxy आवश्यक जानकारी के साथ, अर्थात प्रॉक्सी पता, पोर्ट, और SOCKS संस्करण।
  2. आरंभ करें ImapClient होस्ट पता, उपयोगकर्ता नाम, पासवर्ड और अन्य सेटिंग्स के साथ।
  3. क्लाइंट का सेट करें SocksProxy क्लाइंट की प्रॉपर्टी को SocksProxy ऊपर बनाया गया ऑब्जेक्ट।

निम्नलिखित कोड स्निपेट दिखाता है कि प्रॉक्सी सर्वर के माध्यम से मेलबॉक्स कैसे प्राप्त किया जाए।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Connect and log in to IMAP and set SecurityOptions
ImapClient client = new ImapClient("imap.domain.com", "username", "password");
client.SecurityOptions = SecurityOptions.Auto;
            
string proxyAddress = "192.168.203.142"; // proxy address
int proxyPort = 1080; // proxy port
SocksProxy proxy = new SocksProxy(proxyAddress, proxyPort, SocksVersion.SocksV5);

// Set the proxy
client.Proxy = proxy;
           
try
{
    client.SelectFolder("Inbox");
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

HTTP प्रॉक्सी के माध्यम से सर्वर से कनेक्ट होना

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
HttpProxy proxy = new HttpProxy("18.222.124.59", 8080);
using (ImapClient client = new ImapClient("imap.domain.com", "username", "password"))
{
    client.Proxy = proxy;
    client.SelectFolder("Inbox");
}

केवल‑पढ़ने मोड कनेक्शन

यह ImapClient क्लास एक प्रदान करता है ReadOnly प्रॉपर्टी जो true पर सेट होने पर इंगित करती है कि मेलबॉक्स की स्थायी स्थिति में कोई परिवर्तन नहीं किया जाना चाहिए। निम्नलिखित कोड नमूना दर्शाता है उपयोग ImapClient.ReadOnly प्रॉपर्टी। यह न पढ़े गए संदेशों की गिनती प्राप्त करता है, फिर एक संदेश को फ़ेच करता है और फिर पढ़ने-केवल मोड में फिर से न पढ़े गए संदेशों की गिनती प्राप्त करता है। न पढ़े गए संदेशों की गिनती समान रहती है, जिससे पता चलता है कि मेलबॉक्स की स्थायी स्थिति नहीं बदली गई।

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

ImapQueryBuilder imapQueryBuilder = new ImapQueryBuilder();
imapQueryBuilder.HasNoFlags(ImapMessageFlags.IsRead); /* get unread messages. */
MailQuery query = imapQueryBuilder.GetQuery();

imapClient.ReadOnly = true;
imapClient.SelectFolder("Inbox");
ImapMessageInfoCollection messageInfoCol = imapClient.ListMessages(query);
Console.WriteLine("Initial Unread Count: " + messageInfoCol.Count());
if (messageInfoCol.Count() > 0)
{
    imapClient.FetchMessage(messageInfoCol[0].SequenceNumber);

    messageInfoCol = imapClient.ListMessages(query);
    // This count will be equal to the initial count
    Console.WriteLine("Updated Unread Count: " + messageInfoCol.Count());
}
else
{
    Console.WriteLine("No unread messages found");
}

CRAM-MD5 प्रमाणीकरण सेटअप

सुरक्षित प्रमाणीकरण और ईमेल सर्वर तक पहुँच के लिए, Aspose.Email for .NET CRAM-MD5 प्रमाणीकरण विधि प्रदान करता है। नीचे दिया गया कोड स्निपेट दिखाएगा कि यह ImapClient के साथ कैसे काम करता है:

imapClient.AllowedAuthentication = ImapKnownAuthenticationType.CramMD5;

IMAP ऑपरेशन्स के लिए टाइमआउट सेट करना

प्रत्येक मेल ऑपरेशन को कई कारकों (नेटवर्क देरी, डेटा आकार, सर्वर प्रदर्शन आदि) के आधार पर कुछ समय लगता है। आप सभी मेल ऑपरेशनों के लिए टाइमआउट सेट कर सकते हैं। नीचे दिया गया कोड उदाहरण दिखाता है कि इसे कैसे किया जाए उपयोग करके टाइमआउट प्रॉपर्टी। नोट: आपको बड़े मान सेट नहीं करने चाहिए ताकि आपके एप्लिकेशन में लंबी प्रतीक्षा न हो।

ऑपरेशन टाइमआउट कॉन्फ़िगर करें

using (ImapClient imapClient = new ImapClient("host", 993, "username", "password", SecurityOptions.SSLImplicit))
{
    imapClient.Timeout = 60000; // 60 seconds

    // some code...
}

Greeting Timeout को प्रतिबंधित करें

IMAP क्लाइंट स्वचालित मोड का उपयोग करके कनेक्शन स्थापित कर सकता है। इस मोड में, IMAP क्लाइंट सभी संभावित कनेक्शन पैरामीटरों को आज़माता है जब तक कि कनेक्शन स्थापित न हो जाए। सही कनेक्शन के मामले में, IMAP सर्वर क्लाइंट को एक ग्रिटींग स्ट्रिंग भेजता है। सर्वर इम्प्लिसिट या एक्सप्लिसिट (START TLS) SSL/TLS कनेक्शन प्रारम्भ कर सकते हैं। यदि कनेक्शन मोड मेल नहीं खाता (जैसे, सर्वर इम्प्लिसिट SSL कनेक्शन की प्रतीक्षा कर रहा है जबकि क्लाइंट गैर-सुरक्षित या एक्सप्लिसिट SSL कनेक्शन स्थापित करने की कोशिश करता है), तो सर्वर ग्रिटींग स्ट्रिंग नहीं भेजेगा और उपयोगकर्ता को टाइमआउट तक प्रतीक्षा करनी पड़ेगी, जिसके बाद क्लाइंट अगला कनेक्शन विकल्प आज़माता है। इस समस्या से बचने के लिए GreetingTimeout प्रॉपर्टी पेश की गई है। यह प्रॉपर्टी ग्रिटींग स्ट्रिंग के टाइमआउट को सेट करने की अनुमति देती है, जिससे स्वचालित कनेक्शन स्थापित करने का समय कम हो जाता है।

using (ImapClient client = new ImapClient("localhost", 993, "username", "password"))
{
    client.GreetingTimeout = 4000;
    client.SelectFolder(ImapFolderInfo.InBox);
}

IMAP के साथ क्रिप्टोग्राफिक प्रोटोकॉल का उपयोग

Aspose.Email संचार सुरक्षा प्रदान करने के लिए SSL (पुराना) और TLS क्रिप्टोग्राफिक प्रोटोकॉल को समर्थन देता है। आप अपने अनुप्रयोग और मेल सर्वर के बीच डेटा आदान-प्रदान को सुरक्षित करने के लिए क्रिप्टोग्राफिक एन्क्रिप्शन सक्षम कर सकते हैं।

नोट: आपको केवल उन प्रोटोकॉल संस्करणों को सेट करना चाहिए जो .NET Framework द्वारा समर्थित हैं। यदि क्रिप्टोग्राफिक प्रोटोकॉल के कुछ संस्करण आपकी वर्तमान .NET Framework संस्करण द्वारा समर्थित नहीं हैं, तो उन्हें अनदेखा और छोड़ा जाएगा। इस स्थिति में, अपवाद उत्पन्न नहीं होंगे। कृपया उपयोग करें SetSupportedEncryptionUnsafe विधि यदि आप प्रोटोकॉल को बिना किसी संगतता जांच के सेट करना चाहते हैं।

निचे दिया गया कोड उदाहरण दर्शाता है कि TLS 1.3 को कैसे सेट करें ImapClient क्लास इंस्टेंस।

using (ImapClient imapClient = new ImapClient("host", 993, "username", "password", SecurityOptions.SSLImplicit))
{
    imapClient.SupportedEncryption = EncryptionProtocols.Tls13;

    // some code...
}

यदि निर्दिष्ट एन्क्रिप्शन प्रोटोकॉल वर्तमान .NET Framework संस्करण में समर्थित नहीं है, तो व्यवहार में अंतर यह है कि SetSupportedEncryptionUnsafe विधि और SupportedEncryption प्रॉपर्टी निम्नलिखित है:

  • यदि SupportedEncryption प्रॉपर्टी उपयोग होने पर, ईमेल क्लाइंट एन्क्रिप्शन प्रोटोकॉल को समर्थित स्तर तक घटा देता है।
  • यदि SetSupportedEncryptionUnsafe विधि उपयोग की जाने पर, ईमेल क्लाइंट अपवाद फेंकता है।

IMAP IDLE कमांड का उपयोग

Aspose.Email API’s ImapClient सर्वर से कनेक्शन खोलने और एक ईमेल संदेश के आगमन की प्रतीक्षा करने की क्षमता प्रदान करता है। इससे लगातार सर्वर को पोलिंग करने की आवश्यकता नहीं रहती। नीचे दिया गया कोड स्निपेट Aspose.Email लाइब्रेरी का उपयोग करके IMAP इनबॉक्स को नए और हटाए गए संदेशों के लिए मॉनिटर करने तथा इन इवेंट्स के आधार पर विशिष्ट क्रियाएँ करने का प्रदर्शन करता है:

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Connect and log in to IMAP 
ImapClient client = new ImapClient("imap.domain.com", "username", "password");

ManualResetEvent manualResetEvent = new ManualResetEvent(false);
ImapMonitoringEventArgs eventArgs = null;
client.StartMonitoring(delegate(object sender, ImapMonitoringEventArgs e)
{
    eventArgs = e;
    manualResetEvent.Set();
});
Thread.Sleep(2000);
SmtpClient smtpClient = new SmtpClient("exchange.aspose.com", "username", "password");
smtpClient.Send(new MailMessage("from@aspose.com", "to@aspose.com", "EMAILNET-34875 - " + Guid.NewGuid(), "EMAILNET-34875 Support for IMAP idle command"));
manualResetEvent.WaitOne(10000);
manualResetEvent.Reset();
Console.WriteLine(eventArgs.NewMessages.Length);
Console.WriteLine(eventArgs.DeletedMessages.Length);
client.StopMonitoring("Inbox");
smtpClient.Send(new MailMessage("from@aspose.com", "to@aspose.com", "EMAILNET-34875 - " + Guid.NewGuid(), "EMAILNET-34875 Support for IMAP idle command"));
manualResetEvent.WaitOne(5000);

नीचे दिया गया कोड नमूना दर्शाता है कि नए ईमेल संदेशों के लिए असिंक्रोनस मॉनिटरिंग कैसे सेटअप करें:

var client = = new ImapClient("imap.domain.com", "username", "password");

//anySuccess is a flag to prevent infinite Client.ResumeMonitoring calls
var anySuccess = false;
await client.StartMonitoringAsync(OnNewMessagesCallback, OnErrorCallback);

void OnErrorCallback(object eventSender, ImapMonitoringErrorEventArgs errorEventArguments)
{
    //The exception can be handled here
    Logger.Debug.Write(
        $"An error occured while folder monitoring: {errorEventArguments.FolderName}",
        errorEventArguments.Error);
    //IMAP folder monitoring is stopped on any error. Here is an example
    //of resuming after that.
    if (!anySuccess) return;
    anySuccess = false;
    //Make sure you use ResumeMonitoring instead of StartMonitoring here
    //to prevent missing any emails between the error handling and resuming.
    client.ResumeMonitoring(OnNewMessagesCallback, OnErrorCallback,
        errorEventArguments.MonitoringState);
}

void OnNewMessagesCallback(object sender, ImapMonitoringEventArgs successEventArgs)
{
    anySuccess = true;
    //Use successEventArgs.NewMessages to handle new messages
    //Use successEventArgs.DeletedMessages to handle deleted messages
}

IMAP एक्सटेंशन का समर्थन

Aspose.Email API IMAP एक्सटेंशन के समर्थन को प्रदान करती है। वर्तमान में API द्वारा निम्नलिखित IMAP एक्सटेंशन समर्थित हैं। ये IMAP एक्सटेंशन सभी सर्वरों द्वारा समर्थित नहीं हैं।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
using (ImapClient client = new ImapClient("imap.gmail.com", 993, "username", "password"))
{
    // Set SecurityOptions
    client.SecurityOptions = SecurityOptions.Auto;
    Console.WriteLine(client.IdSupported.ToString());

    ImapIdentificationInfo serverIdentificationInfo1 = client.IntroduceClient();
    ImapIdentificationInfo serverIdentificationInfo2 = client.IntroduceClient(ImapIdentificationInfo.DefaultValue);

    // Display ImapIdentificationInfo properties
    Console.WriteLine(serverIdentificationInfo1.ToString(), serverIdentificationInfo2);
    Console.WriteLine(serverIdentificationInfo1.Name);
    Console.WriteLine(serverIdentificationInfo1.Vendor);
    Console.WriteLine(serverIdentificationInfo1.SupportUrl);
    Console.WriteLine(serverIdentificationInfo1.Version);
}

IMAP4 विस्तारित सूची कमांड

निम्नलिखित कोड स्निपेट दिखाता है कि कैसे IMAP4 विस्तारित सूची कमांड का उपयोग किया जाए।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
using (ImapClient client = new ImapClient("imap.gmail.com", 993, "username", "password"))
{
    ImapFolderInfoCollection folderInfoCol = client.ListFolders("*");
    Console.WriteLine("Extended List Supported: " + client.ExtendedListSupported);
    foreach (ImapFolderInfo folderInfo in folderInfoCol)
    {
        switch (folderInfo.Name)
        {
            case "[Gmail]/All Mail":
                Console.WriteLine("Has Children: " + folderInfo.HasChildren);
                break;
            case "[Gmail]/Bin":
                Console.WriteLine("Bin has children? " + folderInfo.HasChildren);
                break;
            case "[Gmail]/Drafts":
                Console.WriteLine("Drafts has children? " + folderInfo.HasChildren);
                break;
            case "[Gmail]/Important":
                Console.WriteLine("Important has Children? " + folderInfo.HasChildren);
                break;
            case "[Gmail]/Sent Mail":
                Console.WriteLine("Sent Mail has Children? " + folderInfo.HasChildren);
                break;
            case "[Gmail]/Spam":
                Console.WriteLine("Spam has Children? " + folderInfo.HasChildren);
                break;
            case "[Gmail]/Starred":
                Console.WriteLine("Starred has Children? " + folderInfo.HasChildren);
                break;
        }
    }
}