Problema pra enviar email com JavaMail

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("fel_augusto@yahoo.com.br", "Felipe"));
			msg.setRecipient(Message.RecipientType.TO, new InternetAddress("fel_augusto@yahoo.com.br", "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("fel_augusto@yahoo.com.br", "Felipe"));
			msg.setRecipient(Message.RecipientType.TO, new InternetAddress("fel_augusto@yahoo.com.br", "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

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.

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.

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

abs

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+

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.

[quote=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.[/quote]

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

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 “no_reply_message@site.com.br”.
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

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”.)

vlw a todos. axo que eh soh.

flw, t+
Felipe Augusto

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.

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

Se alguém puder ajudar, agradeço

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.

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: