Enviar e-mail do gmail e comunicação com WebService NF-e

2 respostas
A

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 = "[email removido]";
    private String passEMail = "senha";
    private String email = "[email removido]";
    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 ?

2 Respostas

david.cs20

Eu utilizo essas classes abaixo para enviar email com o gmail talvez lhe ajude…

public void sendMail(){
        try
        {
            Properties props = System.getProperties();
              props.put("mail.transport.protocol", "smtp");
              props.put("mail.smtp.starttls.enable","true");
              props.put("mail.smtp.host",smtpServ);
              props.put("mail.smtp.auth", "true");

              Authenticator auth = new SMTPAuthenticator();
              Session session = Session.getInstance(props, auth);
              Message msg = new MimeMessage(session);

              msg.setFrom(new InternetAddress(from));
              msg.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(email, false));

              msg.setText(nome);
              msg.setSubject("Sistema de Cadastro de Curriculum");
              msg.setText("\n\nCurriculum Cadastrado no Sitesma\n\n"+
                          "\n-- Dados Pessoais -- \n"+
                          "\n\nNome: "+nome+
                          "\nCPF: "+cpf+
                          "\nIdade: "+idade+
                          "\n\n-- Dados Profissionais -- \n"+
                          "\nExperiencia: \n"+experiencia+
                          "\n\nFormação: \n"+formacao+
                          "\n\nObrigado por ter se cadastrado no nosso Sistema.");

        }
        catch (Exception ex)
        {
          ex.printStackTrace();
          System.out.println("Exception "+ex);
        }
  }

  
      private class SMTPAuthenticator extends javax.mail.Authenticator {
      
        
        @Override
        public PasswordAuthentication getPasswordAuthentication() {
            String username = "[email removido]";
            String password = "java123456";
            return new PasswordAuthentication(username, password);
        }
A

A minha classe ela funciona, o problema é a propriedade : props.put(“mail.smtp.starttls.enable”,“true”);
quando deixo ela não consigo comunicação com os web services da NFe.

se tirar essa configuração faz a comunicação com web service da NFe, porem não envia os emails.

Deve estar havendo algum tipo conflito, que não consegui identificar ainda.

Criado 27 de outubro de 2010
Ultima resposta 27 de out. de 2010
Respostas 2
Participantes 2