none
Recebendo Emails RRS feed

  • Pergunta

  • Bom dia pessoal,

    estive fazendo um pesquisa e não encontrei nada quanto ao tema RECEBENDO E-MAIL.

    vimos muitos artigos sobre ENVIAR E-MAIL .

    ALGUEM TEM ALGUMA DICA SOBRE O ASSUNTO. (RECEBENDO E-MAIL)?

    VALEU.

    quarta-feira, 13 de abril de 2016 13:31

Respostas

Todas as Respostas

  • Voce pode usar os protocolos  POP3 ou IMAP para receber emails. 

    O POP3  é nativo .NET, veja um exemplo abaixo:

    https://www.emailarchitect.net/eagetmail/kb/vbnet.aspx

    O IMAP (bem mais poderoso que o POP3) precisa de um componete externo, e at/ agora eu nao achei nenhum gratuito que seja bom... mas caso queira tentar:

    https://briancaos.wordpress.com/2012/04/24/reading-mails-using-imap-and-mailsystem-net/

    Se voce quiser existem excelentes componentes IMAP mas sao pagos:

    http://www.componentpro.com/imap.net/


    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    quarta-feira, 13 de abril de 2016 14:23
    Moderador
  • Olá Antonio,

    Só para complementar a resposta do William, eu escrevi um artigo justamente sobre esse tema uns meses atrás.. Os exemplos estão em C#, mas, você pode facilmente converte-los para VB.NET utilizando um conversor online:

    Como receber e-mails no C# utilizando POP3?

    Abraço!


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    quarta-feira, 13 de abril de 2016 14:54
    Moderador
  • bom dia pessoal,

    William, você já testou o código?

    estou tendo o seguinte error.

    The thread 0x2f64 has exited with code 0 (0x0).
    Exception thrown: 'System.FormatException' in System.dll
    Exception thrown: 'EAGetMail.MailServerException' in EAGetMail45.dll
    -ERR authorization failed

    este componente é pago?

    valeu.

    quinta-feira, 14 de abril de 2016 18:07
  • bom dia pessoal,

    Andre,

    testei o código e obtenho o seguinte error ( Server did not accept user credentials )

    o seu deu certo?

    valeu.

    quinta-feira, 14 de abril de 2016 18:10
  • bom dia pessoal,

    William, você já testou o código?

    estou tendo o seguinte error.

    The thread 0x2f64 has exited with code 0 (0x0).
    Exception thrown: 'System.FormatException' in System.dll
    Exception thrown: 'EAGetMail.MailServerException' in EAGetMail45.dll
    -ERR authorization failed

    este componente é pago?

    valeu.

    Depende de qual codigo voce esta falando.... Se possivel nos de mais detalhes da sua implementaçao.. Voce ja verificou qual é o protocolo que voce usa? Voce consegue configurar um aplicativo (como o firebird ou outlook) para acessar esse email?

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quinta-feira, 14 de abril de 2016 18:17
    Moderador
  • Olá Antonio,

    Esse erro vindo do Gmail normalmente acontece por dois motivos:

    1) O POP3 não está habilitado nas configurações do Gmail (eu detalhei esse ponto no artigo).. Habilite em Configurations / Forwarding / POP

    2) O acesso à sua conta do Gmail não está habilitado para aplicativos "menos seguros".. Altere essa configuração no link https://www.google.com/settings/security/lesssecureapps

    Por favor, confira essas duas configurações e tente novamente..

    Abraço!


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    sexta-feira, 15 de abril de 2016 07:24
    Moderador
  • Sim William, consigo configurar um aplicativo.

     public void LerServerMail()
            {
                pnMsg.Visible = true;
                Application.DoEvents();
                try
                {
                    Cursor = Cursors.WaitCursor;
                    _hostname = "pop.gmail.com"; // Host do seu servidor POP3. Por exemplo, pop.gmail.com para o servidor do Gmail.
                    _port = 995// Porta utilizada pelo host. Por exemplo, 995 para o servidor do Gmail.
                   _useSsl  = true // Indicação se o servidor POP3 utiliza SSL para autenticação. Por exemplo, o servidor do Gmail utiliza SSL, então, "true".
                   
                    _username = "antonio@gmail.com"; // Usuário do servidor POP3. Por exemplo, seuemail@gmail.com.
                    _password = "******"; // Senha do servidor POP3.

                    using (var client = new OpenPop.Pop3.Pop3Client())
                    {
                        client.Connect(_hostname, _port, _useSsl);
                        client.Authenticate(_username, _password);
                        int messageCount = client.GetMessageCount();
                        _emails.Clear();
                        for (int i = messageCount; i > 0; i--)
                        {
                            var popEmail = client.GetMessage(i);
                            var popText = popEmail.FindFirstPlainTextVersion();
                            var popHtml = popEmail.FindFirstHtmlVersion();
                            string mailText = string.Empty;
                            string mailHtml = string.Empty;
                            if (popText != null)
                                mailText = popText.GetBodyAsText();
                            if (popHtml != null)
                                mailHtml = popHtml.GetBodyAsText();
                            _emails.Add(new Email()
                            {
                                Id = popEmail.Headers.MessageId,
                                Assunto = popEmail.Headers.Subject,
                                De = popEmail.Headers.From.Address,
                                Para = string.Join("; ", popEmail.Headers.To.Select(to => to.Address)),
                                Data = popEmail.Headers.DateSent,
                                ConteudoTexto = mailText,
                                ConteudoHtml = !string.IsNullOrWhiteSpace(mailHtml) ? mailHtml : mailText
                            });
                        }
                        AtualizarDataBindings();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    Cursor = Cursors.Default;
                    pnMsg.Visible = false;
                }
            }

    messagem de error;

    Não é possível ler os dados da conexão de transporte: Uma tentativa de conexão falhou porque o componente conectado não respondeu corretamente após um período de tempo ou a conexão estabelecida falhou porque o host conectado não respondeu.

    valeu.

    • Editado Antonio Fcs sexta-feira, 15 de abril de 2016 12:22
    sexta-feira, 15 de abril de 2016 11:46
  • André.

    verifiquei a configuração e funcionou, obrigado.

    os outros host de e-mails funcionam da mesma maneira, é preciso habilita esta configuração?

    Teria algum recurso que tornaria o aplicativo seguro e não precisaria desabilitar esta opção?

    valeu.

    • Editado Antonio Fcs sexta-feira, 15 de abril de 2016 12:41
    sexta-feira, 15 de abril de 2016 12:27
  • Olá Antonio,

    Que bom que funcionou! Qualquer coisa poste novamente..

    Cada provedor você pode encontrar uma surpresa.. Normalmente você só precisa alterar as configurações (porta, formato do nome do usuário e coisas do tipo) corretamente.. Mas, nunca se sabe..

    Abraço!


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    sexta-feira, 15 de abril de 2016 12:42
    Moderador
  • desculpe André,

    estive procurando como receber os anexo e não encontrei, você teria alguma dica?

    valeu.

    sexta-feira, 15 de abril de 2016 14:34
  • Se voce estiver usando o OpenPop, como sugiriu o Andre, entao segue um exemplo:

    var client = new Pop3Client();
    try
    {            
        client.Connect("MailServerName", Port_Number, UseSSL); //UseSSL true or false
        client.Authenticate("UserID", "password");   
    
        var messageCount = client.GetMessageCount();
        var Messages = new List<Message>(messageCount);
    
        for (int i = 0;i < messageCount; i++)
        {
            Message getMessage = client.GetMessage(i + 1);
            Messages.Add(getMessage);
        }
    
        foreach (Message msg in Messages)
        {
            foreach (var attachment in msg.FindAllAttachments())
            {
                string filePath = Path.Combine(@"C:\Attachment", attachment.FileName);
                if(attachment.FileName.Equals("blabla.pdf"))
                {
                    FileStream Stream = new FileStream(filePath, FileMode.Create);
                    BinaryWriter BinaryStream = new BinaryWriter(Stream);
                    BinaryStream.Write(attachment.Body);
                    BinaryStream.Close();
                }
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("", ex.Message);
    }
    finally
    {
        if (client.Connected)
            client.Dispose();
    }
    

    fonte:http://stackoverflow.com/questions/10317411/how-to-save-email-attachment-using-openpop

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    sexta-feira, 15 de abril de 2016 15:39
    Moderador