Problema pra enviar email com JavaMail

13 respostas
fel_augusto

Olá a todos. Já procurei, não só nesse forum, algo parecido com o meu problema. Achei algumas coisas que ajudaram, mas não resolveu totalmente.
Estou com um problema para enviar 1 email através do JavaMail. Na verdade são 2 problemas: 1 é quando tento fazer isso usando JSP e outro é quando faço direto por um código java, como se fosse uma aplicação. Resolver o problema da aplicação, acho que já é o suficiente. O problema no código java é que não consigo fazer a autenticação. Como eu faço isso? Tentei pegar uns tutoriais na net, mas o que consegui foi o que está ai. Segue abaixo o código java:

Email.java

package teste;

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class Email{

	public Email() {

		Properties prop = new Properties();
		prop.put("mail.host", "smtp.mail.yahoo.com.br");
		prop.put("mail.stmp.port", "587");
		Authenticator auth = new testeAuth();
		Session session = Session.getInstance(prop, auth);
		MimeMessage msg = new MimeMessage(session);

		try {

			msg.setFrom(new InternetAddress("[email removido]", "Felipe"));
			msg.setRecipient(Message.RecipientType.TO, new InternetAddress("[email removido]", "Augusto"));

			msg.setSentDate(new Date());

			msg.setSubject("Teste de envio de email com JavaMail");
			msg.setText("Teste do que vai aparece no corpo do email");
			
			Transport.send(msg);
		} catch (Exception e) {
			System.out.println("Erro: " + e);
		}

	}
	public static void main(String[] args) {

		new Email();

	}

}

class testeAuth extends Authenticator{

	public testeAuth(){
		getPasswordAuthentication();
	}
	
	public PasswordAuthentication getPasswordAuthentication() {

		String username, password;
		username = "um nome que funciona";
		password = "senha que também funciona";

		return new PasswordAuthentication(username, password);
	}
	
	public static void main (String[] args){
		
		new testeAuth();
		
	}
	
}

PS: o username e o password estão funcionando, só troquei eles aqui no código.
O erro que da ao compilar esse código é:

Erro: com.sun.mail.smtp.SMTPSendFailedException: 530 authentication required - for help go to http://help.yahoo.com/help/us/mail/pop/pop-11.html

Se mudo o código para:

package teste;

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class Email3{

	public Email3() {

		try {
			
			Properties prop = new Properties();
			prop.put("mail.host", "smtp.mail.yahoo.com.br");
			prop.put("mail.port", "587");
			//prop.setProperty("mail.stmp.auth","true");
			//Authenticator auth = new testeAuth();
			Session session = Session.getInstance(prop, null);
			MimeMessage msg = new MimeMessage(session);
			
			msg.setFrom(new InternetAddress("[email removido]", "Felipe"));
			msg.setRecipient(Message.RecipientType.TO, new InternetAddress("[email removido]", "Augusto"));

			
			msg.setSentDate(new Date());

			msg.setSubject("Teste de envio de email com Java");
			msg.setText("Teste do que vai aparece no email");
			
			Transport transport = session.getTransport("smtp");
			transport.connect("smtp.mail.yahoo.com.br", "login", "senha");
			transport.sendMessage(msg, null);
			
		} catch (Exception e) {
			System.out.println("Erro: " + e);
		}

	}

	public static void main(String[] args) {

		new Email3();

	}

}

o erro muda para “javaNullPointerException”.

Alguém pode me ajudar?

vlw a todos, flw, e t+
Felipe Augusto

13 Respostas

MarcioTavares

O problema de autenticação aí provavelmente é causado porque o Yahoo não deve permitir envio de emails de locais fora do domínio deles (uma das regras anti-spam). Procure um outro servidor SMTP pra concluir o seu trabalho.

G

Para usar o SMTP do yahoo diretamente tem que pagar uma taxa anual, não me lembro se era R$ 20,00 ou U$ 20,00.
Valeu, use o gmail, que é gratuito.

TLCC

aqui tem um exemplo muito bom para fazer uso do javamail com autenticacao SMTP
http://www.cafeh.com.br/artigos/7/index.jsp

abs

fel_augusto

vlw a todos!!! agora funciono. acho q era o yahoo mesmo. depois de ler as respostas, mudei pro gmail, e de começo tinha dado um erro, que dizia que eu precisava habilitar o STARTTLS ou SSL. procurei no google, e achei a resposta na página: http://forum.java.sun.com/thread.jspa?threadID=617974 (tá em inglês).

