usando librerías c # .net para verificar los mensajes IMAP de los servidores de gmail

¿Alguien tiene algún código de muestra que haga uso del framework .Net que se conecta a los servidores de googlemail a través de IMAP SSL para buscar nuevos correos electrónicos?

Como autor del proyecto anterior, puedo decir que sí admite SSL.

Actualmente estoy trabajando en una nueva versión de la biblioteca que será completamente asíncrona para boost la velocidad con la que puede interactuar con los servidores IMAP.

Ese código, aunque no está completo, se puede descargar, junto con la biblioteca síncrona original (que también es compatible con SSL), desde el sitio plex de código vinculado anteriormente.

Recomiendo mirar MailKit, ya que es probablemente la biblioteca de correo más robusta que existe y es de código abierto (MIT).

Una de las cosas asombrosas de MailKit es que todas las API de red son cancelables (algo que no he visto disponible en ninguna otra biblioteca IMAP).

También es la única biblioteca que conozco que admite el enhebrado de mensajes.

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

Lumisoft.net tiene tanto el cliente IMAP como el código del servidor que puede usar.

Lo he usado para descargar correos electrónicos de Gmail. El modelo de objetos no es el mejor, pero es viable y parece ser bastante flexible y estable.

Aquí está el resultado parcial de mi pico para usarlo. Busca los primeros 10 encabezados con sobres y luego obtiene el mensaje completo:

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

Cruz publicada de la otra pregunta similar. ¿Ves lo que sucede cuando se vuelven tan similares?

He estado buscando una solución IMAP por un tiempo, y después de probar algunas, voy con AE.Net.Mail .

No hay documentación, lo cual considero un inconveniente, pero pude mejorar esto mirando el código fuente (¡yay por código abierto!) Y usando Intellisense. El siguiente código se conecta específicamente al servidor IMAP de 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(); 

No estoy afiliado a esta biblioteca ni a nada, pero lo encontré muy rápido y estable.

No hay soporte de .NET framework para IMAP. Tendrá que usar algún componente de terceros.

Pruebe el componente de correo electrónico Mail.dll , es muy asequible y fácil de usar, también es compatible con SSL :

 using(Imap imap = new Imap()) { imap.ConnectSSL("imap.company.com"); imap.Login("user", "password"); imap.SelectInbox(); List 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); } 

Tenga en cuenta que este es un producto comercial que he creado.

Puede descargarlo aquí: https://www.limilabs.com/mail .

MailSystem.NET contiene toda su necesidad de IMAP4. Es gratis y de código abierto.

(Estoy involucrado en el proyecto)

la fuente de la versión ssl de esto está aquí: http://atmospherian.wordpress.com/downloads/

Otra alternativa: HigLabo

https://higlabo.codeplex.com/documentation

Buena discusión: 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 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: funciona genial, es bastante fácil. Comstack con .NET 4.0.

Aquí están los enlaces necesarios para su lib y ejemplos. Descargas principales:

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

Ejemplos de código:

se encuentran aquí: … lsWWW / Descargar / Descargas / Ejemplos /

.RED:

se encuentran aquí: … lsWWW / Descargar / Descargas / Red /

Estoy poniendo una muestra SIMPLE usando su lib en codeplex (IMAPClientLumiSoft.codeplex.com). Debe obtener sus bibliotecas directamente desde su sitio. No los incluyo porque no mantengo su código ni tengo ningún derecho sobre el mismo. Vaya a los enlaces de arriba y descárguelo directamente. Establecí las propiedades del proyecto LumiSoft en mi VS2010 para comstackr todo en .NET 4.0, lo que hizo sin errores. Sus muestras son bastante complejas y tal vez incluso demasiado estrictas cuando solo se trata de un ejemplo. Aunque espero que estén dirigidos a desarrolladores de nivel avanzado en general.

Su proyecto trabajó con pequeños ajustes. Los ajustes: Su ejemplo de IMAP Client Winform se establece en las propiedades del proyecto como “Release”, lo que evita que VS se rompa en los puntos de depuración. Debe usar la solución “Configuration Manager” para configurar el proyecto en “Active (Debug)” para que funcionen los puntos de interrupción. Sus ejemplos usan métodos anónimos para manipuladores de eventos, que es una encoding muy ajustada … no muy buena como herramienta de enseñanza. Mi proyecto utiliza manejadores de métodos de eventos “nombrados” para que pueda establecer puntos de interrupción dentro de los controladores. Sin embargo, el suyo es una excelente manera de manejar el código en línea. Podrían haber usado los métodos más nuevos de Lambda disponibles desde .NET 3.0 pero no lo hicieron y no intenté convertirlos.

De sus muestras simplifiqué el cliente IMAP al mínimo.