Enviando email com a API JavaMail

Este post foi removido e transferido para a seguinte url:

http://www.mballem.com/post/enviando-email-com-a-api-javamail

Anúncios

, , ,

  1. #1 por Guto em 23/03/2011 - 17:15

    Uma coisa que sempre achei dificil ffoi encontrar um tutorial de envio de email que funcionasse.
    Valeu mesmo.

  2. #2 por Altieres em 30/03/2011 - 1:17

    Muito bom o post.

    Implementei aqui e funcionou direitinho!

  3. #3 por Eduardo jordano em 14/04/2011 - 20:57

    Muito bom o post, Funcionando 100%

    Parabéns Pela Iniciativa

    Abraço

  4. #4 por Eliana em 06/07/2011 - 16:32

    Boa tarde
    Estou tentado usar esta classe para enviar emails usando java, mas não está dando certo,
    o erro acontece ja na class MailJava nas linhas,
    private Map toMailsUsers;
    e private List fileMails; .

    Você pode me ajudar?
    Obrigada.

  5. #5 por MBallem em 06/07/2011 - 18:35

    Olá Eliana. Eu precisaria saber que erro está ocorrendo para poder te ajudar.
    O tutorial a principio está 100%, foi bem testado antes de postar ele.
    Talvez, você esteja importando as o Map e o List do pacote errado. Confirma se no seu import está usando:
    import java.util.List;
    import java.util.Map;

  6. #6 por Paulo em 03/09/2011 - 20:51

    Cara, ta meio extranho isso aqui, o código funciona so que demora uns 3 minutos pra envia o email isso é normal? e tbm as vezes acontece esse erro aqui de baixo! Será que o problema é apenas a velocidade de conexão?

    com.sun.mail.smtp.SMTPSendFailedException: 552-5.7.0 Our system detected an illegal attachment on your message. Please
    552-5.7.0 visit http://mail.google.com/support/bin/answer.py?answer=6590 to
    552 5.7.0 review our attachment guidelines. u69sm2584799yhg.16

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057)
    at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:1862)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1100)
    at javax.mail.Transport.send0(Transport.java:195)
    at javax.mail.Transport.send(Transport.java:124)
    at Componentes.MailJavaSender.senderMail(MailJavaSender.java:106)
    at Componentes.EnviaEmail.main(EnviaEmail.java:47)

    Se puder me ajudar eu agradeço!

  7. #7 por MBallem em 03/09/2011 - 21:05

    Olá Paulo. Pelo erro parece que você está tentando enviar um tipo de arquivo em anexo que servidor de email não aceita. Dai a demora pode ser por conta do servidor estar analisando o arquivo e a exceção significa que o servidor não aceita.

  8. #8 por Ernando Gomes de Sousa em 29/10/2011 - 12:38

    Parabéns! Bastante claro o tutorial e realmente funciona.

    Entretanto, fazendo um trabalho na facul, cujo pretendo enviar um email para um professor toda vez que ele loca um data show para sala de aula, o sistema da o erro -> AVISO: StandardWrapperValve[CadastrosServlet]: PWC1406: Servlet.service() for servlet CadastrosServlet threw exception.

    CadastrosServlet é a servlet que estou usando para registrar todos os pedidos de locações e também a classe que uso para startar o e-mail.

    Esse erro acontece pelo motivo que a cada locação o destinatário do e-mail é trocado.

    Umas da linhas que ele aponta no erro á a -> Session session = Session.getDefaultInstance(props, auth);

    Se puder ajudar-me ficarei muito agradecido.

  9. #9 por MBallem em 29/10/2011 - 15:22

    Ernando Gomes de Sousa, ficou muito vago o erro para te ajudar. Confere na exceção lançada se não tem alguma mensagem referente a uma classe não encontrada (java.lang.ClassNotFoundException:) ou um objeto nulo (java.lang.NullPointerException) ou até outro tipo exceção.

  10. #10 por Ernando Gomes de Sousa em 30/10/2011 - 11:49

    Bom Dia Marcio! Felizmente já estou conseguindo enviar e-mails na aplicação para cada professor que realiza a locação. Percebi que tenho que reiniciar tudo a cada alteração que faço na servlet refrente ao código de enviar e-mail, inclusive reiniciar o netbeans. Não pq isso acontece, mas quando reinicio o netbeans a aplicação consegui enviar e-mails. Fico muito grato pela disponibilidade. Parabéns pelo blog e, por favor, continue escrevendo artigo para felicidade geral da nação.
    Aproveitando o ensejo, você tem algum artigo que ensina como enviar SMS ou podes recomendar algum?

    Muito grato pela atenção!

  11. #11 por MBallem em 30/10/2011 - 14:05

    Oi Ernando, sobre SMS não tenho nada. Na verdade nunca pesquisei sobre o assunto. Quem sabe se tiver possibilidade pesquise sobre o assunto.
    Seu problema com o netbeans é estranho. Tente reinstalar para ver ser resolve esse problema.

  12. #12 por Ryouta em 27/11/2011 - 0:46

    aqui não pego da esse erro aqui

    DEBUG: setDebug: JavaMail version 1.4.4
    Exception in thread “main” java.lang.NullPointerException
    at MailJavaSender.senderMail(MailJavaSender.java:78)
    at MailTester.main(MailTester.java:34)

  13. #13 por MBallem em 27/11/2011 - 12:02

    Ryouta, o erro é NullPointerException na linha 78 da classe MailJavaSender. Você pode debugar seu código para entender o por que está acessando um objeto nulo.

    Na listagem dessa classe que eu postei, essa linha é um comentário, então não sei qual o código que está na sua linha 78.

  14. #14 por Felipe em 17/02/2012 - 17:08

    Cara! Demais! show de bola valeu ai

  15. #15 por Jorge Takata em 18/02/2012 - 19:45

    Muito bom mesmo. Parabéns.
    Pra mim, o mais difícil foi encontrar o smtpHost e smtpPort do meu email.

  16. #16 por Leandro em 23/02/2012 - 12:44

    Boa tarde, estou com um problema, preciso pegar os dados de um formulário para enviar um email, mas não estou conseguindo, vc poderia me dar umas dicas

  17. #17 por MBallem em 23/02/2012 - 14:40

    Olá Lenadro! Mas o que você não consegue, pegar os dados do formulário ou enviar o e-mail?

  18. #18 por Hugo Rafael em 09/03/2012 - 9:45

    Olá gostei muito desse seu post, até já implementei fiz testes para enviar varios emails a partir de um swing. queria saber se você já fez enviar varios emails a partir de um swing utilizando Map,pois percebi que a forma que você fez só envia varios para CC, queria saber se você já testou enviar varios para CC e para TO ao mesmo tempo, tipo ou independente, por exemplo quero enviar TO para joao@hotmail.com e com CC para rafael@hotmail.com. se já fez ficarei feliz se pudesse me ajudar, pois estou fazendo um sistema que preciso disso.

    obs: esses emails que digitei são só exemplos

  19. #19 por MBallem em 09/03/2012 - 10:22

    Olá Hugo!
    Isso que você quer fazer é apenas questão de lógica. Por exemplo, você pode criar um MAP apenas para TOs e um MAP apenas para os CCs. Depois faz um for em cada um deles e vai adicionando no objeto da mensagem.

  20. #20 por Hugo Rafael em 09/03/2012 - 10:26

    hum entendi, eu até pensei nisso só nao sabia como utilizar o Map, Obrigado deu uma clariada agora.
    Abraços!!

  21. #21 por Hugo Rafael em 09/03/2012 - 10:36

    será que você poderia dar um exemplo de código, estou com algumas duvidas para usar o map ainda
    Abraços

  22. #22 por MBallem em 09/03/2012 - 11:52

    Hugo, qual é a sua dúvida exatamente com MAP? No código postado tem um exemplo.

  23. #23 por Hugo Rafael em 12/03/2012 - 8:31

    Então você disse para eu fazer separado eu até entendi como seria, mas não consegui entender com eu faria, você pode dar um exemplo dessa separação dos maps?
    Agradeço desde já.
    Abraços!

  24. #24 por Hugo Rafael em 12/03/2012 - 9:32

    Marcio Dei uma estuda maior sobre map e entendi como funciona, consegui fazer a separação do “TO” e do “CC” a questao era lógica como você tinha dito quebrei um pouco a cabeça mas consegui fazer.
    Obrigado desde já!!!
    E mais uma vez parabens pelo post foi muito util para mim, pois isso ajudou em meu tcc
    Abraços!

  25. #25 por MBallem em 12/03/2012 - 11:38

    Legal Hugo, abraço!

  26. #26 por Hugo Rafael em 14/03/2012 - 8:47

    olá Marcio sou eu de novo heheh! queria te fazer outra pergunta, na sua classe MailTester você adiciona O setSmtpHostMail(“smtp.gmail.com”); E O setSmtpPortMail(“587”); manualmente, teria com saber isso automaticamente, você já fez isso?
    Agradeço desde de já sua ajuda!!!!
    Abraços!!!!

  27. #27 por Hugo Rafael em 14/03/2012 - 10:02

    Existe Algum comando que geta esses parametros?
    ABraços!!!!

  28. #28 por MBallem em 14/03/2012 - 10:15

    Bom dia Hugo! Depende de como “automaticamente” você quer recuperar esses valores. Se for direto do servidor de e-mail (gmail), não tem como. Mas se você quiser pode adicioná-los em variáveis e depois recuperar o valor. Ou então configurar em um arquivo de propriedades e recuperar os valores do arquivo.

  29. #29 por Hugo Rafael em 14/03/2012 - 10:26

    Hum entendi muito obrigado pela dica!!!
    Abraços!!!!

  30. #30 por Hugo Rafael em 12/04/2012 - 8:52

    Olá Marcio tudo bem? Estou aqui agora para lhe fazer outra pergunta, Gostaria de saber sobre a classe auntenticator, pois estou fazendo um sistema que precis ade teste de configuração de conta de email, ou seja qual o usuario cadastrar sua conta verificar se os dados dele (email e senha) estao funcionando, ou seja, precisaria fazer este teste de autenticação para ele confirmar o cadastro dele, essa classe faz isso, ou você conhece outra forma que faz isso

    Desde de já agradeço, obrigado!

  31. #31 por MBallem em 12/04/2012 - 10:38

    Olá Hugo! Na verdade esse objeto de autenticação só vai testar se a autenticação é válida no momento de envio do e-mail. Quando executar o método Transport.send(). Então você teria obrigatoriamente que enviar um e-mail para fazer o teste, o que eu acredito que não seja o que você quer. Infelizmente eu não conheço nenhuma outra API que teste autenticação, vou dar uma pesquisada sobre isso, se achar algo eu te informo.

  32. #32 por Hugo Rafael em 12/04/2012 - 10:43

    hum entendi muito obrigado pela resposta e atenção, vou dar um pesquisada tbm
    Abraços

  33. #33 por antoni em 23/04/2012 - 14:13

    Oi Marcio, tudo bem? Estou com um pobleminha com relação a acentuação, quando envio um e-mail do gmail para gmail dá certo, porem quando envio do gmail para o hotmail não dá muito certo, aparece dessa forma:
    Este � um texto com acento: ��?���@ !
    obs(usei o iso e ja testei com o utf tbm)
    agradecido.

  34. #34 por MBallem em 23/04/2012 - 17:22

    Olá antoni. Fiz alguns testes agora pouco com o hotmail e realmente tem esse problema. Usei os charset utf-8, iso-889-1 e windows-1252 e sempre acontece esse problema. Não sei no momento como resolver, vou verificar isso mais tarde, e se conseguir posto aqui como fiz. Caso consiga, deixe a dica também.
    Abraço!

  35. #35 por Antoni em 23/04/2012 - 21:45

    Já tentei de tudo Marcio! Procurei ajuda aqui no blog depois de muita procura na net, ficaria muito agradecido se conseguisse resolver o problema! Estou cursando Sistemas de Informação pela UFRN e estou usando seus exemplos em um projeto, minha equipe gostou demais do seu blog!
    Abraço!!

  36. #36 por Antoni em 23/04/2012 - 21:58

    Haaa Marcio, só mais uma coisinha, quando mando o email como caractere especial dá certo, mais achei uma “ganbiarra” fazer algum método que convertesse as letras. Por exemplo:
    Para enviar ‘você’, preciso enviar ‘você’.

  37. #37 por Antoni em 23/04/2012 - 22:33

    Para enviar ‘você’, preciso enviar você

  38. #38 por Antoni em 23/04/2012 - 22:35

    kkkkk… Aqui já converte… estou mandando você como código html e ele fica normal!

  39. #39 por MBallem em 24/04/2012 - 10:46

    Bom dia Antoni,
    o problema que encontrei é o seguinte, a configuração do charset da IDE. No caso, minha IDE estava configurada como UTF-8, então quando eu enviava a mensagem o UTF-8 da IDE alterava a string. Quando alterei o charset da IDE para ISO-8859-1, a mensagem chegou perfeita no hotmail.
    Não sei qual IDE você usa, mas procure por informações de como modificar o charset de sua IDE e depois tente o envio para tirar a prova.
    T+

  40. #40 por Antoni em 24/04/2012 - 13:12

    Blz Marcio, a solução que encontrei antes foi uma biblioteca que convertesse os caracteres especiais. Só mais uma dúvida, quando colocar meu sistema pra rodar em outras máquinas, será que o problema irá persistir?

  41. #41 por MBallem em 24/04/2012 - 14:37

    Eu acho que vai depender do local onde as classes são compiladas. Vai depender do enconding que seu S.O está setado.
    Faz o seguinte teste no seu PC. Pode fazer dentro da classe que você seta as propriedades do JavaMail.

    System.out.println(“Charset: ” + System.getProperty(“file.encoding”));

    Assim você vai ver qual é o enconding que seu S.O usa. Deve ser UTF-8. Se for mesmo, quando você for enviar um e-mail com caracteres especias, use o seguinte código:

    java.util.Properties properties = System.getProperties();
    properties.setProperty(“file.encoding”, “ISO-8859-1”);

    Assim, toda vez antes de enviar o e-mail ele vai alterar a propriedade para ISO-8859-1.

  42. #42 por Hugo Rafael em 05/06/2012 - 8:57

    olá Marcio tudo bem sou eu de novo, agora estou com desafio meio complicado que nao estou conseguindo achar uma forma pra fazer o que eu quero, veja bem, eu queria enviar um email utilizando thread.sleep, ou seja, enviar a msg para cada contato com um tempo de espera, por exemplo enviar pro primeiro contato ai eu faço a thread.sleep(1000), e depois desse tempo enviar para o segundo contato, e assim por adiante, mas tudo no mesmo envio, ou seja no mesmo transport.send, nao sei se fui claro, mas vc ja se deparou com algo parecido, tem alguma ideia de como possa funcionar?
    Obrigado desde já abraços

  43. #43 por MBallem em 05/06/2012 - 11:59

    olá Hugo! Acredito que não seja possível fazer isso. Não tem como enviar separadamente no mesmo Transport.send() diversos destinatários, porque os destinatários devem ser inseridos no objeto Message, então não tem como fazer isso separadamente a não ser que envie cada um em um novo Transport.send().

  44. #44 por Leandro em 06/06/2012 - 9:15

    Boa tarde… tentei implementar, exatamente como no forum, mas tenho o seguinte erro:

    javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
    nested exception is:
    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
    at javax.mail.Service.connect(Service.java:295)
    at br.inf.baobing.baoprint.relatoriosPorEmail.EnviarEmail.senderMail(EnviarEmail.java:261)
    at br.inf.baobing.baoprint.relatoriosPorEmail.EnviarEmail.enviarRelatorioPorEmail(EnviarEmail.java:87)
    at br.inf.baobing.baoprint.servletContext.ThreadPrincipal.solicitaEnviarRelatoriosPorEmail(ThreadPrincipal.java:83)
    at br.inf.baobing.baoprint.servletContext.ThreadPrincipal.run(ThreadPrincipal.java:50)
    at java.lang.Thread.run(Unknown Source)

    Poderia me ajudar?

  45. #45 por MBallem em 06/06/2012 - 12:01

    Olá Leandro, acabei de testar o envio com Gmail, por este código postado, e não rolou problema algum. Você por acaso não adicionou essa propriesdade: props.setProperty(“mail.smtp.ssl.enable”, “true”) ?
    Se adicionou, tire elimine ela ou a coloque com valor “false”.

  46. #46 por Leandro em 11/06/2012 - 18:07

    MBallem, obrigado por responder…
    Voltando ao erro acima, não era isso não… não faço idéia do que fiz aqui, mas deu certo…
    só sei que tem algo com a autenticação mesmo…. eu estava fazendo conexão primeiro:
    Transport transport = session.getTransport(“smtp”);
    transport.connect(mail.getSmtpHostMail(), new Integer(mail.getSmtpPortMail()), mail.getUserMail(), mail.getPassMail());
    Transport.send(msg);

    Resolvi tirar o método connect, e só usar o send, por enquanto….

    Estou tendo problemas agora com encoding… li os post acima… fiz o teste que vc recomendou:
    System.out.println(“Charset: ” + System.getProperty(“file.encoding”)); e o meu retorna ISO-8859-1 normalmente.. minha IDE é eclipse indigo, e está certo tb.
    o erro é:

    java.lang.NullPointerException
    at javax.mail.internet.MimeUtility.getEncoding(MimeUtility.java:226)
    at javax.mail.internet.MimeUtility.getEncoding(MimeUtility.java:299)
    at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1375)
    at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1021)
    at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:419)
    at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1354)
    at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2107)
    at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2075)
    at javax.mail.Transport.send(Transport.java:123)

    e o debug é

    EHLO minha_rede
    250-mx.google.com at your service, [meu_ip]
    250-SIZE 35882577
    250-8BITMIME
    250-STARTTLS
    250 ENHANCEDSTATUSCODES
    DEBUG SMTP: Found extension “SIZE”, arg “35882577”
    DEBUG SMTP: Found extension “8BITMIME”, arg “”
    DEBUG SMTP: Found extension “STARTTLS”, arg “”
    DEBUG SMTP: Found extension “ENHANCEDSTATUSCODES”, arg “”
    STARTTLS
    220 2.0.0 Ready to start TLS
    EHLO minha_rede
    250-mx.google.com at your service, [meu_ip]
    250-SIZE 35882577
    250-8BITMIME
    250-AUTH LOGIN PLAIN XOAUTH
    250 ENHANCEDSTATUSCODES
    DEBUG SMTP: Found extension “SIZE”, arg “35882577”
    DEBUG SMTP: Found extension “8BITMIME”, arg “”
    DEBUG SMTP: Found extension “AUTH”, arg “LOGIN PLAIN XOAUTH”
    DEBUG SMTP: Found extension “ENHANCEDSTATUSCODES”, arg “”
    DEBUG SMTP: Attempt to authenticate
    DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
    DEBUG SMTP: AUTH LOGIN command trace suppressed
    DEBUG SMTP: AUTH LOGIN succeeded

  47. #47 por MBallem em 11/06/2012 - 20:38

    Leandro, java.lang.NullPointerException não tem nada haver com o encoding. Esse erro diz que seu objeto Transport está nulo ou o objeto da mensagem que está passando como parâmetro no método send() que está nulo. Verifique isso.
    Pelo que vi no trecho de código que você postou, você alterou a forma como o e-mail é enviado em relação ao post, então confirme se realmente seu código está certo depois dessas modificações..

  48. #48 por Hugo Rafael em 12/06/2012 - 11:00

    Olá Marcio! entendi vc conhece outra classe que tem essa possibilidade?
    OBRIGADO DESDE JÁ

  49. #49 por MBallem em 12/06/2012 - 12:07

    Oi Hugo, tem uma biblioteca da Apache, não se se com ela é possível, mas você pode baixar e testar: http://commons.apache.org/email/

  50. #50 por Hugo Rafael em 13/06/2012 - 8:08

    Obrigado Marcio por mandar o link fico muito grato. Mais uma vez parabens pelo seu post!
    ABraços!

  51. #51 por Hugo Rafael em 15/06/2012 - 10:07

    olá marcio nao estou com muito tempo para analisar essa class hehehehe, entao eu fiz mandar com um novo transporte mesmo, porem veja o que acontece.
    Eu tenho tres destinataris. joao@hotmail.com, tiago@hotmail.com, fernando@hotmail.com
    eu coloquei o transporte e recipent type em um for, pegando um por vez e mandando, ai que vem o problema eu pego um por um porem no entanto ele faz assim. pega o joao@hotmail.com e manda, na segunda vez ele manda pro joao@hotmail.com novamente e para o segundo tiago@hotmail.com ai na terceira vez ele manda para todos os tres ou seja para o primeiro destinatario ele vai mandar tres vezes, eu estava pensando se tem alguma forma de acada ingremento no for ele limpar todo a mesagem depois pegar tudo de novo para os destinatarios subsequentes, vc tem ideia se tem como fazer isso? Agradeço desde ja abraços

  52. #52 por MBallem em 15/06/2012 - 16:51

    Hugo, parece que a cada passagem pelo for ele está adicionando no mesmo objeto os novos destinatários.
    Você vai precisar criar os objetos dentro do for, para que a cada loop um objeto novo seja criado, substituindo o anterior.

  53. #53 por Hugo Rafael em 18/06/2012 - 10:27

    Entendi MArcio De verdade fiz isso e deu certinho, muito obrigado
    Abraços

  54. #54 por Thiago Colebrusco em 18/06/2012 - 17:10

    Olá,

    Existe alguma lista padronizada com os erros que o envio de e-mail pode retornar?

    Por exemplo, “Caixa postal não encontrada”, “Servidor de correio não encontrado”, etc.

    Obrigado. Abraços!

  55. #55 por MBallem em 18/06/2012 - 22:47

    Olá Thiago, você pode ver na documentação da API a lista de exceções que são lançadas:
    http://javamail.kenai.com/nonav/javadocs/javax/mail/package-summary.html

  56. #56 por Thiago Colebrusco em 19/06/2012 - 11:02

    Olá Marcio,

    Obrigado pela resposta.
    Porém, acredito que este link não me ajuda muito, pois preciso focar em erros que podem ser lançados pelo servidor que vai receber o e-mail, porque na teoria o envio do e-mail estará correto, o que preciso “armazenar” como log é porque alguns usuários não receberam.

    Tem alguma ideia de como posso fazer este log?

    Obrigado.

  57. #57 por MBallem em 19/06/2012 - 11:09

    Thiago, nesse caso não sei se é possível. Você pode capturar apenas as exceções lançadas pela API. Se houver problemas no servidor, não sei se é possível capturar.

  58. #58 por Hugo Rafael em 26/06/2012 - 10:20

    olá marcio na parte de anexo, vc consegue colocar anexo a partir de um selecionador de arquivo?
    Agradeço desde de ja

  59. #59 por MBallem em 26/06/2012 - 11:29

    Sim Hugo é possível. Você pode usar por exemplo o JFileChooser do Swing para selecionar o arquivo e quando selecionado você recupera o caminho do arquivo para então setar no seu código.

  60. #60 por Hugo Rafael em 26/06/2012 - 11:34

    Olá Marcio muito Obrigado pela resposta, e vc nao vai acreditar, acabei de fazer isso que vc falou, li sua mente agora. hehehehehe, muito obrigado pela ajuda, vc tem me ajudado no meu projeto, um dia te mostro. shuhsuh abraços!!!!!!!

  61. #61 por Hugo Rafael em 27/06/2012 - 8:21

    Olá marcio novamente estou aqui para perguntar outra coisa. hehehe. eu mandei um email com um anexo de 10 megas, e demorou, demorou e demorou muito, pra ser mais exato, mais de 7 minutos eu cronometrei, vendo isso eu percebi que ele anexa quando esta enviando talvez isso seja a demora, teria como eu prepara o anexo antes, ou compactar nao sei, para ele enviar um pouco mais rapido, pois se eu for enviar um anexo desse tamanho vai demorar e demorar, voce alguma ideia sobre essa questa?

  62. #62 por Hugo Rafael em 27/06/2012 - 8:48

    Olá marcio antes da sua resposta eu pensei com alguns amigos, em criar uma thread e colocar uma barra de progresso pro usuario saber o que ta acontecendo, nisso ele podera mexer em outras coisas do sistema, sem ficar travado na tela de envio. obrigado pela atençã

  63. #63 por Hugo Rafael em 27/06/2012 - 8:50

    Ah falando em thread vc teria alguma ideia de como eu poderria fazer isso, tipo criar uma thread pra o trasnport por exemplo?
    Obrigado desde ja

  64. #64 por MBallem em 27/06/2012 - 11:43

    Olá Hugo, essa parte do anexo não sei muito bem como resolver. Talvez você pudesse usar a classe java.util.zip.ZipFile para compactar o anexo selecionado. Se for texto, com certeza vai diminuir bastante, já se for imagem não sei se diminui muito não.
    Sobre thread é complicado, você precisa achar o ponto certo na aplicação para usar a thread, mas talvez se você colocar uma thread no botão de envio, já seja suficiente para liberar o programa para outras operações. Já uma barra de progresso, de uma olhada aqui:
    http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html
    http://www.java2s.com/Tutorial/Java/0240__Swing/JProgressBar.htm

  65. #65 por Hugo Rafael em 27/06/2012 - 11:47

    Entendi, vou fazer entao sua sugestao de colocar uma thread no botao, parece ser uma boa, e sobre os links muito obrigado, vou dar uma analisada tbm sobre o java.util.zip
    muito obrigado pelas sugestoes tem sido muito util para mim!
    Novamente obrigado

  66. #66 por Hugo Rafael em 02/07/2012 - 8:47

    olá Marcio tudo bem? sobre thread eu nunca vi isso em java, estou estudando um pouco mais ainda tenho duvidas de como colocar ela como vc disse no botao enviar, vc teria um exemplo de alguma aplicação que eu possa estudar mais profundamente, se tiver um botao parecido como o de enviar eu ficaria muito agradecido. dei uma olhada na barra de progresso acho que essa parte será mais tranquilo pra eu por em meu projeto só essa parte de thread que estou apanahando um pouco. hehe Obrigado novamente abraços

  67. #67 por MBallem em 02/07/2012 - 10:54

    Olá Hugo, assiste o video Capturando conteúdo HTML com JSoup – Parte II a partir de 1:06:00. Nele tem mostra como usar a thread no botão para que a aplicação não fique travada enquanto o método do botão é executado.

  68. #68 por Hugo Rafael em 02/07/2012 - 10:55

    Marcio muito obrigado pela atenção vou assitir ao video com certeza
    Obrigado mais uma vez

  69. #69 por Hugo Rafael em 03/07/2012 - 9:49

    Ola marcio deu certo! muito obrigado abraços

  70. #70 por Hugo Rafael em 04/07/2012 - 11:36

    Ola Marcio! Eu fiz a thread no botao até deu certo no entanto deu um erro depois, esse erro
    This call must happen in the AWT Event Dispatch Thread. na minha aplicação eu utilizo JHTMLEditor e tbm WebBrowser, ja procurei na internet mas nao achei muita coisa, vc ja viu esse erro, ou sabe de algum material para eu estudar?
    Agradeço desde ja?

  71. #71 por MBallem em 04/07/2012 - 14:19

    Não sei dizer o que pode estar acontecendo Hugo, nunca usei JHTMLEditor, não sei como funcionam as coisas quando se usa ele.

  72. #72 por Alan em 07/07/2012 - 11:45

    Olá Márcio, tudo bem?
    Em primeiro lugar quero parabenizá-lo pela iniciativa e pelo post que em meu caso está ajudando muito.
    Marcio, estou com um problema que até já foi comentado mas eu não consegui resolve-lo ainda…
    Segui exatamente o código do post… porém está aparecendo o seguinte erro:

    javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587, response: 421
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1270)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
    at javax.mail.Service.connect(Service.java:297)
    at javax.mail.Service.connect(Service.java:156)
    at javax.mail.Service.connect(Service.java:105)
    at javax.mail.Transport.send0(Transport.java:168)
    at javax.mail.Transport.send(Transport.java:98)

    Será que poderia me ajudar a solucioná-lo??
    Desde já grato

  73. #73 por MBallem em 07/07/2012 - 13:15

    Olá Alan! Confirma se sua configuração está correta. Se seu usuário e senha correspondem. Tente outra conta de e-mail para testar, talvez seja um problema momentâneo com o Gmail.

  74. #74 por Alan em 09/07/2012 - 10:13

    Opa, bom dia Márcio,

    Então, fiz uma verificação aqui em meu pc e o anti-vírus estava bloqueando a saída … assim retornava esse erro ai…
    Porém agora está retornando outro erro que segue abaixo:

    javax.mail.MessagingException: 454 5.5.1 STARTTLS may not be repeated. a79sm32553142yhk.16

    at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1363)
    at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1223)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:378)
    at javax.mail.Service.connect(Service.java:297)
    at javax.mail.Service.connect(Service.java:156)
    at javax.mail.Service.connect(Service.java:105)
    at javax.mail.Transport.send0(Transport.java:168)
    at javax.mail.Transport.send(Transport.java:98)

    Bom, este erro agora só acontece quando tento enviar pela porta 587 indicada na tabela de servidores.
    Se eu tento enviar pela porta 25 funciona normalmente.
    Existe mais alguma configuração necessária para o funcionamento com a porta 587?

    Novamente grato pela ajuda!

  75. #75 por MBallem em 09/07/2012 - 12:25

    oi Alan, fiz um teste aqui e não teve problema nenhum com o envio pela porta 587. Estranho ele gerar essa exceção.
    Até é uma novidade para mim saber que o Gmail está aceitando o envio pela porta 25, tempos atrás não era possível. Trabalhe pela porta 25 mesmo então.

  76. #76 por Ernando Gomes em 08/08/2012 - 15:42

    Olá Marcio!
    Primeiramente parabéns pelo conteúdo. Utilizando a código que disponibilizaste aparece no console da aplicação as informações do envio do e-mail. Como faço para não exibi-las mais? Fiz aqui alguns testes mas não consegui.
    Suspeito que isso está dando estouro de memória no tomcat e o serviço do mesmo fica parando.
    Agradecendo a atenção!

  77. #77 por MBallem em 08/08/2012 - 17:29

    Olá Ernando, no tutorial tem um código que fala sobre isso na classe MailJavaSender linha 047.
    // Gera um log no console referente ao processo de envio
    session.setDebug(false);

  78. #78 por Ernando Gomes em 08/08/2012 - 17:31

    Obrigado!

  79. #79 por nildo em 08/08/2012 - 21:32

    BICHO, VC DETONOU, FD, MAS FD MESMO, PARABENS !
    ME ADD NO FACE.

  80. #80 por Ernando Gomes em 10/08/2012 - 16:28

    A aplicação que criei para o meu trabalho está enviando e-mails normalmente. Todavia, percebi que a aplicação demora muito tempo para enviar o e-mail. Quando a internet está ruim demora 30s e quando a internet está boa demora 15s, sendo que, quando estou em um provedor de e-mail(hotmail ou gmail) o enviu do e-mail não passa de 5 segundos (considerando e-mails de mesmo tamanho). Suponho que a demora seja pelo motivo de toda vez que a aplicação necessita enviar um e-mail ela precisa fazer login no e-mail de envio antes de envia-lo, diferente de quando estou no gmail por exemplo, que quando clico no botão enviar já fiz login no mesmo.
    O que devo fazer para a aplicação precisar fazer login no e-mail de enviu somente uma vez ao iniciar a aplicação? e não toda vez que precisa enviar o e-mail.

  81. #81 por MBallem em 10/08/2012 - 17:20

    Oi Ernando! Acho que da maneira que você quer fazer não é possível. A autenticação no servidor será feita sempre durante o envio da mensagem.

  82. #82 por tiago reis em 20/08/2012 - 8:50

    código limpo, comentado e funcionando… parabéns pela iniciativa!!! Abraço

  83. #83 por Hugo Rafael Alves em 20/08/2012 - 9:20

    olá marcio sou eu novamente, queria fazer mais pergunta, creio que nao seja possivel mas n~~ao custa perguntar. existe uma maneira de e anexar o arquivo antes de enviar, por exemplo como o hotmail, ou gmail faz? pois percebi que se for um arquivo muito grande ele demora a anexar e enviar, coloquei um aqruivo de 10MB e demorou uns 7 minutos para enviar, então me surgiu essa ideia se daria para anexar antes de enviar. já estou agradecendo, obrigado Abraços

  84. #84 por MBallem em 20/08/2012 - 11:42

    Olá Hugo! Até acho que pode ser possível, você pode criar uma classe só para o anexo, porém, isso não vai resolver o problema da demora.
    O que faz demorar é o próprio envio com um conteúdo grande. Porque o envio é como se você estivesse fazendo um upload para o seu servidor de email. No caso do gmail, hotmail, você faz o upload antes de enviar, quando anexa, assim o arquivo já está lá. Com o javamail não tem como você fazer esse upload separando o anexo do corpo da mensagem.
    Se não estou enganado, nos gerenciadores de email como o Outlook, você seleciona os anexos antes do envio, mas no momento que envia existe a demora também, porque tudo é enviado junto para o servidor de email para então o servidor de email enviar para o destinatário.

  85. #85 por Hugo Rafael em 06/09/2012 - 9:39

    MBallem entendi o que você disse e faz muito sentido, obrigado pela resposta. Aproveitando queria perguntar se tem como eu contar quantos emails eu tenho na caixa de entrada só contar, você conhece alguma maneira? Meu sistema esta quase pronto e seus post ajudaram muito. Mais uma vez Muito obrigado

  86. #86 por MBallem em 06/09/2012 - 11:27

    Oi Hugo, você está usando POP3 para baixar os e-mail’s do servidor também? É isso?
    Se for, você pode pegar o tamanho do array de mensagens para saber quantas tem na caixa de entrada.

    Por exemplo:

    Folder inbox = store.getFolder(“INBOX”);

    Message[] messages = inbox.getMessages();

    int numeroDeMensagens = messages.length;

  87. #87 por Hugo Rafael em 10/09/2012 - 11:35

    Olá MBallem sou de novo queria perguntar se tem como eu fazer download de imagem que esta na mensagem, e eu estou usando o pop3 sim. Você conhece alguma solução, pois eu faço o download da mensagem, porém quando tem imagem nela ela nao aparece. Agradeço mais uma vez Abraços

  88. #88 por MBallem em 10/09/2012 - 12:16

    Hugo, sua imagem não aparece porque você faz o download do código em um array de bytes. Você precisa pegar esse array e converter em imagem.
    Procure no google sobre como converter byte[] (que é o que você recebe) em imagem.

  89. #89 por MBallem em 10/09/2012 - 13:24

    Hugo, me enganei, na verdade você recebe a imagem em um objeto InputStream e não um byte[].

    Por exemplo, você pega a mensagem a partir do objeto Message e nele você tem acesso ao método getContent():

    Object content = messages[i].getContent();

    Multipart multipart = (Multipart) content;

    InputStream input = null;
    try {
    for (int i = 0; i < multipart.getCount(); i++) {
    input = (multipart.getBodyPart(i).getInputStream());

    byte myByte[] = new byte[input.available()];

    input.read(myByte);

    //se precisar de um objeto ImageIcon
    ImageIcon ii = new ImageIcon(myByte);

    //se precisar de um objeto Image
    Image image = ii.getImage();

    JOptionPane.showMessageDialog(null, "Imagem", "Imagem", 0, ii);
    }
    } catch (IOException e) {
    e.printStackTrace();
    } catch (MessagingException e) {
    e.printStackTrace();
    }

  90. #90 por Hugo Rafael em 17/09/2012 - 10:25

    Desculpe a demora para responder. Hum entendi bacana vou fazer isso muito obrigado novamente Abraços

  91. #91 por Hugo Rafael em 18/09/2012 - 9:06

    Olá mBallen consegui fazer o que você disse ele pega as imagens que estao na mensagem, mas como eu consigo colocar a imagem com o texto em um componente para leitura, teria o texto e a imagem juntos, pois eu fiz e e só mostra a o texto, a imagem fica com aquele x dizendo que nao tem imagem.Se puder dar algum exemplo. Abraços agradeço desde já

  92. #92 por Hugo Rafael em 18/09/2012 - 9:27

    Outra pergunta tbm ele pega um imagem por mensagem, se tiver mais de um imagem na mensagem ele pega só a primeira que ele encotra, com certeza tem um loop pra fazer, mas como seria esse loop em cada mensagem para pegar todas as imagens. Mais uma vez obrigado

  93. #93 por MBallem em 18/09/2012 - 13:52

    Hugo, no caso dos anexos, todas as imagens anexadas estão armazenadas no objeto Multipart e a cada passagem no loop será uma das imagens.

    Sobre a imagem junto ao corpo do email, ela deve estar vindo como uma tag html do tipo src, por isso que eu acho que você não consegue pegar essa imagem. Mas se você tiver um formulário que interprete html, talvez ela apareça.

  94. #94 por Hugo Rafael em 11/10/2012 - 11:03

    Olá MBallem Blz? eu queria te fazer uma pergunta tem como saber se meu email foi lido antes de fazer o download dele, pois queria fazer o downloads dos que nao foram lidos, você conehce alguma classe ou algoritmo pra isso. Desde já eu agradeço

  95. #95 por MBallem em 11/10/2012 - 11:40

    Oi Hugo, não sei te dizer se isso é possível. Você teria que dar uma boa lida na documentação das classes do JavaMail para ver se tem isso em algum método. Mas eu acho que não tem essa opção.

  96. #96 por Hugo Rafael em 11/10/2012 - 11:41

    Ok obrigado pela resposta rápida vou dar uma estuda mais afundo senão terei que ir atrás de outras soluções
    abraços.

  97. #97 por otavio em 21/10/2012 - 23:53

    para que funcione gmail tive que adicionar estas opções aqui no programa.

    props.setProperty(“mail.smtp.socketFactory.port”, mail.getSmtpPortMail()); //mesma porta para o socket
    props.setProperty(“mail.smtp.socketFactory.class”, “javax.net.ssl.SSLSocketFactory”);
    props.setProperty(“mail.smtp.socketFactory.fallback”, “false”);

  98. #98 por MBallem em 22/10/2012 - 11:48

    Olá otavio, estranho isso, eu não preciso usar essa configuração a mais que você citou. Só se no seu caso você esteja dentro de alguma rede com algum tipo de proteção a mais, dai talvez seja necessário fazer o acesso dessa forma.

  99. #99 por Jose Cossa em 16/11/2012 - 8:54

    muito bem feito o tutorial.

  100. #100 por MBallem em 16/11/2012 - 11:19

    Obrigado Jose Cossa, legal que tenha gostado.

  101. #101 por Paulo Henrique em 16/11/2012 - 13:38

    Bom estou começando nessa area de programaçao agora
    e nao tenho ideia como criar o metodo getters and setters das
    private Map toMailsUsers;
    private List fileMails;
    sera que poderia me ajudar

  102. #102 por MBallem em 16/11/2012 - 14:28

    Olá Paulo, se você não sabe criar os métodos get/set, deveria dar uma estudada nos conceitos de Java antes de já tentar sair tentando programar um sistema de envio de email.
    Nesse post> https://mballem.wordpress.com/2011/12/01/dicas-de-leitura/ eu cito alguns livros interessantes para iniciantes em Java.

    A baixo eu coloquei os respectivos métodos que você queria.

    T+

    public void setToMailUsers(Map toMailUsers) {
    this.toMailUsers = toMailUsers;
    }

    public Map getToMailUsers() {
    return toMailUsers;
    }

    public void setFileMails(List fileMails) {
    this.fileMails = fileMails;
    }

    public List getFileMails() {
    return fileMails;
    }

  103. #103 por Paulo Henrique em 16/11/2012 - 15:00

    Obrigado pela ajuda..
    valeu mesmo.
    tenha um boa sexta-feira e um otimo final de semana.

  104. #104 por MBallem em 16/11/2012 - 16:14

    De nada Paulo, bom final de semana para você também.
    T+

  105. #105 por Rafael em 19/11/2012 - 10:43

    Olá, gostaria de saber se é possível eu setar o Anexo como vazio ? estou tentando mas não está dando certo, ele gera uma FileNotFoundException

  106. #106 por MBallem em 19/11/2012 - 10:50

    Rafael, seria melhor não enviar anexo então. O anexo é um objeto, se o objeto for null, quando ele vai lançar nullpointer.

  107. #107 por Rafael em 19/11/2012 - 11:35

    Entendo, então, ai tento enviar como vazio, passando apenas um espaço vazio entende ? Mas ai ele gera o erro de caminho não encontrado. Tem como adicionar uma imagem sem ser por anexo ?
    Obrigado pelo retorno rápido da mensagem, e desculpa as perguntas mas sou iniciante e ainda tenho muitas dúvidas e coisas para aprender !

  108. #108 por MBallem em 19/11/2012 - 12:15

    Tem como adicionar uma imagem sem ser por anexo ?

    Rafael, se não vai enviar a imagem em anexo, não anexa nada. Não tem porque setar alguma coisa como vazio se você não pretende enviar.

    Me explica o motivo pelo qual você precisa setar como vazio se não vai enviar uma imagem. Ainda não entendi o motivo para isso.

  109. #109 por Filipe Souza em 28/11/2012 - 16:24

    oi, pessoal,

    Ocorriam problemas com o Enconding pra mim.

    Funcionou quando me livrei dos arquivos em anexo. Como eu só pretendo enviar emails de texto, ou seja, sem arquivos anexados, peguei e comentei o trecho de código que possui um “for” para adicionar todos os attached files. Agora tá funcionando certinho, só que sem envio de attach.

    Espero ajudar em algo.

    Att,

  110. #110 por MBallem em 28/11/2012 - 16:37

    Obrigado pela dica Filipe Souza.

  111. #111 por Marcos Castro de Souza em 08/12/2012 - 9:10

    Funcionou perfeitamente, muito simples, valeu amigo!

  112. #112 por MBallem em 08/12/2012 - 11:39

    Obrigado Marcos!

  113. #113 por Pedro em 21/12/2012 - 19:23

    bem legal o tutorial, bastante completo e esclarecedor…
    fiz um teste com o seu código, mas ele tá dando null poniter exception

    DEBUG: setDebug: JavaMail version 1.3
    Exception in thread “main” java.lang.NullPointerException
    at br.com.datasystems.mailjava.MailJavaSender.senderMail(MailJavaSender.java:66)
    at br.com.datasystems.mailjava.MailTester.main(MailTester.java:46)

    vc tem alguma noção do pq isso tá acontecendo?

    abraço e parabéns pelo tutorial

  114. #114 por MBallem em 21/12/2012 - 19:48

    Obrigado Pedro.
    Sobre seu problema, você precisa ver o porque está sendo lançada a exceção NullPointerException na linha 66 da classe MailJavaSender. Parece que é esse o problema. O exemplo postado está funcionando perfeitamente, você mudou alguma coisa?

  115. #115 por Pedro em 21/12/2012 - 20:24

    não mudei nada tá dando erro no for

    for (int i = 0; i < mail.getFileMails().size(); i++) {

  116. #116 por Pedro em 21/12/2012 - 20:28

    aahh tbem mudei apenas um método, na verdade deixei de chamá-lo pois o eclipse diz que não existe…

    properties.setProperty(“mail.smtp.auth”, mail.getSmtpAuth());

    esse método getSmtpAuth() o eclipse pede para eu criál-o, tem alguma sugestão do que pode estar ocorrendo? lembrando que eu estou usando o JavaMail versão 1.3

    Obrigado Abração!

  117. #117 por MBallem em 21/12/2012 - 20:41

    Pedro, o método getSmtpAuth() é da classe MailJava. É o método get() da variável de instancia smtpAuth. Não esqueça de gerar os métodos get/set da classe MailJava, no código postado eles não estão incluídos.

    Essa linha do erro: for (int i = 0; i < mail.getFileMails().size(); i++) {

    Se o erro é nela, veja se a lista getFileMails() não está nula. Pelo jeito está. Na classe de teste de envio, eu usei o método setFileMails() para inserir uma lista de arquivos que seriam enviados como anexo. Confere no seu código, acho que você não está setando isso.
    Veja aqui no código postado, classe MailTester linha 40.

  118. #118 por Pedro em 21/12/2012 - 21:04

    Marcio legal, eu alterei o código, eu tinha gerado os getters e setters, mas esqueci de declarar o atributo smtpAuth… bom eu fiz como está no código! setei o setFileMails() e agora deu esse erro:

    Exception in thread “main” java.lang.NullPointerException
    at java.util.Hashtable.put(Hashtable.java:432)
    at java.util.Properties.setProperty(Properties.java:161)
    at br.com.datasystems.mailjava.MailJavaSender.senderMail(MailJavaSender.java:27)
    at br.com.datasystems.mailjava.MailTester.main(MailTester.java:46)

    a linha 46 é essa

    properties.setProperty(“mail.smtp.auth”, mail.getSmtpAuth());

    veja como está o setFileMails();

    List files = new ArrayList();
    files.add(“C:\\images\\exit.png”);
    files.add(“C:\\images\\relatorioG.png”);
    files.add(“C:\\images\\sair.gif”);

    mj.setFileMails(files);

    Se puder me ajudar eu agradeço! Forte Abraço!

  119. #119 por Pedro em 21/12/2012 - 21:06

    Corrigindo:

    o erro na linha 27 é esse abaixo:

    46 -> properties.setProperty(“mail.smtp.auth”, mail.getSmtpAuth());

    e o erro na linha 46 é esse:

    try {
    27 -> new MailJavaSender().senderMail(mj);

    abraço!

  120. #120 por Pedro em 21/12/2012 - 21:08

    hj não sai esse comentário… rsrs

    Corrigindo novamente:

    o erro na linha 27 é esse abaixo:

    27 -> properties.setProperty(“mail.smtp.auth”, mail.getSmtpAuth());

    e o erro na linha 46 é esse:

    try {
    46 -> new MailJavaSender().senderMail(mj);

    abraço!

  121. #121 por Pedro em 21/12/2012 - 21:44

    Marcio achei o erro! eu não tava atribuindo o true no setSmtpAuth… hehe

    porém (chato eu hein! rs) deu esse erro! cara não faço idéia que erro é esse! se for fácil pra vc responder agradeço desde já

    DEBUG: setDebug: JavaMail version 1.3
    DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
    DEBUG SMTP: useEhlo true, useAuth false

    DEBUG: SMTPTransport trying to connect to host “smtp.gmail.com”, port 587

    DEBUG SMTP RCVD: 220 mx.google.com ESMTP g3sm11059075anj.14

    DEBUG: SMTPTransport connected to host “smtp.gmail.com”, port: 587

    DEBUG SMTP SENT: EHLO PedroPaulo-HP
    DEBUG SMTP RCVD: 250-mx.google.com at your service, [177.33.27.105]
    250-SIZE 35882577
    250-8BITMIME
    250-STARTTLS
    250 ENHANCEDSTATUSCODES

    DEBUG SMTP Found extension “SIZE”, arg “35882577”
    DEBUG SMTP Found extension “8BITMIME”, arg “”
    DEBUG SMTP Found extension “STARTTLS”, arg “”
    DEBUG SMTP Found extension “ENHANCEDSTATUSCODES”, arg “”
    DEBUG SMTP: use8bit false
    DEBUG SMTP SENT: MAIL FROM:
    DEBUG SMTP RCVD: 530 5.7.0 Must issue a STARTTLS command first. g3sm11059075anj.14

    DEBUG SMTP SENT: QUIT
    javax.mail.SendFailedException: Sending failed;
    nested exception is:
    class javax.mail.MessagingException: 530 5.7.0 Must issue a STARTTLS command first. g3sm11059075anj.14

    at javax.mail.Transport.send0(Transport.java:218)
    at javax.mail.Transport.send(Transport.java:80)
    at br.com.datasystems.mailjava.MailJavaSender.senderMail(MailJavaSender.java:92)
    at br.com.datasystems.mailjava.MailTester.main(MailTester.java:46)

    abraço

  122. #122 por MBallem em 21/12/2012 - 22:21

    Pedro, veja na linha 17 da classe MailTester do meu código a seguinte atribuição:
    mj.setSmtpStarttls(“true”);

    Acredito que você ou não fez essa atribuição ou passou o parâmetro como “false”.

    Ou na classe MailJavaSender está faltando essa linha:
    props.setProperty(“mail.smtp.starttls.enable”, mail.getSmtpStarttls());

    Confere isso.

  123. #123 por Pedro em 21/12/2012 - 22:41

    Marcio as duas linhas estão no meu código! como estava dando muito erro eu copiei e colei o seu código no meu! o erro que está dando é esse agora é esse:


    MAIL FROM:
    530-5.5.1 Authentication Required. Learn more at
    530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 s65sm6246952yhn.19
    DEBUG SMTP: got response code 530, with response: 530-5.5.1 Authentication Required. Learn more at
    530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 s65sm6246952yhn.19

    RSET
    250 2.1.5 Flushed s65sm6246952yhn.19
    DEBUG SMTP: MessagingException while sending
    com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required. Learn more at
    530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 s65sm6246952yhn.19

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2114)
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1618)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1119)
    at javax.mail.Transport.send0(Transport.java:195)
    at javax.mail.Transport.send(Transport.java:124)
    at br.com.datasystems.mailjava.MailJavaSender.senderMail(MailJavaSender.java:93)
    at br.com.datasystems.mailjava.MailTester.main(MailTester.java:46)
    QUIT
    221 2.0.0 closing connection s65sm6246952yhn.19
    com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required. Learn more at
    530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 s65sm6246952yhn.19

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2114)
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1618)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1119)
    at javax.mail.Transport.send0(Transport.java:195)
    at javax.mail.Transport.send(Transport.java:124)
    at br.com.datasystems.mailjava.MailJavaSender.senderMail(MailJavaSender.java:93)
    at br.com.datasystems.mailjava.MailTester.main(MailTester.java:46)

    acho que deve ser algum problema com autenticação! vou continuar tentando de qualquer forma muito obrigado e parabéns pelo teu blog! tenha certeza, é melhor do que muito Forum por ai!

    Abração!

  124. #124 por MBallem em 21/12/2012 - 22:48

    Sim Pedro, o problema é a autenticação. Não esqueça de colocar um e-mail e senha valida para que a autenticação seja realizada com sucesso.

  125. #125 por Jean Carlos em 23/01/2013 - 16:14

    Meu caro, boa tarde.

    Esse seu exemplo foi o mais top e completo de todos que achei na net.

    Como estou em estudo na implementação desta API em uma aplicação, entendi bastante os conceitos abordados aqui.

    Bom, agora vamos ao erros e gostaria de sua ajuda.

    Erro:

    DEBUG: setDebug: JavaMail version 1.4.5
    DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: trying to connect to host “smtp.gmail.com”, port 465, isSSL false
    javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
    nested exception is:
    java.net.ConnectException: Connection timed out: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
    at javax.mail.Service.connect(Service.java:317)
    at javax.mail.Service.connect(Service.java:176)
    at javax.mail.Service.connect(Service.java:125)
    at javax.mail.Transport.send0(Transport.java:194)
    at javax.mail.Transport.send(Transport.java:124)
    at br.mb.tutorialJavaMail.MailJavaSender.senderMail(MailJavaSender.java:94)
    at br.mb.tutorialJavaMail.MailTester.main(MailTester.java:47)
    Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:319)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:233)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1938)
    … 8 more

    O que pode ser isso??
    Alguma ideia??

    Obrigado e parabéns.

  126. #126 por MBallem em 23/01/2013 - 18:38

    Olá Jean, troca a porta de 465 para 587.

  127. #127 por Jean Carlos em 24/01/2013 - 11:08

    Marcos, mesmo trocando a porta de 465 para 587 olha o erro:

    DEBUG: setDebug: JavaMail version 1.4.5
    DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: trying to connect to host “smtp.gmail.com”, port 587, isSSL false
    javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
    nested exception is:
    java.net.ConnectException: Connection timed out: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
    at javax.mail.Service.connect(Service.java:317)
    at javax.mail.Service.connect(Service.java:176)
    at javax.mail.Service.connect(Service.java:125)
    at javax.mail.Transport.send0(Transport.java:194)
    at javax.mail.Transport.send(Transport.java:124)
    at br.mb.tutorialJavaMail.MailJavaSender.senderMail(MailJavaSender.java:94)
    at br.mb.tutorialJavaMail.MailTester.main(MailTester.java:47)
    Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:319)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:233)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1938)
    … 8 more

    Pode ter alguma coisa haver com proxy?

  128. #128 por MBallem em 24/01/2013 - 11:20

    Bom dia Jean, você setou a propriedade “mail.smtp.starttls.enable = true” ?

  129. #129 por Jean Carlos em 24/01/2013 - 11:27

    Em qual parte?

    Pois estas sãos as atribuições que fiz:

    mail.smtp.starttls.enable – na classe MailTester

    props.setProperty(“mail.smtp.starttls.enable”, mail.getSmtpStarttls()); – na classe MailJavaSender

  130. #130 por MBallem em 24/01/2013 - 11:56

    Ok, é que poderia ser uma das causas de erro caso não estivesse atribuído. Acabei de fazer um teste pelo gmail, por esse código que postei, e ta enviando sem problemas. Você falou em proxy, por acaso você usa proxy? Não sei ao certo se seria esse problema, mas acho que se usa algum tipo de proxy deva ter que colocar nas configurações das propriedades.

  131. #131 por Jean Carlos em 24/01/2013 - 12:04

    Aqui na empresa utiliza proxy sim.

    Vou fazer o seguinte, copiar o código e levar pra casa e testar.

    Caso dê certo (pois pelo que vi realmente não tem mistérios), eu posto um ok.

    Caso não, posto aqui também.

    Obrigado pela ajuda.

  132. #132 por MBallem em 24/01/2013 - 12:12

    Ok, acho que tem que configurar algo como isso aqui:
    props.setProperty(“proxySet”,”true”);

    props.setProperty(“ProxyHost”,”192.168.155.1″);
    props.setProperty(“ProxyPort”,”1080″);
    ou
    props.setProperty(“socksProxyHost”,”192.168.155.1″);
    props.setProperty(“socksProxyPort”,”1080″);

    Claro, as propriedades conforme o seu proxy.

  133. #133 por Jean Carlos em 25/01/2013 - 10:52

    Meu caro, bom dia.

    Seguinte.
    Parei pra reler meu código e realmente tem algo haver com a autenticação no smtp (ao menos é o que está parecendo).

    Posso te mandar/postar meu código pra vc dar uma olhada??

    Tá parecendo realmente um erro bem bobo, mas não estou conseguindo achar aonde está.

  134. #134 por MBallem em 25/01/2013 - 15:01

    Oi Jean, posta do seu projeto em algum lugar e me passa o link pra baixar.

  135. #135 por Jean Carlos em 28/01/2013 - 13:33

    Marcelo blz??

    Seguinte, não estou conseguindo colocar o projeto em nenhum repositório pq estou sem net em casa e aqui da empresa é bloqueado.

    Será que tem como te enviar por e-mail?

  136. #136 por MBallem em 29/01/2013 - 11:47

    Jean, adicionei no final do artigo o projeto para download. Baixa ele e testa na sua máquina. Não esqueça de alterar email, senha e o caminho das imagens.

  137. #137 por Luciana Carvalho em 01/02/2013 - 11:45

    Olá Márcio ! Em primeiro lugar, parabéns pelo tutorial !!! Muito bom !!! Fiz o tutorial e funcionou direitinho quando eu uso meu email do hotmail. Mas quando eu tento colocar o email da minha empresa ele dá o seguinte erro…

    220 2.0.0 Ready to start TLS
    javax.mail.MessagingException: Could not convert socket to TLS;
    nested exception is:
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1918)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:652)
    at javax.mail.Service.connect(Service.java:317)

    Você pode me dar uma luz ? Outra coisa, como faço para implementar o certificado de segurança que o meu servidor exige ?

    Obrigada!

  138. #138 por MBallem em 01/02/2013 - 11:58

    Olá Luciana!

    O e-mail de sua empresa está em um servidor de emails tipo hotmail, gmail, yahoo? Ou em um próprio da empresa?

    Se for um servidor de e-mail própria da empresa, você precisa perguntar a quem gerencia ele, a porta de acesso e também ver com ele se não existe algum tipo de segurança que precise ser liberada para você acessa-lo.

  139. #139 por Luciana Carvalho em 01/02/2013 - 13:53

    Obrigada pela resposta! Sim, o servidor de email é da própria empresa. Eu sei qual é a porta para acessa-lo e sei que precisa de um certificado de segurança, mas como colocar isso no programa? Alguma sugestão… ?

  140. #140 por MBallem em 01/02/2013 - 14:59

    Certificado de Segurança? Puxa… nem faço ideia. A classe de autenticação por exemplo, não tem nem um método para esse tipo de ação. Vai até o fórum GUJ e posta lá essa sua dúvida, talvez alguém por lá saiba algo a respeito.

  141. #141 por Eduardo em 01/03/2013 - 15:22

    Fala ae MBallem, to com um problema, quando eu mando um email, no lugar do nome do remetente, aparece a senha!!! esse setFromNameMail(String); ta servindo pra nd
    nem deixando ele como null n adianta.
    como posso resolver isso?

  142. #142 por MBallem em 01/03/2013 - 19:25

    Oi Eduardo… Aparece a senha?

    Isso não é possível. O campo da senha não tem nada haver com o do nome. Você modificou alguma coisa no código?

  143. #143 por Eduardo em 04/03/2013 - 10:01

    Eae MBallem, cara eu tinha usado o msg.setFrom setando o email e a senha, enves do nome, tava fazendo com pressa e me passaei por isso, mas agora arrumei.
    mas vlw o feedback. ótimo post pra aprende rapido a usa o javamail.

  144. #144 por MBallem em 04/03/2013 - 14:23

    Legal que resolveu Eduardo. Estava estranho mesmo o seu problema.
    T+

  145. #145 por Vinicius em 14/03/2013 - 21:29

    Show de bola estava precisando de algo assim, faço envio de vários emails no mês e comecei a desenvolver um aplicativo que envie em lote, vou começar por esse codigo, mas como posso anexar o Cco e o Cc

  146. #146 por MBallem em 14/03/2013 - 23:43

    Olá vinicius! Sim é possível. Existem três propriedades de envio: Message.RecipientType.TO, Message.RecipientType.CC e Message.RecipientType.BCC.

    Basta adicionar os emails referentes a cada tipo de envio.
    Veja a documentação: http://docs.oracle.com/javaee/1.4/api/javax/mail/Message.html

  147. #147 por Vinicius em 15/03/2013 - 12:15

    Ola, Obrigado por responder….mas ainda me encontro com dificuldades entendi em partes o que vc me passou mas na classe modelo, MailTester, não vi como posso aplicar essas propriedades, poderias me mostrar um exemplo?

  148. #148 por MBallem em 15/03/2013 - 13:06

    Vinicius, veja na classe MailJavaSender onde eu uso como exemplo Message.RecipientType.TO e Message.RecipientType.CC.

  149. #149 por Vinicius em 15/03/2013 - 20:55

    Ok, Nas no caso a minha pergunta é como colocar esse Message.RecipientType.TO e Message.RecipientType.CC. la na classe MailTester? não estou sabendo fazer uma orientação eu poderei desenrrolar…

    Grato.

  150. #150 por MBallem em 15/03/2013 - 22:59

    Olá Vinicius! Você pode criar uma lista para cada tipo de envio, To, CC ou BCC. Dai seta na lista os emails para cada tipo de envio.
    No caso eu fiz assim no tutorial, uma lista única, onde o 1° será enviado como TO e o demais como CC.

    //sete quantos destinatarios desejar
            Map<String, String> map = new HashMap<String, String>();
            map.put("destinatario1@bol.com.br", "email bol");
            map.put("destinatario2@msn.com", "email msn");
            map.put("destinatario3@ig.com.br", "email ig");
     
            mj.setToMailsUsers(map);
    

    Crie uma lista para cada tipo, e crie uma lógica que se adapte a isso.

  151. #151 por Vinicius em 16/03/2013 - 10:24

    Há pow, agora entendi, uma boa explicação é tudo, eu achava que todos esses 3 map.put() eram destinatários TO, mas só o primeiro. Obrigado vc é 10!

  152. #152 por Vinicius em 16/03/2013 - 11:10

    Nesse caso eu criaria a lista nesse exemplo que vc criou ou la na outra classe onde tem o IF?

  153. #153 por MBallem em 16/03/2013 - 16:28

    As listas você deve apenas ler na classe onde tem o IF. Você pode fazer o seguinte, na classe MailJava crie 3 atributos do tipo Map, mapTO, mapCC e mapBCC. Dai fica mais fácil inserir os emails referentes a cada tipo de envio.
    Na classe do IF, leia cada um dos 3 maps setando os tipos de envio para cada um deles. E na classe MailTester você adicionas os emails nesses maps.

  154. #154 por Vinicius em 16/03/2013 - 19:40

    Show Garotooooooooooooooo, Muito Obrigado! to desenvolvendo um programinha de envio de email em lote, onde eu cadastro pessoas com email, endereço arquivos relacionados a elas e faço o envio desses emails com um clique de botão. Ai vai mais uma pergunta, nesse caso eu tenho que criar um FOR no banco de dados para ele ir pegando os emails e fazendo o envio de cada um? vou postar o código aqui para melhor compreensão!

  155. #155 por MBallem em 16/03/2013 - 19:47

    Faça um for no banco e carregue os emails direto na lista de maps, assim você envia eles todos juntos ao invés de enviar um a um.

  156. #156 por Vinicius em 18/03/2013 - 16:48

    poderias me mostrar um exemplo??

  157. #157 por MBallem em 18/03/2013 - 20:07

    Infelizmente não tenho nenhum exemplo desse tipo. Mas basta fazer uma consulta no banco de dados, salvar o e-mail e o nome do usuário em um objeto e depois adicionar os que você quer nas listas To, CC e BCC.

  158. #158 por Rodrigo em 16/04/2013 - 11:19

    Bom dia Amigo, primeiramente gostei muito do tutorial, muito explicativo, porém tentando fazê-lo encontreo os seguintes erros:

    DEBUG: setDebug: JavaMail version 1.4.7
    DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: trying to connect to host “smtp.gmail.com”, port 587, isSSL false
    220 sgdsPC avast! SMTP proxy ready.
    DEBUG SMTP: connected to host “smtp.gmail.com”, port: 587

    EHLO sgds-PC
    250-sgdsPC
    250-AUTH=LOGIN
    250 AUTH LOGIN PLAIN
    DEBUG SMTP: Found extension “AUTH=LOGIN”, arg “”
    DEBUG SMTP: Found extension “AUTH”, arg “LOGIN PLAIN”
    DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
    DEBUG SMTP: AUTH LOGIN command trace suppressed
    DEBUG SMTP: AUTH LOGIN failed
    javax.mail.AuthenticationFailedException: 535 No SMTP server defined. Use real server address instead of 127.0.0.1 in your account.

    at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:826)
    at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:761)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:685)
    at javax.mail.Service.connect(Service.java:317)
    at javax.mail.Service.connect(Service.java:176)
    at javax.mail.Service.connect(Service.java:125)
    at javax.mail.Transport.send0(Transport.java:194)
    at javax.mail.Transport.send(Transport.java:124)
    at comercio.email.MailJavaSender.senderMail(MailJavaSender.java:107)
    at comercio.email.MailTester.main(MailTester.java:52)

  159. #159 por MBallem em 16/04/2013 - 12:04

    Olá Rodrigo, parece haver algum problema com a autenticação no Gmail. Revise seu nome de usuário e senha. Se não funcionar tente outra conta de e-mail para ver se o mesmo erro aparece.
    Fiz um teste aqui e não tive problema algum no envio, usei o Gmaiil também.

  160. #160 por Rodrigo em 16/04/2013 - 12:28

    Amigo eu coloquei o meu email (completo) e senha de acesso a conta do gmail, será que não esta havendo algum problema com o avast? pois aparece esta linha:
    DEBUG SMTP: trying to connect to host “smtp.gmail.com”, port 587, isSSL false
    220 sgdsPC avast! SMTP proxy ready.

  161. #161 por Rodrigo em 16/04/2013 - 12:38

    Era realmente o avast, deve haver alguma configuração para poder permitir a passagem…

  162. #162 por MBallem em 16/04/2013 - 12:39

    Pode até ser isso Rodrigo. “Desliga” o Avast e tente enviar o e-mail para testar.

  163. #163 por MBallem em 16/04/2013 - 12:42

    Você vai precisar encontrar no Avast a opção para liberar envio de e-mail, ou uma opção que libere o envio pela porta 587.

  164. #164 por Rodrigo em 16/04/2013 - 13:03

    encontrei a parte do scaneamento de saida smtp e desliguei e deu certo… de qualquer forma obrigado e parabéns pelo post!

  165. #165 por MBallem em 16/04/2013 - 14:39

    Legal que tenha conseguido Rodrigo.
    Abraço!

  166. #166 por Moises em 17/06/2013 - 14:24

    Parabéns Pelo Post Ajudou muito =D , estava com dificuldades no envio ao ver esse post esclareceu minhas duvidas muito obrigado :).

  167. #167 por MBallem em 17/06/2013 - 16:03

    Valeu Moises, legal que tenha sido útil para você.
    Abr!!!

  1. TDSA BLOG – Análise e Desenvolvimento de Sistemas » Blog Archive » Javamail
  2. Spring Framework 3 – Configurando o Serviço JavaMail « Programando com Java
%d blogueiros gostam disto: