Melhor maneira de enviar e-mail com Java

Galeraa,

dei uma vasculhada aqui na busca, no google. Encontrei e consegui implementar algumas.

Gostaria de saber qual a melhor maneira de enviar email.

Ex. quando o usuario abrir chamado quero mandar email para o analista responsavel e para o usuario que abriu o chamado.

javax.mail é suficiente ??
commons mail ??

agradeço !

Se você quer mandar um email de alerta (bem estúpido, só com texto puro, sem HTML nem nada), então JavaMail é suficiente.

Se você quer deixar todo enfeitado (como se fosse um papel timbrado, em HTML, cheio de figuras etc - você sabe, usuários gostam de firulas) você precisa usar o Commons Email.

[quote=thingol]Se você quer mandar um email de alerta (bem estúpido, só com texto puro, sem HTML nem nada), então JavaMail é suficiente.

Se você quer deixar todo enfeitado (como se fosse um papel timbrado, em HTML, cheio de figuras etc - você sabe, usuários gostam de firulas) você precisa usar o Commons Email.
[/quote]

Email de alerta mesmo que eu quero enviar … o unico porem é que eu vou ter que criar varios templates … pois serão varios estilos de email que serão enviados …

se eu quiser apenas colocar o logotipo da empresa no email, ja será necessario o commons mail ???

obrigadooo

Acho que de todo jeito é possível só com o java mail puro, mas usar o commons mail irá facilitar muito a sua vida, então não vejo porque não utilizar.

Eu já fiz coisas bem complicadas com HTML e JavaMail puro (fui obrigado a isso porque tinha de enfiar tudo isso em um applet) mas digo: só de você pôr uma única figura no seu email ele fica muito mais complicado, e você é obrigado a ler um monte de documentação esquisita para você entender como as coisas funcionam.
Use Commons Email para não ter esse tipo de dor de cabeça.

só pra ilustrar o tópico, exemplo simples usando o commons mail + gmail

[code]import java.net.MalformedURLException;
import java.net.URL;

import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;

public class CommonsMail {

public CommonsMail() throws EmailException, MalformedURLException {
	enviaEmailSimples();
	enviaEmailComAnexo();
	enviaEmailFormatoHtml();
}

/**
 * envia email simples(somente texto)
 * @throws EmailException
 */
public void enviaEmailSimples() throws EmailException {
	
	SimpleEmail email = new SimpleEmail();
	email.setHostName("smtp.gmail.com"); // o servidor SMTP para envio do e-mail
	email.addTo("teste@gmail.com", "Guilherme"); //destinatário
	email.setFrom("teste@gmail.com", "Eu"); // remetente
	email.setSubject("Teste -> Email simples"); // assunto do e-mail
	email.setMsg("Teste de Email utilizando commons-email"); //conteudo do e-mail
	email.setAuthentication("teste", "xxxxx");
	email.setSmtpPort(465);
	email.setSSL(true);
	email.setTLS(true);
	email.send();	
}


/**
 * envia email com arquivo anexo
 * @throws EmailException
 */
public void enviaEmailComAnexo() throws EmailException{
	
	// cria o anexo 1.
	EmailAttachment anexo1 = new EmailAttachment();
	anexo1.setPath("teste/teste.txt"); //caminho do arquivo (RAIZ_PROJETO/teste/teste.txt)
	anexo1.setDisposition(EmailAttachment.ATTACHMENT);
	anexo1.setDescription("Exemplo de arquivo anexo");
	anexo1.setName("teste.txt");		
	
	// cria o anexo 2.
	EmailAttachment anexo2 = new EmailAttachment();
	anexo2.setPath("teste/teste2.jsp"); //caminho do arquivo (RAIZ_PROJETO/teste/teste2.jsp)
	anexo2.setDisposition(EmailAttachment.ATTACHMENT);
	anexo2.setDescription("Exemplo de arquivo anexo");
	anexo2.setName("teste2.jsp");		
	
	// configura o email
	MultiPartEmail email = new MultiPartEmail();
	email.setHostName("smtp.gmail.com"); // o servidor SMTP para envio do e-mail
	email.addTo("teste@gmail.com", "Guilherme"); //destinatário
	email.setFrom("teste@gmail.com", "Eu"); // remetente
	email.setSubject("Teste -> Email com anexos"); // assunto do e-mail
	email.setMsg("Teste de Email utilizando commons-email"); //conteudo do e-mail
	email.setAuthentication("teste", "xxxxx");
	email.setSmtpPort(465);
	email.setSSL(true);
	email.setTLS(true);
	
	// adiciona arquivo(s) anexo(s)
	email.attach(anexo1);
	email.attach(anexo2);
	// envia o email
	email.send();
}


/**
 * Envia email no formato HTML
 * @throws EmailException 
 * @throws MalformedURLException 
 */
public void enviaEmailFormatoHtml() throws EmailException, MalformedURLException {
	
	HtmlEmail email = new HtmlEmail();
	
	// adiciona uma imagem ao corpo da mensagem e retorna seu id
	URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif");
	String cid = email.embed(url, "Apache logo");	
	
	// configura a mensagem para o formato HTML
	email.setHtmlMsg(&quot;&lt;html&gt;Logo do Apache - <img >&lt;/html&gt;&quot;);

	// configure uma mensagem alternativa caso o servidor não suporte HTML
	email.setTextMsg(&quot;Seu servidor de e-mail não suporta mensagem HTML&quot;);
	
	email.setHostName(&quot;smtp.gmail.com&quot;); // o servidor SMTP para envio do e-mail
	email.addTo(&quot;teste@gmail.com&quot;, &quot;Guilherme&quot;); //destinatário
	email.setFrom(&quot;teste@gmail.com&quot;, &quot;Eu&quot;); // remetente
	email.setSubject(&quot;Teste -&gt; Html Email&quot;); // assunto do e-mail
	email.setMsg(&quot;Teste de Email HTML utilizando commons-email&quot;); //conteudo do e-mail
	email.setAuthentication(&quot;teste&quot;, &quot;xxxxx&quot;);
	email.setSmtpPort(465);
	email.setSSL(true);
	email.setTLS(true);
	// envia email
	email.send();
}


/**
 * @param args
 * @throws EmailException 
 * @throws MalformedURLException 
 */
public static void main(String[] args) throws EmailException, MalformedURLException {
	new CommonsMail();
}

}
[/code]

