Javamail com HTML e Anexo

3 respostas
D

Pessoal, alguem tem um exemplo legal ai de como enviar email com html e anexo no Javamail?

Eu aqui não estou conseguindo.

Fico no aguardo obrigado.

3 Respostas

A

cara,

da uma olhada no Commons Email é bem facil e traquilo de fazer o que vc quer.

t+

D

alissonvla:
cara,

da uma olhada no Commons Email é bem facil e traquilo de fazer o que vc quer.

t+

ola amigo obrigado pela dica vou usar.

M

aqui segue um codigo de uma classe q uso pra mandar um email pra varios contatos e com 3 anexos(tu pode botar depois quantos anexos tu quiser):

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Classes;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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.swing.JOptionPane;

/**
 *
 * @author adm
 */
public class EnviarEmail {

    /**
     * @param args the command line arguments
     */
    public static String lista=Configs_Etc.CarregarConfiguracoes.emailsEnviar; //lista vai guardar tipo [email removido];[email removido];[email removido]
    String from = Configs_Etc.CarregarConfiguracoes.emailEmail;
    String host = Configs_Etc.CarregarConfiguracoes.emailHost;
    
    public void enviarEmailAnexos() throws Exception {
        String nomeArquivoXmlAssinado=Telas.EnviarNFe_Integrador.nomeArquivoXmlAssinado;
        String filename = nomeArquivoXmlAssinado.substring(0,nomeArquivoXmlAssinado.indexOf("-env-lot.xml")) + "-procNFe.xml";
        String filename2 = nomeArquivoXmlAssinado.substring(0,nomeArquivoXmlAssinado.indexOf("-env-lot.xml")) + ".pdf";
        String filename3 = nomeArquivoXmlAssinado;
        
        //aqui vai botar o numero da nfe no email.
        String msgText1 = Configs_Etc.CarregarConfiguracoes.emailCorpo;
        msgText1=msgText1.replaceAll("%numeronfe",Telas.EnviarNFe_Integrador.numeronfe);
        String subject = Configs_Etc.CarregarConfiguracoes.emailTitulo;
        subject=subject.replaceAll("%numeronfe",Telas.EnviarNFe_Integrador.numeronfe);
        
        ArrayList teste=new ArrayList();
        //criar lista de emails no arraylist e depois passar ele pra um vetor de InternetAddress
        String[] listaEmails = lista.split(";"); //essa vai ser um vetor com cada email em uma posição
        System.out.println(lista);
        for(int i=0;i<listaEmails.length;i++){
            System.out.println(listaEmails[i]);
            //JOptionPane.showMessageDialog(null,listaEmails[i]);
            teste.add(new InternetAddress(listaEmails[i]));
        }
        //remover emails repetidos e tal, pq as vez se configura o email do remetente junto com o remetente e
        //o mesmo email pode ta no destinatario. isso acontece pq hashset nao permite vlres repetidos.
        HashSet teste2=new HashSet();
        teste2.addAll(teste);
        teste.clear();
        teste.addAll(teste2);
        InternetAddress[] vetor=(InternetAddress[])teste.toArray(new InternetAddress[teste.size()]);

        // create some properties and get the default Session
        Properties props = System.getProperties();
        props.put("mail.smtp.host", host);

        Session session = Session.getInstance(props, null);

        try {
            // criar mensagem
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(from));
            msg.setRecipients(Message.RecipientType.TO, vetor);
            msg.setSubject(subject);

            // criar a primeira parte da mensagem
            MimeBodyPart mbp1 = new MimeBodyPart();
            mbp1.setText(msgText1);

            // criar a segunda parte da mensagem, responsavel pelos anexos
            MimeBodyPart mbp2 = new MimeBodyPart();
            MimeBodyPart mbp3 = new MimeBodyPart();
            MimeBodyPart mbp4 = new MimeBodyPart();

            // isnerir anexo 1
            FileDataSource fds = new FileDataSource(filename);
            mbp2.setDataHandler(new DataHandler(fds));
            mbp2.setFileName(fds.getName());

            // isnerir anexo 2
            FileDataSource fds2 = new FileDataSource(filename2);
            mbp3.setDataHandler(new DataHandler(fds2));
            mbp3.setFileName(fds2.getName());
            
            // isnerir anexo 3
            FileDataSource fds3 = new FileDataSource(filename3);
            mbp4.setDataHandler(new DataHandler(fds3));
            mbp4.setFileName(fds3.getName());

            // cria o objeto multipart e adiciona as partes a ele
            Multipart mp = new MimeMultipart();
            mp.addBodyPart(mbp1);
            mp.addBodyPart(mbp2); //anexo1
            mp.addBodyPart(mbp3); //anexo2
            mp.addBodyPart(mbp4); //anexo3

            // adicionar o multipart na mensagem
            msg.setContent(mp);

            // setar data atual
            msg.setSentDate(new Date());

            // enviar msg
            Transport.send(msg);

        } catch (MessagingException mex) {
            /*mex.printStackTrace();
            Exception ex = null;
            if ((ex = mex.getNextException()) != null) {
                ex.printStackTrace();
            }*/
            StackTraceElement[] ste=mex.getStackTrace();
            String erro="";
            for(int i=0;i<ste.length;i++){
                erro+="--"+ste[i].toString()+"\n";
            }
            JOptionPane.showMessageDialog(null,"Erro ao enviar email, verifique os emails dos destinatários e a configuração\n\n"+erro);
        }
    }
}
Criado 19 de dezembro de 2011
Ultima resposta 19 de dez. de 2011
Respostas 3
Participantes 3