باستخدام مكتبات C # .NET للتحقق من رسائل IMAP من خوادم Gmail [مغلقة

StackOverflow https://stackoverflow.com/questions/545724

  •  23-08-2019
  •  | 
  •  

سؤال

هل لدى أي شخص أي رمز نموذج يستخدم في استخدام .NET Framework الذي يتصل بخوادم GoogleMail عبر IMAP SSL للتحقق من رسائل البريد الإلكتروني الجديدة؟

هل كانت مفيدة؟

المحلول

نصائح أخرى

كما مؤلف المشروع أعلاه أستطيع أن أقول إن نعم يدعم SSL.

أنا أعمل حاليا على إصدار جديد من المكتبة التي ستكون غير متزامنة تماما لزيادة السرعة التي يمكن أن تتفاعل مع خوادم IMAP.

يمكن تنزيل هذا الرمز، في حين لم يكمل، مع المكتبة المتزامنة الأصلية (والتي تدعم أيضا SSL)، من موقع PLEX الرمز المرتبط أعلاه.

أود أن أوصي النظر في mailkit. لأنه ربما تكون مكتبة البريد الأكثر قوة هناك ومصدر مفتوح (MIT).

واحدة من الأشياء الرائعة حول mailkit هي أن جميع واجهات برمجة التطبيقات الشبكية غير قابلة للإلغاء (شيء لم أر متاحا في أي مكتبة IMAP الأخرى).

إنها أيضا المكتبة الوحيدة التي أعرفها أن تدعم خيوط الرسائل.

using System;
using System.Net;
using System.Threading;

using MailKit.Net.Imap;
using MailKit.Search;
using MailKit;
using MimeKit;

namespace TestClient {
    class Program
    {
        public static void Main (string[] args)
        {
            using (var client = new ImapClient ()) {
                using (var cancel = new CancellationTokenSource ()) {
                    client.Connect ("imap.gmail.com", 993, true, cancel.Token);

                    // If you want to disable an authentication mechanism,
                    // you can do so by removing the mechanism like this:
                    client.AuthenticationMechanisms.Remove ("XOAUTH");

                    client.Authenticate ("joey", "password", cancel.Token);

                    // The Inbox folder is always available...
                    var inbox = client.Inbox;
                    inbox.Open (FolderAccess.ReadOnly, cancel.Token);

                    Console.WriteLine ("Total messages: {0}", inbox.Count);
                    Console.WriteLine ("Recent messages: {0}", inbox.Recent);

                    // download each message based on the message index
                    for (int i = 0; i < inbox.Count; i++) {
                        var message = inbox.GetMessage (i, cancel.Token);
                        Console.WriteLine ("Subject: {0}", message.Subject);
                    }

                    // let's try searching for some messages...
                    var query = SearchQuery.DeliveredAfter (DateTime.Parse ("2013-01-12"))
                        .And (SearchQuery.SubjectContains ("MailKit"))
                        .And (SearchQuery.Seen);

                    foreach (var uid in inbox.Search (query, cancel.Token)) {
                        var message = inbox.GetMessage (uid, cancel.Token);
                        Console.WriteLine ("[match] {0}: {1}", uid, message.Subject);
                    }

                    client.Disconnect (true, cancel.Token);
                }
            }
        }
    }
}

عبر نشر من السؤال الآخر المماثل. انظر ماذا يحدث عندما يحصلون على ذلك؟

لقد كنت أبحث عن حل IMAP لفترة من الوقت الآن، وبعد أن أحاول قليلة جدا، سأذهب ae.net.mail..

لا توجد وثائق، والتي اعتبرها على الجانب السلبي، لكنني تمكنت من ذلك من خلال النظر إلى التعليمات البرمجية المصدرية (YAY للمصدر المفتوح!) واستخدام Intellisense. يتصل الرمز أدناه خصيصا لخادم IMAP الخاص ب Gmail:

// Connect to the IMAP server. The 'true' parameter specifies to use SSL
// which is important (for Gmail at least)
ImapClient ic = new ImapClient("imap.gmail.com", "name@gmail.com", "pass",
                ImapClient.AuthMethods.Login, 993, true);
// Select a mailbox. Case-insensitive
ic.SelectMailbox("INBOX");
Console.WriteLine(ic.GetMessageCount());
// Get the first *11* messages. 0 is the first message;
// and it also includes the 10th message, which is really the eleventh ;)
// MailMessage represents, well, a message in your mailbox
MailMessage[] mm = ic.GetMessages(0, 10);
foreach (MailMessage m in mm)
{
    Console.WriteLine(m.Subject);
}
// Probably wiser to use a using statement
ic.Dispose();

أنا لست مرتبطا بهذه المكتبة أو أي شيء، لكنني وجدت أنها سريعة جدا ومستقرة.

lumisoft.net. لديه كل من عميل IMAP ورمز الخادم الذي يمكنك استخدامه.

لقد استخدمتها لتنزيل البريد الإلكتروني من Gmail. لن يكون طراز الكائن هو الأفضل، لكنه قابل للتطبيق، ويبدو أنه مرن ومستقر إلى حد ما.

هنا هو النتيجة الجزئية لارتفاع بلدي لاستخدامها. يجلب أول 10 رؤوس مع مغلفات، ثم يجلب الرسالة الكاملة:

using (var client = new IMAP_Client())
{
    client.Connect(_hostname, _port, _useSsl);
    client.Authenticate(_username, _password);
    client.SelectFolder("INBOX");
     var sequence = new IMAP_SequenceSet();
    sequence.Parse("0:10");
    var fetchItems = client.FetchMessages(sequence, IMAP_FetchItem_Flags.Envelope | IMAP_FetchItlags.UID,
                                        false, true);
    foreach (var fetchItem in fetchItems)
    {
        Console.Out.WriteLine("message.UID = {0}", fetchItem.UID);
        Console.Out.WriteLine("message.Envelope.From = {0}", fetchItem.Envelope.From);
        Console.Out.WriteLine("message.Envelope.To = {0}", fetchItem.Envelope.To);
        Console.Out.WriteLine("message.Envelope.Subject = {0}", fetchItem.Envelope.Subject);
        Console.Out.WriteLine("message.Envelope.MessageID = {0}", fetchItem.Envelope.MessageID);
    }
    Console.Out.WriteLine("Fetching bodies");
    foreach (var fetchItem in client.FetchMessages(sequence, IMAP_FetchItem_Flags.All, false, true)
    {             
        var email = LumiSoft.Net.Mail.Mail_Message.ParseFromByte(fetchItem.MessageData);             
        Console.Out.WriteLine("email.BodyText = {0}", email.BodyText);

    }
}

لا يوجد دعم .NET Framework ل IMAP. ستحتاج إلى استخدام بعض مكونات الطرف الثالث.

يحاول mail.dll مكون البريد الإلكتروني, ، انه جدا يمكن شؤاءه وسهلة الاستخدام، كما يدعم أيضا SSL.:

using(Imap imap = new Imap())
{
    imap.ConnectSSL("imap.company.com");
    imap.Login("user", "password");

    imap.SelectInbox();
    List<long> uids = imap.Search(Flag.Unseen);
    foreach (long uid in uids)
    {
        string eml = imap.GetMessageByUID(uid);
        IMail message = new MailBuilder()
            .CreateFromEml(eml);

        Console.WriteLine(message.Subject);
        Console.WriteLine(message.Text);
    }
    imap.Close(true);
}

يرجى ملاحظة أن هذا منتج تجاري قمت بإنشائه.

يمكنك تحميله من هنا: https://www.limilabs.com/mail..

mailsystem.net. يحتوي على كل حاجتك للحصول على IMAP4. إنه مصدر مجاني ومفتوح.

(أشارك في المشروع)

مصدر إصدار SSL من هذا هو هنا: http://atmospherian.wordpress.com/downloads/

بديل آخر: Higlabo

https://higlabo.codeplex.com/Doccentation.

مناقشة جيدة: https://higlabo.codeplex/discussions/479250.

//====Imap sample================================//
//You can set default value by Default property
ImapClient.Default.UserName = "your server name";
ImapClient cl = new ImapClient("your server name");
cl.UserName = "your name";
cl.Password = "pass";
cl.Ssl = false;
if (cl.Authenticate() == true)
{
    Int32 MailIndex = 1;
    //Get all folder
    List<ImapFolder> l = cl.GetAllFolders();
    ImapFolder rFolder = cl.SelectFolder("INBOX");
    MailMessage mg = cl.GetMessage(MailIndex);
}

//Delete selected mail from mailbox
ImapClient pop = new ImapClient("server name", 110, "user name", "pass");
pop.AuthenticateMode = Pop3AuthenticateMode.Pop;
Int64[] DeleteIndexList = new.....//It depend on your needs
cl.DeleteEMail(DeleteIndexList);

//Get unread message list from GMail
using (ImapClient cl = new ImapClient("imap.gmail.com")) 
{
    cl.Port = 993;
    cl.Ssl = true; 
    cl.UserName = "xxxxx";
    cl.Password = "yyyyy";
    var bl = cl.Authenticate();
    if (bl == true)
    {
        //Select folder
        ImapFolder folder = cl.SelectFolder("[Gmail]/All Mail");
        //Search Unread
        SearchResult list = cl.ExecuteSearch("UNSEEN UNDELETED");
        //Get all unread mail
        for (int i = 0; i < list.MailIndexList.Count; i++)
        {
            mg = cl.GetMessage(list.MailIndexList[i]);
        }
    }
    //Change mail read state as read
    cl.ExecuteStore(1, StoreItem.FlagsReplace, "UNSEEN")
}


//Create draft mail to mailbox
using (ImapClient cl = new ImapClient("imap.gmail.com")) 
{
    cl.Port = 993;
    cl.Ssl = true; 
    cl.UserName = "xxxxx";
    cl.Password = "yyyyy";
    var bl = cl.Authenticate();
    if (bl == true)
    {
        var smg = new SmtpMessage("from mail address", "to mail addres list"
            , "cc mail address list", "This is a test mail.", "Hi.It is my draft mail");
        cl.ExecuteAppend("GMail/Drafts", smg.GetDataText(), "\\Draft", DateTimeOffset.Now); 
    }
}

//Idle
using (var cl = new ImapClient("imap.gmail.com", 993, "user name", "pass"))
{
    cl.Ssl = true;
    cl.ReceiveTimeout = 10 * 60 * 1000;//10 minute
    if (cl.Authenticate() == true)
    {
        var l = cl.GetAllFolders();
        ImapFolder r = cl.SelectFolder("INBOX");
        //You must dispose ImapIdleCommand object
        using (var cm = cl.CreateImapIdleCommand()) Caution! Ensure dispose command object
        {
            //This handler is invoked when you receive a mesage from server
            cm.MessageReceived += (Object o, ImapIdleCommandMessageReceivedEventArgs e) =>
            {
                foreach (var mg in e.MessageList)
                {
                    String text = String.Format("Type is {0} Number is {1}", mg.MessageType, mg.Number);
                    Console.WriteLine(text);
                }
            };
            cl.ExecuteIdle(cm);
            while (true)
            {
                var line = Console.ReadLine();
                if (line == "done")
                {
                    cl.ExecuteDone(cm);
                    break;
                }
            }
        }
    }
}

lumisoft.ee - يعمل بشكل رائع، سهل إلى حد ما. يجمع مع .NET 4.0.

فيما يلي الروابط المطلوبة إلى LIB وأمثلة. التنزيلات الرئيسية:

http://www.lumisoft.ee/lswwww/download/downloads/

أمثلة رمز:

توجد هنا: ... LSWWW / Download / التنزيلات / أمثلة /

.صافي:

توجد هنا: ... LWWW / Download / Downloads / Net /

أنا أضع عينة بسيطة باستخدام lib على codeplex (imapclientlumisoft.codeplex.com). يجب أن تحصل على مكتباتهم مباشرة من موقعهم. أنا لا أشملها لأنني لا أحافظ على قانونها ولا يمكنني الحصول على أي حقوق في القانون. انتقل إلى الروابط أعلاه وتنزيله مباشرة. قمت بتعيين خصائص مشروع Lumisoft في VS2010 لإنشاء كل ذلك في .NET 4.0 الذي فعله بدون أخطاء. عيناتها معقدة إلى حد ما وربما ترميز ضيق للغاية عند مثال فقط. على الرغم من أنني أتوقع أن هذه تهدف إلى مطوري المستوى المتقدمة بشكل عام.

عمل مشروعهم مع قرص بسيط. القرص: يتم تعيين مثال WinForm عميل IMAP الخاص بها في خصائص المشروع ك "الإصدار" الذي يمنع VS من كسر نقاط التصحيح. يجب عليك استخدام الحل "مدير التكوين" لتعيين المشروع إلى "نشط (تصحيح)" للحصول على نقاط التوقف للعمل. تستخدم أمثلةهم طرق مجهولة لمعالجات الأحداث التي هي ترميز ضيق كبير ... ليست جيدة حقيقية كأداة تعليمية. يستخدم مشروعي معالجات أسلوب الأحداث "المسمى" حتى تتمكن من ضبط نقاط التوقف داخل المعالجين. ومع ذلك هم هي وسيلة ممتازة للتعامل مع الرمز المضمن. ربما استخدموا أساليب Lambda الأحدث المتاحة منذ .NET 3.0 لكنني لم أحاول تحويلها.

من عيناتهم التي قمت بتبسيط عميل IMAP إلى الحد الأدنى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top