1 curtida

vou usar o commons mesmo …

obrigado ae galera pelas opinioes !!!

legal que este topico ficou com um belissimo exemplo de envio de email …

mto bom !!!

olá!

muito bacana isto!

eu usava o JavaMail mas esse commons achei mais prático.

só um detalhe: o envio pelo GMail é lento mesmo? Pq quando vai enviar email mesmo com um texto simples, leva uns 7 segundos e minha conexão não é discada: 1MB.

ou faltou alguma configuração? fiz a mesma coisa do exemplo HTML acima.

vlw!

Mas se você estiver utilizando oracle dá pra fazer assim também.

http://emdia.wordpress.com/2008/11/01/enviar-e-mail-via-procedure-oracle/

Tentei rodar o exemplo acima e deu esse erro, alguém sabe porque?
Estou usando o eclipse e relacionei o jar no meu Build Path, não estou entendendo.

Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Message
	at CommonsMail.enviaEmailSimples(CommonsMail.java:24)
	at CommonsMail.&lt;init&gt;(CommonsMail.java:13)
	at CommonsMail.main(CommonsMail.java:117)

a linha 24 é:

SimpleEmail email = new SimpleEmail();

Obrigado!

[quote=cassitos]olá!

muito bacana isto!

eu usava o JavaMail mas esse commons achei mais prático.

só um detalhe: o envio pelo GMail é lento mesmo? Pq quando vai enviar email mesmo com um texto simples, leva uns 7 segundos e minha conexão não é discada: 1MB.

ou faltou alguma configuração? fiz a mesma coisa do exemplo HTML acima.

vlw![/quote]

é eu tbm achei lentoo … mas eu acho q é por causa da autenticação, ssl … eu testei usando o smtp da uol e foi rapidinho !

hummm então está tranqüilo!
estou utilizando GMail temporariamente mesmo.
vlw!

Olá…
Mas como ficaria o jsp que envia o arquivo em anexo, pq pelo que entendi o já tem o caminho com o arquivo anexado…eu gostaria de anexar o arquivo.
Abraço

olá!
pessoal, estava conseguindo utilizar este commons mail para enviar no format html na boa.

até que hoje tive que anexar arquivo .html também.

o que está ocorrendo é que agora o texto que antes ia no ‘corpo’ do e-mail, está sendo enviado agora como um anexo, chamado ‘noname.html’!

ou seja, está indo o anexo que coloquei na mão e mais este noname que na verdade é o texto que deveria estar sendo exibido no corpo.

só acontece se enviar e-mail com anexo.

alguma idéia?

estou procurando na documentação alguma alternativa mas não encontrei nada até agora.

vlw

Boa noite Galera

Eu estou utilizando o codigo postado pelo finotti e apenas enviando o email simples para o servidor smtp.yahoo.com.br e estou com o seguinte erro que segue logo abaixo:

Alguem sabe o motivo do erro?

init:
deps-jar:
compile-single:
run-single:
Exception in thread “main” org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.yahoo.com.br:465
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1138)
at org.apache.commons.mail.Email.send(Email.java:1163)
at br.com.farzacsystem.CommonsMail.enviaEmailSimples(CommonsMail.java:45)
at br.com.farzacsystem.CommonsMail.(CommonsMail.java:24)
at br.com.farzacsystem.CommonsMail.main(CommonsMail.java:128)
Caused by: javax.mail.MessagingException: Unknown SMTP host: smtp.yahoo.com.br;
nested exception is:
java.net.UnknownHostException: smtp.yahoo.com.br
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1389)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
at javax.mail.Service.connect(Service.java:310)
at javax.mail.Service.connect(Service.java:169)
at javax.mail.Service.connect(Service.java:118)
at javax.mail.Transport.send0(Transport.java:188)
at javax.mail.Transport.send(Transport.java:118)
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1128)
… 4 more
Caused by: java.net.UnknownHostException: smtp.yahoo.com.br
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:550)
at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:163)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359)
… 11 more
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

Experimenta usar um servidor SMTP próprio ao invés de smtp.yahoo.com.br

Ola amigo

Como assim servidor proprio?

Valeu cara, obrigado, resolveu o meu problema!!!

pow farzac , creio que seja a porta smtp que vc ta colocando errada, dei uma olhada na internet e achei pro yahoo o smtp numero 25, tenta ai e retorna pra gente :wink:

aff, tinha duas paginas…rs, nao vi, fora que o post era velho q ele só…rsrs