Olá!
Para enviar um email Java Mail com autenticação no servidor smtp siga os passos.
É preciso um classe que extenda
javax.mail.Authenticator
é nela onde será informado o usuário e a senha do servidor smtp.
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class Autenticacao extends Authenticator {
protected PasswordAuthentication
getPasswordAuthentication() {
System.out.println("Autenticando...");
return new PasswordAuthentication("usuario","senha");
}
}
Dica: as vezes é necessário informar ao servidor o usuário “completo”, por exemplo, jose@soares.com.br ao invés de somente jose.
Abaixo está a classe que envia o email.
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
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 EnviaEmail {
private static Session session = null;
private static final String contentType = "text/html";
private static String servidor = "localhost";
/*
* Método para enviar email em html
*/
public void enviarEmailHtml(String assunto,
String mensagem, String de) throws MessagingException {
String emailPara = "Roberto <roberto@xxxx.xxx.xx>";
Properties props = new Properties();
props.put("mail.smtp.host", servidor);
props.put("mail.smtp.auth", "true");
session = Session.getDefaultInstance(props, new Autenticacao());
Message message = new MimeMessage(session);
InternetAddress endMail = new InternetAddress(emailPara);
message.addRecipient(Message.RecipientType.TO, endMail);
InternetAddress fromEmail = new InternetAddress(de);
message.setFrom(fromEmail);
message.setSubject(assunto);
MimeMultipart mpRoot = new MimeMultipart("mixed");
MimeMultipart mpContent = new MimeMultipart("alternative");
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setContent(mensagem.toString(), contentType);
mpContent.addBodyPart(mbp1);
MimeBodyPart contentPartRoot = new MimeBodyPart();
contentPartRoot.setContent(mpContent);
mpRoot.addBodyPart(contentPartRoot);
message.setContent(mpRoot);
message.saveChanges();
System.out.println("Conectado...");
Transport.send(message);
System.out.println("Enviado.");
}
}
Os comandos que diferenciam o envio autenticado são:
// informa que é necessário fazer a autenticação
props.put("mail.smtp.auth", "true");
// Onde geralmente se vê passando null
//agora é passado um Authenticator
Session.getDefaultInstance(props, new Autenticacao());
Update – 01/09/2008
Para enviar um email usando o servidor do GMail use o método abaixo:
public void enviarEmail(String emailDest, String nomeDest,
String emailRemet, String nomeRemet,
String assunto, String corpo)
throws Exception {
Properties prop = System.getProperties();
prop.put("mail.smtp.host", "smtp.gmail.com");
prop.put("mail.smtp.auth", "true");
prop.put("mail.debug", "true");
prop.put("mail.smtp.debug", "true");
prop.put("mail.mime.charset", "ISO-8859-1");
prop.put("mail.smtp.port", "465");
prop.put("mail.smtp.starttls.enable", "true");
prop.put("mail.smtp.socketFactory.port", "465");
prop.put("mail.smtp.socketFactory.fallback", "false");
prop.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("email@gmail.com",
"Senha"); // Senha do gmail
}
};
Session session = Session.getInstance(prop, auth);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(emailRemet, nomeRemet));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(
emailDest, nomeDest));
message.setSubject(assunto);
message.setContent(corpo, "text/plain");
Transport.send(message);
}
Até mais,
Roberto