API Commons Mail - Usando GMail

83 respostas
G

API Commons Mail - Usando GMail

Tudo bem Pessoal?

Resolvi fazer esse novo post para atender as pessoas que utilizaram um outro post meu relacionado a API Java Mail. E também pela quantidade de pessoas sugerindo o teste da API Commons Mail.

Então como o padrão utilizado no outro post sobre Java Mail vou explicar como fazer os downloads, setar o path e utilizar a API.

Só foi possível a criação dos post pois algumas pessoas contribuíram com material ou até com todo o material.

Colaboradores:
renatocustodio , claytoncastelli.

Parte 1 - Download API Commons Mail

Faça o download de todos os arquivos .jar e coloque-os de preferência em uma pasta relacionada ao seu projeto.


Parte 2 - Setando o classpath

  • como uso o eclipse, eu apenas adiciono os arquivos .jar no meu Path do projeto que estou usando, caso quem não usar o eclipse procure uma forma de setar o classpath, porque o resto do tutorial é aplicavel a todos os tipos de ferramenta.
  • clique com o botão direito e vá na opção Build Path e depois em Configute Build Path…
  • abrira uma janela, e nela vá na aba Libraries e depois clique no botao Add External JARs…
  • vá aonde esta os arquivos .jar e adicione um por um. Pronto, API Commons Mail adicionada ao Path.

[b]
Parte 3 - Envio de mensagem

  • Apenas com mensagem [/b]
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;

public class TesteCommons {
	
	public static void main(String[] args) {

		SimpleEmail email = new SimpleEmail();

		try {
		email.setDebug(true);
		email.setHostName("smtp.gmail.com");
		email.setAuthentication("seu_nome_de_usuario","sua_senha");
		email.setSSL(true);
		email.addTo("para_quem_enviara_email"); //pode ser qualquer um email
		email.setFrom("seu_email_gmail"); //aqui necessita ser o email que voce fara a autenticacao
		email.setSubject("Teste");
		email.setMsg("Mensagem Testando");
		email.send();

		} catch (EmailException e) {

		System.out.println(e.getMessage());

		} 

	}

}

- Envio de mensagem com arquivo

import java.io.File;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;

public class TesteCommonsFile {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		  // Create the attachment
		  
                  // Caminho do arquivo a ser enviado
		  File f = new File("C:\\Documents and Settings\\Gabriel\\Meus documentos\\Meus arquivos recebidos\\rms.java"); 
		  		  
		  EmailAttachment attachment = new EmailAttachment();
		  attachment.setPath(f.getPath()); // Obtem o caminho do arquivo
		  attachment.setDisposition(EmailAttachment.ATTACHMENT);
		  attachment.setDescription("File");
		  attachment.setName(f.getName()); // Obtem o nome do arquivo

		  try {
			// Create the email message
			MultiPartEmail email = new MultiPartEmail();
			email.setDebug(true);
			email.setHostName("smtp.gmail.com");
			email.setAuthentication("seu_usuario_login","sua_senha");
			email.setSSL(true);
			email.addTo("para_quem_enviara_email"); //pode ser qualquer um email
		        email.setFrom("seu_email_gmail"); //aqui necessita ser o email que voce fara a autenticacao
			email.setSubject("The file");
			email.setMsg("The file");

			// add the attachment
			email.attach(attachment);

			// send the email
			email.send();
		} catch (EmailException e) {
			e.printStackTrace();
		}
	}

}

Novamente queria lembrar que o tópico só pode ser iniciado com a ajuda dos Colaboradores: renatocustodio , claytoncastelli.

Observação:

  • Toda sugestão será bem vinda.
  • Quem possuir algo que possa ser agregado ao tópico só enviar que adicionaremos.

Link para API Java Mail: http://www.guj.com.br/posts/list/87637.java

Obrigado e espero que ajude várias pessoas.

83 Respostas

X

Grande Gabriel Massote!!

Post de excelente qualidade novamente!

É quase um Menino Email esse garoto! =D

G

Olha o menino properties falando rs.

Valeu Guga e ta na hora de você começar a participar do GUJ também.

Abração.

X

gabrielmassote:
Olha o menino properties falando rs.

Valeu Guga e ta na hora de você começar a participar do GUJ também.

Abração.

É uma idéia muito boa mesmo.
Acho que vou passar o post da Java Process Status do blog pra cá também.

G

XpLoDeR:
gabrielmassote:
Olha o menino properties falando rs.

Valeu Guga e ta na hora de você começar a participar do GUJ também.

Abração.

É uma idéia muito boa mesmo.
Acho que vou passar o post da Java Process Status do blog pra cá também.

Boa Boa.

Abração.

L

Post incrível… parabéns ao autor e seus colaboradores.

[]'s

C

mulekada, =D

sugestão

acho q seria legal esses posts entrarem como tutoriais no GUJ, né? tentem falar com algum moderador, acho uma boa

abraços e parabens

G

E ae carneiro?

valeu pela dica.

irei ver se consigo entrar em contado com algum admin e ver se consigo fazer como um tutorial.

valeu pela colcaboracao de todos.

abracos

H

E ai Gabriel,
mto bom a parada, já havia lido seu outro tópico.

Porém, não vi onde você utiliza o tratamento para servidor proxy. Onde você tratou isto?

G

Tudo bem hopster ?

então, utilizando a api commons mail eu não vi nada para poder colocar um servidor proxy.

Vou procurar saber e se achar posto aqui e lhe aviso.
Caso alguem descobrir ou você mesmo poste que atualizo o post.

abraço e desculpe não poder ajudar no momento.

W

Excelente Post, mas estou com alguns problemas.
Será que alguém me poderia ajudar?

O envio de e-mail funciona perfeitamente, mas quando tento colocar um attachment, surge um erro, como se não conseguisse encontrar a classe

“email.attach”

importei tudo correctamente, mas é impossível colocar o attach no e-mail.

Consigo criar o attach desta forma:

EmailAttachment attachment = new EmailAttachment();

attachment.setPath(filePath+teste.pdf);

attachment.setDisposition(EmailAttachment.ATTACHMENT);

attachment.setDescription(Picture of John);

attachment.setName(John);

… mas surge sempre um erro em:

email.attach(attachment);

que é o seguinte:

symbol  : method attach (org.apache.commons.mail.EmailAttachment)

location: class org.apache.commons.mail.SimpleEmail

email.attach(attachment);

Já alguem teve este problema?
Agradeço alguma ajuda

T

Excelente post!!
Uma dica…
Poderia explicar nos dois tutoriais que tu fez, este e o JavaMail para fazer leitura de e-mails também…

S

[color=darkred]Otimo post…

envia exemplos de recebimento de e-mails… [/color]

M

Aqui num funciona…

DEBUG SMTP: trying to connect to host “smtp.gmail.com”, port 465, isSSL false
Sending the email to the following server failed : smtp.gmail.com:25

Obs.: Me conecto a internet através do proxy AnalogX.

F

marthian_2:
Aqui num funciona…

DEBUG SMTP: trying to connect to host “smtp.gmail.com”, port 465, isSSL false
Sending the email to the following server failed : smtp.gmail.com:25

Obs.: Me conecto a internet através do proxy AnalogX.


Você não deve ter usado

email.setSSL(true);
M

Parece que descobri o motivo…

Como uso proxy, ao invés de colocar smtp.gmail.com tenho que colocar o ip da máquina que contém o proxy(o servidor), e lá é que gerencio as contas do e-mail.
O problema é que uso o analogx e pelo que vi em pesquisas ele é pessimo pra gerenciar e-mails. Ja intalei o winconnection, mais não sei como configurá-lo nem o www funciona mais…

Se alguém puder me ajudar, ficarei grato!

G


Parece que descobri o motivo…

Como uso proxy, ao invés de colocar smtp.gmail.com tenho que colocar o ip da máquina que contém o proxy(o servidor), e lá é que gerencio as contas do e-mail.
O problema é que uso o analogx e pelo que vi em pesquisas ele é pessimo pra gerenciar e-mails. Ja intalei o winconnection, mais não sei como configurá-lo nem o www funciona mais…

Se alguém puder me ajudar, ficarei grato!

Tudo bem marthian_2?

Desculpe meu caro, mas isso sai de meus conhecimentos.
Espero que alguem possa lhe ajudar ou que ja tenha resolvido o problema.
Abraço.

C

Gabriel eu sei que já tem tempo que você postou este blog, mas eu estou precisando de ajuda com ele.

Eu dei um control+c e um control+v na sua classe e coloquei as informações de uma conta de e-mail que eu tenho no gmail, mas não tá funcionando de jeito nenhum dando um erro em tempo de execução que mostra o seguinte:

Sending the email to the following server failed : smtp.gmail.com:25

O problema é com a minha conta? [email removido]

Tem como me ajudar??

Aguardo respostas…

OBrigado

F

O Gmail não funciona na porta 25
Aqui no GUj tem várias mensagens de como enviar email com gmail, dá uma procuradinha

G

Meu caro,

sem problemas por ter tempo que postei aqui. O tempo não importa, e sim que te ajude.
Mas tenta mudar a porta para 465 da seguinte forma:

email.setSmtpPort(465);

se der certo me fale.
abraco

F

Tenta ai
http://www.furutani.com.br/java/EnviarEmail.java

G

O que o nosso amigo furuntai mandou tem neste outro tópico:

API Java Mail - Usando GMail
http://www.guj.com.br/posts/list/87637.java

Agora você tem boas fontes. Tente resolver utilizando a Commons Mail que é mais simples de enviar e-mail. Caso não der, utilize um dos tópicos disponibilizados por mim e pelo furuntai.

Abraços.

C

Caramba!!! Nem pensei que vcs iam responder tão rápido… agora não dá pra testar pq não estou com o projeto neste pc, mas à tarde mesmo eu respondo…

VlW!

:smiley:

C

Gente Já testei aqui neste pc!!!

Tá funcionando sim :smiley: !

Obrigado pela ajuda, vou tentar participar mais no fórum, ajudando no que puder e compartilhando mais as minhas dúvidas…

T+++

G

Que bom que ajudou.

A intenção é essa mesmo.

Foi só alterar a porta para 465?

Abraco

C

foi sim :smiley:

Abraço

C

gabriel eu to com um probleminha aqui…

quando testei a classe em casa deu tudo bem, mas aqui na escola tá complicado…

package email;


import org.apache.commons.mail.EmailException;  
import org.apache.commons.mail.SimpleEmail;  

public class EnviarEmailMessagem {

	       
	     public static void main(String[] args) {  
	   
	         SimpleEmail email = new SimpleEmail();  
	   
	         try {  
	         email.setDebug(true);
	         email.setSmtpPort(25);
	         email.setHostName("mail.infonet.com.br");  
	         email.setAuthentication("cidfillippe.ssssssssss","xxxxxxxxxxx");  
	         email.setSSL(true);  
	         email.addTo("[email removido]"); //pode ser qualquer um email  
	         email.setFrom("[email removido]"); //aqui necessita ser o email que voce fara a autenticacao  
	         email.setSubject("Teste");  
	         email.setMsg("Mensagem Testando");  
	         email.send();  
	   
	         } catch (EmailException e) {  
	   
	         System.out.println(e.getMessage());  
	   
	         }   
	   
	     }  
	   
	 }

o erro que aparece é esse:

DEBUG SMTP: trying to connect to host "mail.infonet.com.br", port 465, isSSL false
Sending the email to the following server failed : mail.infonet.com.br:25

não entendo pq ele vai com porta 465 e ssl false se eu coloquei no código porta 25 e ssl true…

Por favor me dê um toque no que possa ser…

G

ve se a escola ai utilizar servidor proxy…
se sim tenta descobrir o ip pra setarmos no codigo…

abraco

F
Troca a linha email.setSSL(true);

por

email.setSSL(false);
C

Desculpe a demora pra reponder mas aconteceu um problema e eu tive que adiar esse projeto…
Quando eu tiver condições retornarei e tentarei solucioná-lo com vcs

Abraço

L

Vago mestre… eu tentei de tudo quanto é forma…

Segue seu código com meus dados…

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;

public class SendMail {

public static void main(String[] args) {  
	

 

    SimpleEmail email = new SimpleEmail();   

    try {  
    
    email.setDebug(true);   
    email.setHostName("smtp.gmail.com"); 
    
    
    
    email.setAuthentication("[email removido]","sssssssssssss");
   
    email.setSSL(true); 
 

    email.addTo("[email removido]"); //pode ser qualquer um email   
    email.setFrom("eresalessandro@gmail"); //aqui necessita ser o email que voce fara a autenticacao   
    email.setSubject("Teste");   
    email.setMsg("Mensagem Testando");   
    email.send();   

    } catch (EmailException e) {   

    System.out.println(e.getMessage());   

    }   

}

}

Carreguei todas as libs *.jars segundo sua orientação:

E estão me enviando o seguinte erro…

DEBUG: JavaMail version 1.4.2

DEBUG: successfully loaded resource: /META-INF/javamail.default.providers

DEBUG: Tables of loaded providers

DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}

DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}

DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map

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

[color=red][b][b]DEBUG SMTP: trying to connect to host <a href="http://smtp.gmail.com">smtp.gmail.com</a>, port 465, isSSL false[b]

Pude observar que no seu código do commons-mail você não faz menção a configuração da porta ela com certeza está pré-configurada pelas classes das libraries q eu adicione eu preciso fazer issu dar certo da uma força  véio valeus
L

já setei a porta para 587, com 467 e nada… que trem é esse de servidor proxy… tá complicando…rsrsrs

F

OTIMO POST
AQ FUNFOU DIREITINHO FICA GRATO

K

Posso estar a dizer asneiras, mas com este metodo so consigo enviar emails para outros da gmail… nao consigo para hotmail nem outro qualquer…

o que poderá ser?

EDIT: Esqueçam :slight_smile: enganei-me na caixa de texto onde ia buscar os endereços ahahah

Grande dica, valeu 8)

M

Muito bom…
Deu mais do que certo aqui.

[]'s

Marcelo André

H
// Create the email message
	 MultiPartEmail email = new MultiPartEmail();		 
	 
	 // novos parametros
	 email.setSmtpPort(465);
	 email.setAuthenticator(new DefaultAuthenticator(user, senha));
	 email.setDebug(false); // true if you want to debug
	 
	 email.setHostName(this.host);
	 		
	  
	 try{
		 
		 email.getMailSession().getProperties().put("mail.smtp.auth", "true");
		 email.getMailSession().getProperties().put("mail.debug", "true");
		 email.getMailSession().getProperties().put("mail.smtp.port", "465");
		 email.getMailSession().getProperties().put("mail.smtp.socketFactory.port", "465");
		 email.getMailSession().getProperties().put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		 email.getMailSession().getProperties().put("mail.smtp.socketFactory.fallback", "false");
		 email.getMailSession().getProperties().put("mail.smtp.starttls.enable", "true");
  		 
		 email.addTo("---@druid.com.br","eu");		  		
  		 email.addTo("---@druid.com.br","vc");
  		 	  		 email.setFrom(semail.getFrom());
  		 email.setSubject(semail.getTitulo());
  		 email.setMsg(semail.getEmail());		  		
		  
  		 // add the attachment
  		 if(!semail.getAnexoCaminho().equals("")){
  			email.attach(attachment);
  		 }
  		
  		 // send the email
  		 email.send();
  		 System.out.print("-");
  		 System.out.print("email enviado!");
  		 System.out.print("-");
		  
  	 }
	  	
	 catch(EmailException e){
		 System.out.print("erro no envio de email: " + e);
	 }
J

Pessoal,

eu estava usando o gmail tanto no java qdo no delphi, mas tive contas de e-mail desativadas, alguém passou por isso também?

T

Existe alguma configuração de ve ser feito no Tomcat?

Pergunto isso porque eu testei o Javamail no meu Tomcat local e ele enviou o anexo sem problemas, já no Tomcat do servidor o email chega com o anexo errado.

Assim:

------=_Part_1_3564915.1252007036439
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

The file
------=_Part_1_3564915.1252007036439
Content-Type: application/octet-stream; name=p.pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=p.pdf
Content-Description: File

JVBERi0xLjMKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFIvRmlsdGVyIC9GbGF0ZURlY29k
ZT4+CnN0cmVhbQp4nJ1Ya48VxxHVLgu73EXAYgI2DzN27PhOpDvpqn5/jRJFivhia79BPpnYiiUS
Qf6/lHO6Z6b7snfBMQgxt19Vfep1qt8NZhIdDP8uHz++3fzphzj8/N9NGR5++Nv88f7nzbtNmiz/
lIH++8e3w58vsTEPcfI+qhsuf9pImZIh28nn7IfozRSGy7ebV9ujcWcn67367fGIaZucbm+MO52y

E isso acontece tanto para o Javamail quanto para o Javamail + o Commons. Alguém sabe o porquê ?

A

Ola pessoa,
seguinte,

abaixo segue meu codigo, sendo q na linha comentada, ele nao encontra o metodo setSSL(true)
alguem sabe o que pode ser isso?

public class TesteCommons {
	
	public static void main(String[] args) {
		Email email = new HtmlEmail();
		try {
		email.setDebug(true);
		email.setSmtpPort(587);
		email.setHostName("smtp.gmail.com");
		email.setAuthentication("[email removido]","minhaSenha");
		email.addTo("[email removido]"); 
		email.setSSL(true);// the method setSSL(boolean) is undefined for the type email.
		email.setFrom("[email removido]");
		email.setSubject("Teste");
		email.setMsg("Mensagem Testando");
		email.send();
		} catch (EmailException e) {
			System.out.println(e.getMessage());
		} 
	}
}

[]'s

R

Dúvida:

Só funciona com Gmail? Todos as postagens utilizaram Gmail. Mudando os dados do servidor smtp, usuário e senha, para meu email da empresa, eu conseguiria enviar e-mails?

Valeu! Tks!

A

up

A

Consegui resolver o erro do método setSSL(true).

Mas agora está acontecendo o seguinte,
Ele chega até esse ponto no console e para:

DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL false
Sending the email to the following server failed : smtp.gmail.com:587

E abaixo segue meu código:

public class TesteCommons {
	
	public static void main(String[] args) {
		SimpleEmail email = new SimpleEmail();
		try {
			email.setSSL(true);
			System.out.println(email.isSSL());
			email.setDebug(true);
			email.setSmtpPort(587);
			email.setHostName("smtp.gmail.com");
			email.setAuthentication("Login","Senha");
			email.addTo("[email removido]"); 
			email.setFrom("[email removido]");
			email.setSubject("Teste");
			email.setMsg("Mensagem Testando");
			email.send();
		} catch (EmailException e) {
			System.out.println(e.getMessage());
		} 
	}
}
[]'s
G

Tudo bem andré?

Tenta ao setar sua porta para envio dos dados, utilizar a padrão (sem específicar alguma porta) ou a 465.

[]'s,
Gabriel.

A

eu descobri qual era o erro só esqueci de postar aqui de novo :lol:

o que acontece é que a api não tava cosenguindo passar pelo proxy aqui da empresa,
quando eu tentei em casa ou na faculdade foi tranquilo 8)

mas obrigado pela força ^^
foi bem util esse tuto :wink:
valews!

G

ahh então tudo tranquilo andré.

[]'s e boa tarde!

F

Ah moçada… testei aqui funcionou de boa…
a questão é que chegou como SPAM isso ja era ou deveria ser esperado ?
Abraço

E

Adorei o post velho, funfou de primeira parabéns

A

Vlwwww brother, execelente tópico. Parabéns. Irei testar esta API.

Funcionou de primeira aqui também, muito bom Vlw!

A

Andei pesquisando como ler e-mail, mas apanhei do api JavaMail. Tal como o tutorial mostra a api commons apache é extramamente mais fácil. No entanto, pesquisei sobre a apache commons li a api inteira mas, percebi que não tem nada em relação a ler e-mails. Alguém pode confirmar isso ae comigo se a api commons apache não é capaz de ler e-mails?

Vlw, abraço!

G

Flavio Luiz:
Ah moçada… testei aqui funcionou de boa…
a questão é que chegou como SPAM isso ja era ou deveria ser esperado ?
Abraço

e ae Flavio, mals a demora…
mas geralmente nao entra como spam nao…ao enviar para um numero muito grande de pessoas pode ser que receba como spam.

[]s

G

ArchV:
Andei pesquisando como ler e-mail, mas apanhei do api JavaMail. Tal como o tutorial mostra a api commons apache é extramamente mais fácil. No entanto, pesquisei sobre a apache commons li a api inteira mas, percebi que não tem nada em relação a ler e-mails. Alguém pode confirmar isso ae comigo se a api commons apache não é capaz de ler e-mails?

Vlw, abraço!

entao, pela commons eu nunca vi algo. só que pela api java mail eu lembro de ter visto a muito tempo.
se nao tiver encontrado uma solucao me fala que vou dar uma procurada.

[]'s

A

gabrielmassote:
ArchV:
Andei pesquisando como ler e-mail, mas apanhei do api JavaMail. Tal como o tutorial mostra a api commons apache é extramamente mais fácil. No entanto, pesquisei sobre a apache commons li a api inteira mas, percebi que não tem nada em relação a ler e-mails. Alguém pode confirmar isso ae comigo se a api commons apache não é capaz de ler e-mails?

Vlw, abraço!

entao, pela commons eu nunca vi algo. só que pela api java mail eu lembro de ter visto a muito tempo.
se nao tiver encontrado uma solucao me fala que vou dar uma procurada.

[]'s

Olá gabrielmassote, encontrei uma solução sim, através da javamail.

Obrigado pela atenção, vlw!

G

q bom cara…compartilha com a gente, ou escreve um pequeno tutorial que coloco com seu nome neste tópico. se for do seu interesse : )
qualquer coisa me mande uma mensagem privada.

parabens pela iniciativa.

[]s

A

gabrielmassote:
q bom cara…compartilha com a gente, ou escreve um pequeno tutorial que coloco com seu nome neste tópico. se for do seu interesse : )
qualquer coisa me mande uma mensagem privada.

parabens pela iniciativa.

[]s

Existe um bug na leitura (no entanto, está aproveitavel ainda a classe), estou tentando corrigir para otimizar o processo de leitura, hoje ou amanhã posto aqui.

Flw.

C

Galera… to tendo problemas aqui, mas estou utilizando somente a API Javamail mesmo, versão 1.3

O que acontece é o seguinte, já tentei com vários códigos que peguei na net por aí, mas meu e-mail nunca chega com anexo.
Na verdade o anexo chega no corpo em forma de texto, assim:

------=_Part_0_4875744.1272501496859
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Textando texto no meio
------=_Part_0_4875744.1272501496859
Content-Type: text/plain; name="C:\\arquivo_em_anexo.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="C:\\arquivo_em_anexo.txt"

conteudo do arquivo em anexo 123
conteudo do arquivo em anexo 456
conteudo do arquivo em anexo 789
conteudo do arquivo em anexo 012
conteudo do arquivo em anexo 345
------=_Part_0_4875744.1272501496859--

O código java que estou utilizando é o seguinte:

Session session = Session.getInstance(p, null);

			Message message = new MimeMessage(session);
			message.setFrom(new InternetAddress("[email removido]"));
			message.addRecipient(Message.RecipientType.TO, new InternetAddress("[email removido]"));
			message.setSubject("Hello JavaMail Attachment");

			BodyPart messageBodyPart = new MimeBodyPart();

			messageBodyPart.setText("Textando texto no meio");

			Multipart multipart = new MimeMultipart();
			multipart.addBodyPart(messageBodyPart);

			messageBodyPart = new MimeBodyPart();
			DataSource source = new FileDataSource("C:\\arquivo_em_anexo.txt");
			messageBodyPart.setDataHandler(new DataHandler(source));
			messageBodyPart.setFileName("C:\\arquivo_em_anexo.txt");
			multipart.addBodyPart(messageBodyPart);

			message.setContent(multipart);

			Transport tr = session.getTransport("smtp");
			tr.connect(host, fromAccount, password);
			tr.sendMessage(message, message.getAllRecipients());
			tr.close();

Detalhe: estou utilizando um exemplo da própria SUN… http://java.sun.com/developer/onlineTraining/JavaMail/contents.html#SendingAttachments

Já estou há dois dias vendo isso, sei lá, deve ser uma coisa pequena, mas já tentei com vários outros códigos e nada.

Alguém sabe o que pode estar acontecendo???

Valeu galera.

P

Caracas!! Funcionaa!! Valeu demais!!
Você é o cara!

“O mundo conspira a favor de quem rala!” by Pedro Pletitsch

S

Cara, gosatria de saber se tem como customizar o email enviado, tipo, colocar as letras em negrito, mudar a fonte…esse tipo de coisa! Formatar o email enviado! Tem como fazer isso?! Se tiver, vc poderia me indicar um tutorial ou material, para que eu aprenda?! Vlw pela forca e parabens pelo post, funcionow direitinho!

J

Só para adicionar mais informações ao assunto "Envio de email", quem sabe alguém pode se interessar por essa outra forma de enviar.

Eu utilizo (há bastante tempo) em todos os meus sistemas uma API muito simples, que é a JavaMail (com apenas dois arquivos .jars: mail.jar e activation.jar).

Segue um exemplo de envio de email como remetente GMail:
public static void setEnviarMensagemComAnexo(String emailDestinatario, String assunto, String mensagem, File arquivo) {
    boolean autenticar = true;
    boolean usaProxy = false;
    boolean debug = false;

    String smtpHost = "smtp.gmail.com";
    String smtpPorta = "587";

    String nomeEmitente = "João da Silva";
    String emailRemetente = "[email removido]";
    String userName = "SEU_LOGIN";
    String password = "SUA_SENHA";

    if (usaProxy) {
    }

    // Propriedades utilizadas no envio da mensagem
    Properties props = System.getProperties();

    // Se voce estiver atrás de um servidor Proxy é necessário "passar" por ele
    if (usaProxy) {
        props.put("http.proxyHost", "192.168.0.1");
        props.put("http.proxyPort", "1080"); 
    }

    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.debug", "true"); // default = false
    props.put("mail.smtp.debug", "true");
    props.put("mail.mime.charset", "ISO-8859-1");
    props.put("mail.smtp.host", smtpHost);
    props.put("mail.smtp.port", smtpPorta);

    // Especialmente para envio DE emails do Gmail
    boolean isGmail = emailRemetente.endsWith("gmail.com");
    if (isGmail) {
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.fallback", "false");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    }

    // Para fazer autenticação no servidor SMTP antes do envio da mensagem
    // Para o servidor saber que quem está tentando enviar a mensagem no 
    // seu nome é você mesmo - a maioria exigem isso
    javax.mail.Authenticator auth = null;
    if (autenticar) {
        props.put("mail.smtp.auth", "true");
        auth = new SMTPAuthenticator(userName, password);
    }

    Session session = Session.getInstance(props, auth);

    // se desejar ver no console toda a informação do envio
    session.setDebug(debug); 

    try {
        // Define a mensagem a ser enviada
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(emailRemetente, nomeEmitente));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(emailDestinatario));
        message.setSubject(assunto);

        // Cria o corpo da mensagem
        MimeBodyPart messageBodyPart = new MimeBodyPart();

        // Preenche a mensagem
        // Aqui você define se deseja enviar em puro texto ou mensagem
        // com formatação HTML
        messageBodyPart.setContent(mensagem, "text/html");
        Multipart multiPart = new MimeMultipart();
        multiPart.addBodyPart(messageBodyPart);

        // Se não desejar enviar nada passe um null nesse parâmetro
        if (arquivo != null) {
            messageBodyPart = new MimeBodyPart();
            DataSource source = new FileDataSource(arquivo);
            messageBodyPart.setDataHandler(new DataHandler(source));
            messageBodyPart.setFileName(arquivo.getAbsolutePath());
            multiPart.addBodyPart(messageBodyPart);
        }

        // Monta todo o corpo da mensagem (inclusive com o anexo)
        message.setContent(multiPart);

        // Tenta enviar a mensagem
        Transport.send(message);
    } catch (MessagingException ex) {
        ex.printStackTrace();
    } catch (UnsupportedEncodingException ex) {
        ex.printStackTrace();
    }
}
Simples né?

