Enviar email usando java.mail

9 respostas
camilooscar

Pessoal, boa tarde.

Estou com problemas para enviar email utilizando o java.mail.

Segue o codigo da classe para enviar e da classe teste;

import java.util.Properties;
import javax.activation.CommandMap;
import javax.activation.MailcapCommandMap;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class EnviarEmail {

	private String host = "smtp.mail.yahoo.com.br"; /* endereço do servidor smtp */

	public class SMTPAuthenticator extends Authenticator {
		@Override
		public PasswordAuthentication getPasswordAuthentication() {
			String username = "[email removido]";
			String password = "xxxxxxxxx";
			return new PasswordAuthentication(username, password);
		}
	}

	public void EnviarEmailPara(String para, String assunto, String mensagem)
			throws Exception {
		String from = "[email removido]";
		String fileAttachment = "";

		Properties mailProps = System.getProperties();

		mailProps.put("mail.smtp.host", this.host);

		Authenticator auth = new SMTPAuthenticator();
		Session session = Session.getDefaultInstance(mailProps, auth);

		mailProps.put("mail.smtp.auth", "true");
		mailProps.put("mail.debug", "true");
		mailProps.put("mail.smtp.debug", "true");
		mailProps.put("mail.mime.charset", "ISO-8859-1");
		mailProps.put("mail.smtp.port", "587");

		MailcapCommandMap mc = (MailcapCommandMap) CommandMap
				.getDefaultCommandMap();
		mc
				.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
		mc
				.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
		mc
				.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
		mc
				.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
		mc
				.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
		CommandMap.setDefaultCommandMap(mc);

		// Definir mensagem
		MimeMessage message = new MimeMessage(session);
		message.setFrom(new InternetAddress(from));
		message.addRecipient(Message.RecipientType.TO,
				new InternetAddress(para));
		message.setSubject(assunto);

		// Criar parte da mensagem
		MimeBodyPart messageBodyPart = new MimeBodyPart();

		// Texto da mensagem
		messageBodyPart.setText(mensagem);

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

		// Enviar parte da mensagem
		message.setContent(multipart);

		message.setContent(mensagem.toString(), "text/html");

		// Enviar toda a mensagemSend the message
		Transport.send(message);
	}

}
public class testaEnvia {
	public static void main(String[] args) {
		EnviarEmail enviarEmail = new EnviarEmail();
		try {
			enviarEmail.EnviarEmailPara("[email removido]",	"teste", "testando aplicativo");
		} catch (Exception ex) {
			ex.printStackTrace();
		}

	}

}

o erro que dá, é este:
javax.mail.AuthenticationFailedException
at javax.mail.Service.connect(Service.java:319 )
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 be.com.camilo.jdbc.comunicacao.EnviarEmail.EnviarEmailPara(EnviarEmail.java:84)
at be.com.camilo.jdbc.comunicacao.testaEnvia.main(testaEnvia.java:7)

Ja mudei o email de destino pra yahoo, etc e sempre da o mesmo erro.

Ja nao sei mais oq fazer...

Por favor, me ajudem.

valew

9 Respostas

G

talvez o yahoo use smtp com ssl … e a porta q vc usa pra conectar seja outra …

mas é so uma hipotese

camilooscar

Ja tentei fazer isso, mudei pro gmail tambem e continua dando o mesmo erro…

T

Para o Yahoo, veja:

http://java.sun.com/products/javamail/FAQ.html#yahoomail

Para o GMail,

http://java.sun.com/products/javamail/FAQ.html#gmail

camilooscar

Opa, valew.

Vou estudar e qualquer dúvida eu posto aqui…

Assim q eu conseguir solucionar o problema, posto aqui pra todos.

Agora, só uma dúvida que já veio de cara…para cada tipo de e-mail tenho que ter um jeito de mandar?? ou esse tipo é para meu e-mail do yahoo, do gmail, etc.

E para hotmail? tem algo como isso que vc me passou?

Att

Camilo Oscar

T

Hotmail - http://jdavmail.sourceforge.net/

onyaszimba

Olha, este fórum me ajudou bastante, consegui enviar e-mail usando o GMail: http://forums.sun.com/thread.jspa?threadID=759635

onyaszimba

O curioso é que eu só consegui enviar as mensagens quando eu testo a aplicação localmente. Quando eu publiquei no servidor e tentei enviar deu o seguinte erro: “access denied (java.net.SocketPermission smtp.gmail.com resolve)”.

De volta à prancheta…

T

onyaszimba:
O curioso é que eu só consegui enviar as mensagens quando eu testo a aplicação localmente. Quando eu publiquei no servidor e tentei enviar deu o seguinte erro: “access denied (java.net.SocketPermission smtp.gmail.com resolve)”.

De volta à prancheta…

Dependendo do seu application server, ele não habilita acesso a sockets, a menos que seja alterada a policy correspondente. Você tem de consultar a documentação do seu application server (ou seja, não precisa mudar seu programa, mas precisa mexer em alguma configuração do seu application server).

onyaszimba

thingol:
onyaszimba:
O curioso é que eu só consegui enviar as mensagens quando eu testo a aplicação localmente. Quando eu publiquei no servidor e tentei enviar deu o seguinte erro: “access denied (java.net.SocketPermission smtp.gmail.com resolve)”.

De volta à prancheta…

Dependendo do seu application server, ele não habilita acesso a sockets, a menos que seja alterada a policy correspondente. Você tem de consultar a documentação do seu application server (ou seja, não precisa mudar seu programa, mas precisa mexer em alguma configuração do seu application server).

Pois é thingol. Mas o meu problema é que o meu “server”, no caso, é um host gratuito na internet. Então acho que não tem muito jeito mesmo. Mesmo assim eu consegui enviar e-mail (mesmo que testando na minha máquina) depois de três dias penando em cima disso. Valeu as dicas aí pessoal!

Criado 19 de janeiro de 2009
Ultima resposta 22 de jan. de 2009
Respostas 9
Participantes 4