Melhor maneira de enviar e-mail com Java

Pessoal, achei muito legal esse forum, mas sou novato e estou desenvolvendo uma aplicação em que precisa mandar email. Eu baixei o .zip do commons mail e gostaria de saber como instalar/utilizar para enfim poder estudar esse fórum. Obrigado.

Desculpe reviver o tópico depois de tanto tempo mas talvez a minha resposta ajude outras pessoas que caírem aqui.
Cassitos isso acontece pois o gmail e hotmail não aceitam envio de mensagens html no corpo do email, algumas versões do outlook e alguns servidores de email próprios para este tipo de envio (geralmente servidores de email marketing) permitem que vc envie codigo html no corpo do email.
Farzac esse erro ocorreu pois o endereço de smtp que vc está utilizando está incorreto ou não lhe dá permissão para ser usado, recomendo usar o do gmail ou do uol.
Abraço.

[quote=Joaozava]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.<init>(CommonsMail.java:13)
	at CommonsMail.main(CommonsMail.java:117)

a linha 24 é:

SimpleEmail email = new SimpleEmail();

Obrigado![/quote]

Amigo, você conseguiu resolver esse problema? esta dando esse erro pra mim também!
Me ajuda por favor?

Oi Wesleyobs,
Esse erro acontece pois está faltando o jar na pasta lib do projeto, vc pode resolver importando a biblioteca com os jars referentes ao simple mail pro seu projeto ou copiando e colando os jars diretamente na pasta onde estão os outros jars.
Verifique e poste aí o código da classe problemática caso não tenha resolvido.
Abs.

ww.raulferreira.com.br

[quote=raulsenaferreira]Oi Wesleyobs,
Esse erro acontece pois está faltando o jar na pasta lib do projeto, vc pode resolver importando a biblioteca com os jars referentes ao simple mail pro seu projeto ou copiando e colando os jars diretamente na pasta onde estão os outros jars.
Verifique e poste aí o código da classe problemática caso não tenha resolvido.
Abs.

ww.raulferreira.com.br[/quote]

Bom dia raulferreira.






Oi Wesley,
faça o seguinte:
crie uma nova classe e copie e cole os códigos abaixo e faça um teste:

  1. colocamos uma ação no botão que enviará o email

try { enviaEmailComAnexo(); } catch (EmailException ex) { Logger.getLogger(EnviaEmail.class.getName()).log(Level.SEVERE, null, ex); }

2)Colocamos uma ação no botão que anexa arquivos (JFileChooser), criei um textField e chamei de jTFAnexar

JFileChooser fileChooser = new JFileChooser(); int result = fileChooser.showOpenDialog(null); File file = fileChooser.getSelectedFile(); if (file != null && result == JFileChooser.APPROVE_OPTION) { jTFAnexar.setText(file.getAbsolutePath()); }

3)Criamos a função de envio de emails (com ou sem anexo) que foi descrita no passo 1

[code]public void enviaEmailComAnexo() throws EmailException{

	// cria o anexo.
	EmailAttachment anexo = new EmailAttachment();
	anexo.setPath(jTFAnexar.getText());

            //informações do destinatário
            destinatario ="email do destinatario";// coloque aqui o email do destinatario - MODIFIQUE AQUI
            nick = "nome do destinatario"; // coloque aqui o nome do destinatario - MODIFIQUE AQUI

            //se não houver anexo no email
            if(jTFAnexar.getText().equals("")){
			
	              // configura o email
           
	              MultiPartEmail email = new MultiPartEmail();
	              email.setHostName("smtp.gmail.com"); // o servidor SMTP para envio do e-mail
	              email.addTo(destinatario, nick); //destinatário
                          email.setFrom("coloqueaquiseuemail@gmail.com", "Seu Nome"); // remetente - MODIFIQUE AQUI
	
	              email.setSubject("assunto do e-mail"); // MODIFIQUE AQUI
	              email.setMsg("conteudo do e-mail"); //MODIFIQUE AQUI
                          email.setAuthentication("usuariodoemail", "senhadoemail");// MODIFIQUE AQUI
	
	              email.setSmtpPort(465);
	              email.setSSL(true);
	              email.setTLS(true);
	
	
	              // envia o email
	              email.send();
                          JOptionPane.showMessageDialog(null, "Mensagem enviada para "+ nick +" - "+ destinatario +" com sucesso!!");
                }
            
                else{//se houver anexo na mensagem
	              anexo.setDisposition(EmailAttachment.ATTACHMENT);
	              anexo.setDescription("Contém arquivo anexado");
	              anexo.setName("Titulo - Anexo");		
	  
	              // configura o email
           
	              MultiPartEmail email = new MultiPartEmail();
	              email.setHostName("smtp.gmail.com"); // o servidor SMTP para envio do e-mail
	              email.addTo(destinatario, nick); //destinatário
                          email.setFrom("seumail@gmail.com", "seu nome");//MODIFIQUE AQUI
	
	              email.setSubject("assunto do e-mail"); // MODIFIQUE AQUI
	              email.setMsg("conteudo do e-mail"); // MODIFIQUE AQUI
                          email.setAuthentication("usuario", "senha");//MODIFIQUE AQUI
	
	              email.setSmtpPort(465);
	              email.setSSL(true);
	              email.setTLS(true);
	
	              // adiciona arquivo(s) anexo(s)
	              email.attach(anexo);
	
	             // envia o email
	             email.send();
                        JOptionPane.showMessageDialog(null, "Mensagem enviada para "+ nick +" - "+ destinatario +" com sucesso!!");
            }

}[/code]

