Boa tarde pessoal,
Preciso de ajuda com relação ao envio de e-mail para contas do gmail e comunicação com web services da NFe.
o código abaixo é da classe que envia os emails.
public class SendEMail {
private String mailSMTPServer = "smtp.gmail.com";
private String remetente = "remetente@gmail.com";
private String passEMail = "senha";
private String email = "destinatario@rhedesistemas.com.br";
private String nomeRemet = "Alessandro";
public void enviarEMail() throws MessagingException {
SimpleAuth auth;
String mailBody;
String mailSubject;
boolean isHTML;
MimeBodyPart attachFilePart;
FileDataSource fds;
MimeBodyPart textPart;
Properties mailProps;
Message msg;
Multipart mp;
isHTML = true;
mailBody = "Você esta recebendo o XML da nota fiscal eletronica.";
mailSubject = "[Rhede Sistemas] XML de nota fiscal eletrônica";
attachFilePart = new MimeBodyPart();
fds = new FileDataSource("D:/xmlCliente.xml");
attachFilePart.setDataHandler(new DataHandler(fds));
attachFilePart.setFileName(fds.getName());
textPart = new MimeBodyPart();
if (isHTML == true) {
textPart.setContent(mailBody, "text/html");
} else {
textPart.setContent(mailBody, "text/plain");
}
try {
mailProps = new Properties();
mailProps.setProperty("mail.transport.protocol", "smtp"); // define protocolo de envio como SMTP
mailProps.setProperty("mail.smtp.host", mailSMTPServer); // server SMTP do GMAIL
mailProps.put("mail.smtp.starttls.enable", "true");
mailProps.put("mail.smtp.auth", "true"); // ativa autenticacao
mailProps.put("mail.smtp.user", remetente); // usuario ou seja, a conta que esta enviando o email (tem que ser do GMAIL)
auth = new SimpleAuth(remetente, passEMail);
Session session = Session.getDefaultInstance(mailProps, auth);
session.setDebug(false);
msg = new MimeMessage(session);
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(email));
msg.setFrom(new InternetAddress(remetente, nomeRemet));
msg.setSubject(mailSubject);
mp = new MimeMultipart();
mp.addBodyPart(textPart);
mp.addBodyPart(attachFilePart);
msg.setContent(mp);
Transport tr;
tr = session.getTransport("smtp"); // define smtp para transporte
tr.connect(mailSMTPServer, remetente, passEMail);
msg.saveChanges(); // don't forget this
tr.sendMessage(msg, msg.getAllRecipients());
session = null;
tr.close();
tr = null;
mailProps.clear();
} catch (Exception e) {
e.printStackTrace();
}
auth = null;
mailBody = null;
mailSubject = null;
isHTML = false;
attachFilePart = null;
fds = null;
textPart = null;
mailProps = null;
msg = null;
mp = null;
}
}
// clase que retorna uma autenticacao para ser enviada e verificada pelo servidor smtp
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);
}
}
mailProps.put(“mail.smtp.starttls.enable”, “true”);
a linha de código acima é necessária para envio dos emails para contas do gmail, porem quando eu deixo esse código não consigo comunicação com nenhum web service da receita.
Esse é o erro quando tento comunicação com web service de envio da NFe por exemplo :
java.util.concurrent.ExecutionException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
java.util.concurrent.ExecutionException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Alguém tem alguma dica para solução desse problema ?