agora ta funcionando certinhu. :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:
vlw a todos. se alguém quiser o código, é só pedir. :stuck_out_tongue:

agora eu tenho só uma pergunta: ao fazee o envio do email em uma aplicação, eu consegui faze o mesmo em uma página JSP. Qual é a melhor maneira para fazer esse envio de email? utilizando uma classe (uma aplicação java - nesse caso, utilizando servlet.request para pegar as informações), ou direto no JSP, e por que?

vlw, flw, t+

fel_augusto

Alguém poderia me dizer se o gmail aceita troca de remetente? não to conseguindo muda. sempre que tento, ele manda o meu email como from, mesmo eu dando um setFrom.
seria pq no gmail eu tenho q faze a autenticação - que eu axo q eh a causa do problema - ? se for, tem algum outro servidor smtp - de graça :stuck_out_tongue: - que permita fazer essa troca de remetente?

grato, Felipe Augusto.

T

fel_augusto:
Alguém poderia me dizer se o gmail aceita troca de remetente? não to conseguindo muda. sempre que tento, ele manda o meu email como from, mesmo eu dando um setFrom.
seria pq no gmail eu tenho q faze a autenticação - que eu axo q eh a causa do problema - ? se for, tem algum outro servidor smtp - de graça :stuck_out_tongue: - que permita fazer essa troca de remetente?

grato, Felipe Augusto.

Isso pra mim é spam. Que idéia é essa de trocar o remetente?

fel_augusto

spam… talvez :?: lol… ñ ñ. eh zuera. esse negócio de troca remetente foi um colega meu q falo q consegue faze em vb, e ele ñ manja java. e como em alguns tópicos que eu vi na net diziam poder trocar o remetente, eu axo q eh possível com JavaMail. Só queria sabe se com o gmail eh possivel faze isso.
e sem contar que uma aplicação útil para a troca do remetente eh útil no seguinte caso, por exemplo: você tem um site, com um banco de dados para o acesso. se você quiser enviar 1 email para ativação de novas contas, você poderia mandar com o remetente “[email removido]”.
não que eu vá fazer nem uma das coisas, mas só queria saber os recursos e o poder do JavaMail.
Ah sim… e qual seria o melhor? deixar o código para o envio de mensagem dentro do jsp, ou em uma classe? e por que?

vlw, flw, t+
Felipe Augusto

T

Ah, mas nesse caso você altera o campo “Reply-To”, não o remetente.

Alterar o remetente não é proibido pela especificação do protocolo SMTP, mas pode ser barrado, por exemplo, pelo Yahoo ou pelo Google Mail. O correto é alterar o “Reply-To”, usando o método “addHeader”.

Outra coisa legal que é possível mas nem sempre funciona é pedir recibo do email, alterando o campo “Disposition-Notification-To” (de novo, usando o método “addHeader”). Dessa forma, se o email for recebido pelo Outlook ou Thunderbird, por exemplo, e se o usuário concordar, uma mensagem de recibo será enviada para você (ou para o endereço de email configurado nesse “Disposition-Notification-To”.)

fel_augusto

vlw a todos. axo que eh soh.

flw, t+
Felipe Augusto

J

Bom dia cara. Meu eu estou com o mesmo problema que o seu e nao consigo encontrar nenhum exemplo meio que explicito, como voce ofereceu o codigo, teria como voce me passar para que eu possa me basear no seu codigo, por favor? Obrigado.

D

Pessoal, estou precisando desta solução que vcs desenvolverm

Se alguém puder ajudar, agradeço

P

Cara, se não for pedir demais, e ja que você ofereceu, será que vc não mandava esse código pra mim tbm? valew.

D

Cara, aprendi a usar JavaMail pelo livro “Desenvolvendo aplicações Web com JSP, Servlets, JavaServer Faces, Hibernate, EJB3 Persistence e AJAX”. Uso nas aplicações que desenvolvo e nunca deu problema. O livro ensinou a instalar e configurar um servidor Java free na própria máquina pra enviar, ai posso testar.
Os arquivos do livro estão na net, se quiser. O site pra baixar é www.integrator.com.br.

Espero que ajude.

:smiley:

Criado 6 de agosto de 2006
Ultima resposta 18 de out. de 2007
Respostas 13
Participantes 9