Não se esqueça de incluir no início os imports:

[code]import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;[/code]

Faça as substituições necessárias no passo 3, colocando os seus dados e faça o teste, se der erro posta aqui.
OBS: Eu uso esse código em programa desktop com BD embarcado, ou seja, ele funciona em qualquer lugar, provavelmente funcionará para você tambem. O mesmo foi baseado em um código aqui mesmo do fórum.

Abs

www.raulferreira.com.br
linkedin: http://www.linkedin.com/in/raulsenaferreira

Como fazer para enviar anexos que estão em memória e não arquivo físico?

Cara eu tenho um arquivo html e um jpeg como faço para enviar eles no corpo do email com o commons- email . grato

Mano, usa o código abaixo que vc se dá bem

[code]public static void enviarEmail(String titulo, String mensagem,
String destinatario, byte[] anexo, String nomeDoArquivo,
FormatosDeArquivo formatoDoArquivo) throws Exception,
MensagemException {

	if (Caracter.stringIsNullOrEmpty(destinatario))
		throw new MensagemException(
				Mensagens
						.getMensagem("O e-mail de destino não foi informado."));

	if (anexo == null || anexo.length == 0)
		throw new MensagemException(
				Mensagens.getMensagem("O anexo está vazio."));

	MultiPartEmail email = new MultiPartEmail();

	email.setHostName(smtp);
	email.setSmtpPort(587);
	email.setTLS(true);
	email.setFrom("email@email.com.br", "assunto");
	email.setAuthenticator(new DefaultAuthenticator(userName, password));

	email.setSubject(titulo);
	email.setMsg(mensagem);
	email.addTo(destinatario);

	ByteArrayDataSource source = new ByteArrayDataSource(anexo,
			Caracter.getContentType(formatoDoArquivo));

	email.attach(source, nomeDoArquivo, "");

	email.send();
}[/code]

http://www.vetusweb.com.br/

Mas esse código não vai colocar eles no anexo e não no corpo do email como os newsletters de lojas.

Daria para enviar um email para vários destinatários com o org.commons mail. grato

Bom dia,

estou tentando enviar um e-mail de teste mas não consigo de jeito nenhum.

[code] private void EnviarEmail() throws EmailException{
SimpleEmail email = new SimpleEmail();
email.setHostName(“smtp.mail.yahoo.com.br”);

email.setFrom("marcosacsj@yahoo.com.br");
    email.setAuthenticator(new DefaultAuthenticator("marcosacsj", "xxxx")); 

email.addTo("marcosacsj@yahoo.com.br");
    email.setSmtpPort(587);
//email.addCc("someone2@somedomain.com");
//email.addBcc("someone3@somedomain.com");
email.setSubject("Meu primeiro e-mail");
email.setMsg("Olá, estou usando o Commons E-mail API!");
email.setSSL(true);  
    email.setTLS(false);
    email.send();
}

[/code]

e o erro q está dando é

org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.mail.yahoo.com.br:587
	at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1242)
	at org.apache.commons.mail.Email.send(Email.java:1267)
	at javaapplication7.tela.EnviarEmail(tela.java:150)

alguem poderia me ajudar?

BOM DIA!!!

Gostei desse recurso de enviar email, senti facilidade de implementar … já utilizei muito isso no PHP. Porém… agora estou trabalhando com uma rede que está monitorada por um servidor PROXY onde preciso autenticar

IP-DO-SERVIDOR-PROXY ... PORTA-DO-SERVIDOR-PROXY.
DOMINIO/USUARIO-DE-REDE e ...  SENHA-DE-REDE.

Teria como fazermos isso para a máquina/servidor interno enviar o email?

Obrigadão!!!

to querendo saber tbm…
acho q por isso da esse erro:

Exception in thread "main" org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:465 at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1401) at org.apache.commons.mail.Email.send(Email.java:1428) at br.com.cdi.admlog.test.CommonsMail.enviaEmailSimples(CommonsMail.java:45) at br.com.cdi.admlog.test.CommonsMail.<init>(CommonsMail.java:24) at br.com.cdi.admlog.test.CommonsMail.main(CommonsMail.java:128)

Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465; nested exception is:

Caused by: java.net.ConnectException: Connection timed out: connect

[size=12]Could not connect to SMTP host: smtp.gmail.com, port: 465[/size]

[size=18]Could not connect to SMTP host: smtp.gmail.com, port: 465[/size]

[size=24]Could not connect to SMTP host: smtp.gmail.com, port: 465[/size]

Tente a porta 587.

Abs []

já tentei…

eu acho que é pq estou na empresa o glassfish deve ter q ser configurado de acordo com o servido de desenvolvimento :confused:

vo testar em casa… quando der