usando c # .net librarires para verificar mensagens IMAP dos servidores do gmail

Alguém tem algum código de exemplo em que faz uso da estrutura .Net que se conecta a servidores do googlemail via IMAP SSL para verificar novos e-mails?

    Como autor do projeto acima, posso dizer que sim suporta SSL.

    No momento, estou trabalhando em uma nova versão da biblioteca que será completamente assíncrona para aumentar a velocidade com a qual ela pode interagir com os servidores IMAP.

    Esse código, embora não esteja completo, pode ser baixado, juntamente com a biblioteca síncrona original (que também suporta SSL), a partir do site de código plex vinculado acima.

    Eu recomendo olhar MailKit como é provavelmente a biblioteca de email mais robusta lá fora e é Open Source (MIT).

    Uma das coisas impressionantes sobre o MailKit é que todas as APIs de rede são canceláveis ​​(algo que eu não vi disponível em nenhuma outra biblioteca IMAP).

    É também a única biblioteca que conheço que suporta threading de mensagens.

    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 tem o cliente IMAP e o código do servidor que você pode usar.

    Eu usei para baixar e-mails do Gmail. O modelo de object não é o melhor, mas é viável e parece ser bastante flexível e estável.

    Aqui está o resultado parcial do meu pico para usá-lo. Ele pega os primeiros 10 headers com envelopes e depois pega a mensagem completa:

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

    Cross postado da outra questão semelhante. Veja o que acontece quando eles ficam tão parecidos?

    Eu tenho procurado por uma solução IMAP por um tempo agora, e depois de tentar alguns, eu vou com o AE.Net.Mail .

    Não há documentação, o que eu considero uma desvantagem, mas consegui agitar isso olhando o código-fonte (yay para open source!) E usando o Intellisense. O código abaixo se conecta especificamente ao servidor IMAP do 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(); 

    Eu não sou afiliado a esta biblioteca ou nada, mas eu achei muito rápido e estável.

    Não há suporte ao .NET framework para o IMAP. Você precisará usar algum componente de terceiros.

    Tente o componente de email Mail.dll , é muito acessível e fácil de usar, ele também suporta 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); } 

    Por favor, note que este é um produto comercial que eu criei.

    Você pode baixá-lo aqui: https://www.limilabs.com/mail .

    MailSystem.NET contém toda sua necessidade para IMAP4. É grátis e de código aberto.

    (Estou envolvido no projeto)

    a fonte para a versão ssl disso está aqui: http://atmospherian.wordpress.com/downloads/

    Outra alternativa: HigLabo

    https://higlabo.codeplex.com/documentation

    Boa discussão: 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 muito bem, bastante fácil. Compila com o .NET 4.0.

    Aqui estão os links necessários para sua biblioteca e exemplos. Principais downloads:

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

    Exemplos de código:

    estão localizados aqui: … lsWWW / Download / Downloads / Examples /

    .LÍQUIDO:

    estão localizados aqui: … lsWWW / Download / Downloads / Net /

    Estou colocando uma amostra SIMPLE usando seu lib no codeplex (IMAPClientLumiSoft.codeplex.com). Você deve obter suas bibliotecas diretamente de seu site. Eu não os incluo porque não mantenho o código deles nem tenho direitos sobre o código. Vá para os links acima e faça o download diretamente. Eu defini as propriedades do projeto LumiSoft no meu VS2010 para construir tudo isso no .NET 4.0, o que ele fez sem erros. Suas amostras são bastante complexas e talvez até codificação excessivamente rígida quando apenas um exemplo. Embora eu espere que estes sejam destinados a desenvolvedores de nível avançado em geral.

    Seu projeto funcionou com pequenos ajustes. Os ajustes: O exemplo do WinAP do Cliente IMAP é definido nas propriedades do projeto como “Release”, o que impede que o VS seja interrompido nos pontos de debugging. Você deve usar a solução “Configuration Manager” para definir o projeto como “Ativo (Debug)” para que os pontos de interrupção funcionem. Seus exemplos usam methods anônimos para manipuladores de events, o que é ótimo para codificação … não é muito bom como uma ferramenta de ensino. Meu projeto usa manipuladores de método de evento “nomeados” para que você possa definir pontos de interrupção dentro dos manipuladores. No entanto, o seu é uma excelente maneira de lidar com o código embutido. Eles podem ter usado os novos methods Lambda disponíveis desde o .NET 3.0, mas não o fizeram e eu não tentei convertê-los.

    De suas amostras, simplifiquei o cliente IMAP no mínimo.