E para o colega que perguntou se pode formatar a mensagem, claro que pode, você cria em HTML.

G

Tudo bem javer?

Eu fiz um tópico antes deste que era referente a api java mail.
segue o link: http://www.guj.com.br/posts/list/87637.java

particularmente eu acho mais simples a commons, que utiliza a java mail. Mas a java mail em si é muito útil também.
muito bem lembrado.

e starkiller, reafirmando o que o javer disse, utilize envio de email html.
aqui tem exemplo da commons mail: http://commons.apache.org/email/userguide.html

[]s

G

Gabriel e Javer, parabéns!

Fiz um gerenciador de e-mails em Delphi uma vez e lembro que foi um inferno fazer o troço funcionar, mas sinceramente observando o exemplo em java me parece bem mais simples.

Só uma pergunta, nessas apis eu consigo configurar um servidor de emails e enviar meus emails com ele? tipo [email removido], tendeu? é possível fazer isso?

G

Creio que seja totalmente possível.

Porque ele funciona para hotmail, bol, gmail…ao menos lembro de ter testado e funcionado…

[]s

G

minha dúvida é só posso criar meu próprio serviço de email com a API, configurando um email qualquer e enviando para quem for preciso.

G

alguém?

G

Por exemplo:

[email removido]

e utilizar a api?

se for isso, creio que sim. Pois funciona em outros servidores de email.

Crie e teste pra ver.
Em breve farei este teste também.

[]s

G

mas a minha dúvida é se consigo CRIAR esse servidor e utilizar, não é utilizar um servidor qualquer, é criar o servidor com a API… acho q isso não da pra fazer né?

E

Galera que tiver precisando de ajudar fiz um exemplo de como enviar uma mensagem html utilizando API do cammons baseado nos códigos deste topico.

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Scanner;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;

public class TesteCommonsHTML {
	public static void main(String[] args) {
		try {
			// Define qual arquivo deseja enviar
			InputStream is = new FileInputStream("arquivo.html");

			// Le o arquivo para criar a string com o html
			Scanner arquivo = new Scanner(is);

			// Armazena todo conteudo do arquivo em uma StringBuffer
			StringBuffer msg = new StringBuffer();
			while (arquivo.hasNextLine()) {
				msg.append(arquivo.nextLine());
			}
			// Cria uma mensagem que seria de email do tipo html
			HtmlEmail email = new HtmlEmail();

			// Adiciona a String com o html no email
			email.setHtmlMsg(msg.toString());
			email.setTextMsg("Caso o destinatario nao suporte html aparece esta mensagem");

			// Define as configurações para enviar o email
			email.setDebug(true);
			email.setHostName("smtp.gmail.com");
			email.setAuthentication("SeuLogin", "SuaSenha");//email.setAuthentication("elias", "123456");
			email.setSSL(true);
			email.setFrom("SeuEmail");//email.setFrom("[email removido]");
			email.addTo("destinatario");//email.addTo("[email removido]");
			email.setSubject("Mensagem como Html");//Assunto do e-mail

			// Envia o E-Mail
			email.send();
            is.close();
		} catch (EmailException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}

este tópico me ajudou muito Obrigado a todos
espero ter ajudado alguem

I

Estou tendo problema em utilizar o envio de email quando invocado pelo contexto do tomcat 6.

Segue minha dúvida nesse post http://www.guj.com.br/posts/list/226522.java

Alguém pode me ajudar?

Att,

H

Cara muito bom este tutorial!
Me ajudou muito. :smiley:

A

Bom artigo!

E

Salve galera blz

alguem sabe se é possivel nessa API pedir uma confirmação de entrega de email , (estilo Outlook)

J

Baum…restaurando esse tópico, se eu precisar um proxy qual seria o procedimento?

M

não estou conseguindo baixar o activation

C

Olá ,

Excelente post , parabéns :slight_smile:

Achei esse código mais limpo do que o do seu outro post …

bacana …

G

E ae pessoal,

andei um pocuo afastado do guj. Vou precisar utilizar novamente o envio de email em um projeto que estou trabalhando e vou analisar o que tem por ai e esses meus post novamente.

Assim que tiver algumas novidades posto aqui pra vocês.

Abraço a todos.

X

O link do activation.jar está com erro então estou passando outro:
http://www.java2s.com/Code/JarGHIDownloadactivationjar.htm

S

Se eu mudar isso aqui :
email.setHostName(“smtp.gmail.com”);

Eu consigo fazer ele enviar emails pro MSN ???

T

Parabéns a todos os colaboradores, para melhorar ainda mais como faz o tratamento de erro quando passamos mais de um destinatário?

public static void enviaEmail(Mensagem mensagem) throws EmailException {
    SimpleEmail email = new SimpleEmail();
    email.setHostName(HOSTNAME);
    email.setFrom(EMAILORIGEM);
    email.setAuthentication(USERNAME, PASSWORD);
    email.setSmtpPort(PORTA);
    
    ///
    for (int i=0; i&lt;mensagem.getDestinatario().size(); i++) {
        email.addTo(mensagem.getDestinatario().get(i));
    }
    
    email.setSubject(mensagem.getTitulo());
    email.setMsg(mensagem.getMesagem());
    email.send();

}

Neste caso aqui, se um dos destinatários não existir nenhum e-mail é enviado… tem como contornar este problema? Tem como enviar apenas para os endereços válidos e ignorar os inválidos?>

R

.

R

Não funciona mais !!! pq ?

N

Parabéns pela iniciativa, gostei muito.

J

Galera bom dia.

Estou estudando esta classe Java mail para uma aplicação usando o flex.

Mas até então estou testando apenas a parte do java.

Fiz todo o código (TesteCommons), e tenho os seguintes erros:

The method setSSL(boolean) from the type Email is deprecated na linha email.setSSL(true); (o setSSL fica com uma linha no meio).

E o outro erro é quando executo o código:

DEBUG: JavaMail version 1.4.5 DEBUG: successfully loaded resource: /META-INF/javamail.default.providers DEBUG: Tables of loaded providers DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]} DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]} DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map 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 Sending the email to the following server failed : smtp.gmail.com:465

