mit c # .net-Bibliotheken für IMAP-Nachrichten von Google Mail-Servern überprüfen [geschlossen]

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

  •  23-08-2019
  •  | 
  •  

Frage

Hat jemand eine Beispielcode, dass die Verwendung des .NET Framework macht den Server über IMAP SSL Googlemail verbindet für neue E-Mails zu überprüfen?

War es hilfreich?

Lösung

Die URL hier aufgeführten für Sie von Interesse sein könnte

http://www.codeplex.com/InterIMAP

das war Erweiterung

Andere Tipps

Wie der Autor des obigen Projektes kann ich sagen, dass es ja SSL unterstützt.

Zur Zeit arbeite ich an einer neuen Version der Bibliothek, die vollständig asynchron sein wird, die Geschwindigkeit zu erhöhen, mit der es mit IMAP-Servern interagieren kann.

Dieser Code, die zwar nicht vollständig, kann heruntergeladen werden, zusammen mit der ursprünglichen synchronen Bibliothek (die auch SSL unterstützt), von der Code-plex Seite oben bereits genannt.

würde ich empfehlen, unter MailKit wie es wohl die robusteste Mail-Bibliothek ist da draußen, und es ist Open Source (MIT) .

Einer der ehrfürchtigen Dinge über MailKit ist, dass all Netzwerk-APIs kündbar ist (etwas, das ich nicht in irgendeiner anderen IMAP-Bibliothek zur Verfügung zu sehen ist).

Es ist auch die einzige Bibliothek, die ich kenne, unterstützt Einfädeln von Nachrichten.

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

Cross geschrieben von der anderen ähnlichen Frage. Sehen Sie, was passiert, wenn sie so ähnlich bekommen?

Ich habe eine Zeit lang für eine IMAP-Lösung gesucht, jetzt und nach dem Versuch, ein paar ganz, ich werde mit AE.Net.Mail .

Es gibt keine Dokumentation, die ich einen Nachteil betrachten, aber ich war in der Lage, dies zu schüren, indem auf den Quellcode (yay für Open-Source!) Suchen und mit Intellisense. Der Code unten verbindet speziell auf die Google Mail-IMAP-Server:

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

Ich bin nicht mit dieser Bibliothek oder irgendetwas angeschlossen, aber ich habe es sehr schnell und stabil gefunden.

Lumisoft.net hat sowohl IMAP-Client und Server-Code, den Sie mit verwenden.

Ich habe es verwendet, E-Mails von Google Mail zum Download bereit. Das Objektmodell ist nicht die beste, aber es ist praktikabel, und scheint ziemlich flexibel und stabil zu sein.

Hier ist das Teiler meiner Spitze, es zu benutzen. Es holt die ersten 10 Header mit Umschlägen, und holt dann die vollständige Meldung:

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

    }
}

Es gibt keine .NET-Framework-Unterstützung für IMAP. Sie müssen einige 3rd-Party-Komponente verwenden.

Versuchen Sie Mail.dll E-Mail-Komponente , es ist sehr erschwinglich und einfach zu verwenden, sondern unterstützt auch 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);
}

Bitte beachten Sie, dass dies ist ein kommerzielles Produkt, das ich geschaffen habe.

Sie können es hier herunterladen. https://www.limilabs.com/mail

MailSystem.NET enthält alle Ihre Notwendigkeit für IMAP4. Es ist kostenlos und Open Source.

(Ich bin involviert in das Projekt)

die Quelle auf die ssl Version davon ist hier: http://atmospherian.wordpress.com/downloads /

Eine weitere Alternative: HigLabo

https://higlabo.codeplex.com/documentation

Gute Diskussion: https://higlabo.codeplex.com/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 - hervorragend, ziemlich einfach. Compiliert mit .NET 4.0.

Hier sind die erforderlichen Verbindungen zu ihren lib und Beispiele. Download-Index:

http://www.lumisoft.ee/lsWWW/Download/Downloads/

Code-Beispiele:

befinden sich hier: ... lsWWW / Download / Downloads / Beispiele /

.NET:

befinden sich hier: ... lsWWW / Download / Downloads / Net /

Ich stelle eine einfache Probe ihre lib auf Codeplex mit bis (IMAPClientLumiSoft.codeplex.com). Sie müssen ihre Bibliotheken direkt aus ihrer Website. Ich schließe sie nicht, weil ich ihren Code nicht halten, noch habe ich irgendwelche Rechte an den Code. Gehen Sie auf die Links oben und direkt herunterladen. Ich habe LumiSoft Projekteigenschaften in meinem VS2010 alles zu bauen in .NET 4.0, die es ohne Fehler gemacht hat. Ihre Muster sind ziemlich komplex und vielleicht sogar zu enge Codierung, wenn nur ein Beispiel. Obwohl ich davon aus, dass diese auf fortgeschrittenem Niveau Entwickler im Allgemeinen gerichtet sind.

Ihr Projekt arbeitete mit kleineren Verbesserungen. Die Verbesserungen: Das IMAP-Client Winform Beispiel ist in den Projekteigenschaften als „Release“ gesetzt, der VS bricht auf Debug-Punkten verhindert. Sie müssen die Lösung „Configuration Manager“ verwenden, um das Projekt „Aktiv (Debug)“ für Breakpoints zu setzen zu arbeiten. Ihre Beispiele verwenden anonyme Methoden für Event-Handler, die große enge Codierung ist ... nicht wirklich gut als Lehrmittel. Mein Projekt verwendet „Namen“ Ereignismethode Handler, so dass Sie Stützpunkte innerhalb des Handler einstellen. Allerdings sind sie eine hervorragende Möglichkeit, Inline-Code zu behandeln. Sie haben vielleicht die neuere Lambda Methoden zur Verfügung, da .NET 3.0 verwendet, aber nicht, und ich habe nicht versucht, sie zu konvertieren.

Von den Proben vereinfachte ich den IMAP-Client Nötigste.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top