Olá Pessoal,
Antes de abrir este novo tópico procurei muito na net uma solução, fiz vários testes e infelizmente não consegui.
Estou executando o seguinte código:
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendMail {
private String mailSMTPServer;
private String mailSMTPServerPort;
public SendMail() {
mailSMTPServer = "smtp.gmail.com";
mailSMTPServerPort = "465";
}
public SendMail(String mailSMTPServer, String mailSMTPServerPort) {
this.mailSMTPServer = mailSMTPServer;
this.mailSMTPServerPort = mailSMTPServerPort;
}
public void sendMail(String to, String subject, String message)
throws Exception {
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", mailSMTPServer);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.user", xxxx@gmail.com);
props.put("mail.debug", "true");
props.put("mail.smtp.port", mailSMTPServerPort);
props.put("mail.smtp.socketFactory.port", mailSMTPServerPort);
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
SimpleAuth auth = null;
auth = new SimpleAuth("xxxx@gmail.com", "xxxxx");
Session session = Session.getDefaultInstance(props, auth);
session.setDebug(true);
Message msg = new MimeMessage(session);
try {
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
msg.setFrom(new InternetAddress(from));
msg.setSubject(subject);
msg.setContent(message, "text/plain");
} catch (Exception e) {
System.out.println(">> Erro: Completar Mensagem");
e.printStackTrace();
}
Transport tr;
try {
tr = session.getTransport("smtp");
tr.connect(mailSMTPServer, "xxxx@gmail.com",
"xxxxx");
msg.saveChanges();
tr.sendMessage(msg, msg.getAllRecipients());
tr.close();
} catch (Exception e) {
System.out.println(">> Erro: Envio Mensagem");
e.printStackTrace();
}
}
}
class SimpleAuth extends Authenticator {
public String username = null;
public String password = null;
public SimpleAuth(String user, String pwd) {
username = user;
password = pwd;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}
Através de uma classe Main e envia o e-mail com sucesso. Porém ao chamar esse método através do contexto (Tomcat 6) não funciona.
Após ler a documentação do Tomcat 6, vi que deveria fazer uma chamada JNDI para enviar o e-mail e fiz as seguintes alterações:
1- Incluir no web.xml da minha aplicacao:
Session Mail mail/Session javax.mail.Session Container2 - Incluir em TomcatHome/lib/ as libs do javamail (activation.jar e mail.jar)
3 - Incluir em TomcatHome/conf/context.xml
4 - Alterar minha classe de envio de email para:
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
public class SendMail {
private String mailSMTPServer;
private String mailSMTPServerPort;
public SendMail() {
mailSMTPServer = "smtp.gmail.com";
mailSMTPServerPort = "465";
}
public SendMail(String mailSMTPServer, String mailSMTPServerPort) {
this.mailSMTPServer = mailSMTPServer;
this.mailSMTPServerPort = mailSMTPServerPort;
}
public void sendMail(String to, String subject, String message)
throws Exception {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
Session session = (Session) envCtx.lookup("mail/Session");
Message msg = new MimeMessage(session);
try {
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
msg.setFrom(new InternetAddress("xxxxx@gmail.com"));
msg.setSubject(subject);
msg.setContent(message, "text/plain");
} catch (Exception e) {
System.out.println(">> Erro: Completar Mensagem");
e.printStackTrace();
}
Transport tr;
try {
tr = session.getTransport("smtp");
tr.connect(mailSMTPServer, "xxxxx@gmail.com", "xxxxx");
msg.saveChanges();
tr.sendMessage(msg, msg.getAllRecipients());
tr.close();
} catch (Exception e) {
System.out.println(">> Erro: Envio Mensagem");
e.printStackTrace();
}
}
}
O erro que da agora é o seguinte:
Erro: Envio Mensagem
javax.mail.MessagingException: Exception reading response;
nested exception is:
javax.net.ssl.SSLKeyException: RSA premaster secret error
at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1462)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1260)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
at javax.mail.Service.connect(Service.java:275)
at javax.mail.Service.connect(Service.java:156)
at br.com.bhaiyh.framework.modelo.base.util.SendMail.sendMail(SendMail.java:49)
Na teoria fiz tudo certo, porém não tem jeito de funcionar alguém sabe me dizer o que eu devo tentar agora?
Muito Obrigado.