Ou seja, dá falha na porta SMTP.

Alguém tem alguma ideia do que possa ser?

Abraços e desde já agradeço.

R

Parabéns pelo post.

Porém, estou com uma dúvida!

Fiz uma rotina para me enviar um e-mail toda vez que uma determinada integração ocorre. A rotina de e-mail está funcionando, não da nenhum erro, porém, não vejo o e-mail na caixa de entrada e sim na caixa de saída.

Como uso o Google Empresa, estou enviando de [email removido] (email real) para [email removido] (Apelido do email real)

Quando mando e-mail usando o google mesmo, o e-mail fica na caixa de saída e na caixa de entrada normalmente.

Alguém já viu isso?

R

RodrigoValentim:
Parabéns pelo post.

Porém, estou com uma dúvida!

Fiz uma rotina para me enviar um e-mail toda vez que uma determinada integração ocorre. A rotina de e-mail está funcionando, não da nenhum erro, porém, não vejo o e-mail na caixa de entrada e sim na caixa de saída.

Como uso o Google Empresa, estou enviando de [email removido] (email real) para [email removido] (Apelido do email real)

Quando mando e-mail usando o google mesmo, o e-mail fica na caixa de saída e na caixa de entrada normalmente.

Alguém já viu isso?

Pessoal,
Acabo de fazer um teste aqui enviando do meu e-mail para o apelido do meu e-mail. Realmente, o e-mail só fica na caixa de saída.

ou seja, rotina funcionando 100%

Parabéns! :slight_smile:

R

RodrigoValentim:
RodrigoValentim:
Parabéns pelo post.

Porém, estou com uma dúvida!

Fiz uma rotina para me enviar um e-mail toda vez que uma determinada integração ocorre. A rotina de e-mail está funcionando, não da nenhum erro, porém, não vejo o e-mail na caixa de entrada e sim na caixa de saída.

Como uso o Google Empresa, estou enviando de [email removido] (email real) para [email removido] (Apelido do email real)

Quando mando e-mail usando o google mesmo, o e-mail fica na caixa de saída e na caixa de entrada normalmente.

Alguém já viu isso?

Pessoal,
Acabo de fazer um teste aqui enviando do meu e-mail para o apelido do meu e-mail. Realmente, o e-mail só fica na caixa de saída.

ou seja, rotina funcionando 100%

Parabéns! :)

Para solucionar este tipo de “problema” voce precisa dizer ao Google que o seu [email removido] pode enviar e-mail

Não vou por link pois, pode ser que o mesmo mude. Então, pesquisa no google “enviar e-mail alias gmail”
depois de cadastrar o alias como e-mail alternativo, você passa a receber este na sua caixa de entrada normalmente.

Criado 28 de setembro de 2008
Ultima resposta 16 de mai. de 2013
Respostas 83
Participantes 44