Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Envio Email

Estou com problema no envio de email que possua texto , html e arquivo em anexo . O problema somente ocorre quandoo email é enviado para qmail, o arquivo anexo não esta sendo enviado. Estou usando o pacote javax.mail. Alguém pode me enviar um exemplo. Grata

9 respostas
solução!

Ola, Christiane Girão de Andrade Cavalcante !

Um Exemplo de envio com anexo.

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendFileEmail {

   public static void main(String [] args) {

      String to = "testePara@gmail.com";
      String from = "testeDe@gmail.com";
      String host = "localhost";

      Properties properties = System.getProperties();
      properties.setProperty("mail.smtp.host", host);

      Session session = Session.getDefaultInstance(properties);

      try{

         MimeMessage message = new MimeMessage(session);
         message.setFrom(new InternetAddress(from));
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

         message.setSubject("SUBJECT !");

         BodyPart messageBodyPart = new MimeBodyPart();
         messageBodyPart.setText("CORPO DA MENSAGEM");

         Multipart multipart = new MimeMultipart();
         multipart.addBodyPart(messageBodyPart);

         messageBodyPart = new MimeBodyPart();
         String arquivo = "SEU_ARQUIVO.txt";
         DataSource source = new FileDataSource(arquivo);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(arquivo);
         multipart.addBodyPart(messageBodyPart);

         message.setContent(multipart);

         Transport.send(message);

      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Abraço !

Obrigada pelo exemplo mas meu email deve conter tambem uma parte html. Tentei criar um novo MimeBodyPart e ao enviar o email adicionando a parte html o envio do anexo nao é feito.

É importante lembrar que isto somente ocorre quando o email destino é um qmail.

Existe alguma limitação de envio html para qmail?

MimeBodyPart htmlmessageBodyPart = new MimeBodyPart();
multipart.addBodyPart(htmlmessageBodyPart );

Oie Christiane Girão de Andrade Cavalcante !

Poderia passar seu código para eu dar uma olhada ?

Abraço!

Bom dia Cristiano,

segue codigo

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmailTeste {

    public static void main(String[] args) {

        String host = "smtp.gmail.com";
        String from = "testefrom@gmail.com";
        String to = "teste10@gmail.com";
        String subject = "Teste envio email";
        String user = "teste10@gmail.com";
        String password = "minha senha";
        String sendFile = "SEU_ARQUIVO.txt";
        String html = "<html><head></head><body>   teste </body> </html>";
        String text = "corpo email";
        try {

            Properties props = new Properties();
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.auth", "true");                    

            Session sessao = Session.getDefaultInstance(props, null);
            sessao.setDebug(false);

            MimeMessage message = new MimeMessage(sessao);

            // From
            message.setFrom(new InternetAddress(from));

            // Subject
            message.setSubject(subject);
            //to
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

            //  texto
            MimeBodyPart plainTextPart = new MimeBodyPart();
            plainTextPart.setContent(text, "text/plain");

            // htmlml 
            MimeBodyPart htmlTextPart = new MimeBodyPart();
            htmlTextPart.setContent(html, "text/html");

            Multipart mp = new MimeMultipart("alternative");

            mp.addBodyPart(plainTextPart);            
            mp.addBodyPart(htmlTextPart);
            FileDataSource fds;
            MimeBodyPart mbp2 = new MimeBodyPart();
            fds = new FileDataSource(sendFile);

            mbp2 = new MimeBodyPart();
            mbp2.setDataHandler(new DataHandler(fds));
            mbp2.setFileName(fds.getName());
            mbp2.setHeader("Content-ID", "imageID");
            mp.addBodyPart(mbp2);

            message.saveChanges();

            Transport transport = sessao.getTransport("smtp");

            transport.connect(host, user, password);

            transport.sendMessage(message, message.getAllRecipients());

            transport.close();

        } catch (AddressException ex) {
            ex.printStackTrace();
        } catch (MessagingException ex) {
            ex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}

Ola, Christiane !

Da uma olhada nesse exemplo de envio de email com anexo com configuração do gmail.

Ajusta com seus dados e rode um teste, por gentileza!

import java.io.InputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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;
import javax.mail.util.ByteArrayDataSource;

public class EnviaEmail {

    public void enviar() {
        try {

            //seu gmail
            final String usuario = "SEU_EMAIL@gmail.com";
            final String senha = "SUA_SENHA";

            //configuração do gmail
            Properties mailProps = new Properties();
            mailProps.put("mail.transport.protocol", "smtp");
            mailProps.put("mail.smtp.starttls.enable","true");
            mailProps.put("mail.smtp.host", "smtp.gmail.com");
            mailProps.put("mail.smtp.auth", "true");
            mailProps.put("mail.smtp.user", usuario);
            mailProps.put("mail.debug", "true");
            mailProps.put("mail.smtp.port", "465");
            mailProps.put("mail.smtp.socketFactory.port", "465");
            mailProps.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            mailProps.put("mail.smtp.socketFactory.fallback", "false");

            //ATUTENTICAÇÂO
            Session mailSession = Session.getInstance(mailProps, new Authenticator() {                    
                public PasswordAuthentication getPasswordAuthentication(){                
                    return new PasswordAuthentication(usuario, senha);
                }
            });
            mailSession.setDebug(false);

            //mensagem
            Message mailMessage = new MimeMessage(mailSession);

            //remetente
            mailMessage.setFrom(new InternetAddress(usuario));

            //destinatario
            mailMessage.setRecipients(Message.RecipientType.TO, InternetAddress.parse(usuario));        

            //corpo do email
            MimeBodyPart mbpMensagem = new MimeBodyPart();
            mbpMensagem.setText("Segue em anexo, imagem do novo focus hath.");

            //partes do email
            Multipart mp = new MimeMultipart();
            mp.addBodyPart(mbpMensagem);

            //anexo, ta no mesmo diretorio da classe.
            String arquivo = "SEU_ARQUIVO_PARA_IR_DE_ANEXO";
            InputStream is = getClass().getResourceAsStream(arquivo);

            //setando o anexo
            MimeBodyPart mbpAnexo = new MimeBodyPart();
            mbpAnexo.setDataHandler(new DataHandler(new ByteArrayDataSource(is, "application/text")));        
            mbpAnexo.setFileName(arquivo);
            mp.addBodyPart(mbpAnexo);

            //assunto do email
            mailMessage.setSubject("SEU_SUBJECT_AKI");

            //seleciona o conteudo
            mailMessage.setContent(mp);

            //envia o email
            Transport.send(mailMessage);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new EnviaEmail().enviar();
    }

}

Funcionou ?

Abraço !

Boa tarde, Alem de um arquivo anexo e o email deve conter um código html no seu corpo e nao um texto. No seu exemplo voce usa o metodo setText(), este metodo envia somente texto ou podemos passar um formato html ? String html = "

teste "; O problema somente ocorre quando o mesmo é enviado para um qmail. Grata

OIe, Chris !

No lugar de:

mbpMensagem.setText("");

Substitua por:

String htmlText = "<H1>Hello Chris !!! </H1>";
mbpMensagem.setContent(htmlText, "text/html");

Agora foi ?

Abraço!

Obrigada pela atenção.

Ocorreu o erro abaixo:

javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465; nested exception is: 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 at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638) at javax.mail.Service.connect(Service.java:317) at javax.mail.Service.connect(Service.java:176) at javax.mail.Service.connect(Service.java:125) at javax.mail.Transport.send0(Transport.java:194) at javax.mail.Transport.send(Transport.java:124) at EnviaEmail.enviar(EnviaEmail.java:86) at EnviaEmail.main(EnviaEmail.java:93)

Resolvido