[RESOLVIDO]JavaMail anexar arquivo

10 respostas
W

Bom dia a todos gostaria de uma luz, como faço para enviar anexos junto ao email, até consegui fazer

mais caso haja um anexo o texto do email não aparece,

segue codigo :

public boolean enviaMensagem(String assunto, String texto, String recipe) {
        String host = "MEUSMTP";

        String username = "EMAIL";
        String password = "SENHA";

        String recipientEmailAddress = recipe;

        Transport transport = null;

        boolean mensagemEnviada = false;

        try {
            final InternetAddress sender = new InternetAddress(username);
            final InternetAddress recipient = new InternetAddress(recipientEmailAddress);

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

            Session session = Session.getDefaultInstance(properties);

            MimeMessage mensagem = new MimeMessage(session);
            mensagem.setSubject(assunto);
            mensagem.setText(texto);
            mensagem.setFrom(sender);
            mensagem.addRecipient(Message.RecipientType.TO, recipient);
            mensagem.saveChanges();
            
            FileDataSource fds = new FileDataSource("C:\teste.txt");
            mensagem.setDataHandler(new DataHandler(fds));
            mensagem.setFileName(fds.getName());
            
            transport = session.getTransport("smtp");
            transport.connect(host, sender.getAddress(), password);
            transport.sendMessage(mensagem, mensagem.getAllRecipients());
            transport.close();

            mensagemEnviada = true;

        } catch (MessagingException ex) {
            System.out.println("Erro :" + ex);
        } finally {
            try {
                transport.close();
            } catch (Exception ex) {
                System.out.println("Erro :" + ex);
            }
        }
        return mensagemEnviada;
    }

10 Respostas

pmlm

Tens de criar dois elementos diferentes, um para o texto e um para o anexo e adicionar os dois à tua mensagem.

(Não testei)

MimeMessage mensagem = new MimeMessage(session);  
            mensagem.setSubject(assunto);  
            mensagem.setFrom(sender);  
            mensagem.addRecipient(Message.RecipientType.TO, recipient);  
            mensagem.saveChanges();  
            
            MimeBodyPart mensagemBody =  new MimeBodyPart();
            mensagemBody.setText(texto);

            MimeBodyPart  anexoBody = new MimeBodyPart();
            FileDataSource fds = new FileDataSource("C:\teste.txt");  
            anexoBody.setDataHandler(new DataHandler(fds));
            anexoBody.setFileName(fds.getName());

            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(mensagemBody);
            multipart.addBodyPart(anexoBody);

            mensagem.setContent(multipart);
W

bom dia pmlm, teste aqui mais sem exito, este codigo faz com que o conteudo do anexo(que é um xml) apareça no corpo da mensagem

vou continuar testando aqui.

obrigado pela ajuda.

jweibe

Cara se não conseguir anexar arquivos ao e-mail, tem um tutorial no site da DevMedia que utiliza a API do Commons-email e bem simples… da uma olhada la depois
http://www.devmedia.com.br/articles/viewcomp.asp?comp=3306

W

Bom dia jweibe, vi o link me parece muito facil mesmo com esta api

mais meu patrão quer que eu use o JavaMail =/

Abraço.

pmlm

WalkMan:
bom dia pmlm, teste aqui mais sem exito, este codigo faz com que o conteudo do anexo(que é um xml) apareça no corpo da mensagem

vou continuar testando aqui.

obrigado pela ajuda.

Faltou uma linha:

anexoBody.setDisposition(Part.ATTACHMENT);
W

pmlm, estou usando o codigo da seguinte maneira

anexoBody.setDataHandler(new DataHandler(fds)); anexoBody.setDisposition(Part.ATTACHMENT); anexoBody.setFileName(fds.getName());

mas tambem sem resultado =/

pmlm

Este método funciona há anos. Vê o que poderá faltar.

public void sendMail(String from, String to, String subject, String message, String attach) {

            MimeMessage mimeMessage = mailSender.createMimeMessage();
            mimeMessage.setSubject(subject, CHARSET);
            
            Address addressFrom = new InternetAddress(from);
            mimeMessage.setFrom(addressFrom);
            mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

            Multipart multipart = new MimeMultipart();

            // Texto
            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setContent(message, "text/plain");
            multipart.addBodyPart(messageBodyPart);

            //Anexo
            File file = new File(attach);
            DataSource ds = new FileDataSource(file) {

                public String getContentType() {
                    return "application/octet-stream";
                }
            };

            BodyPart mbp = new MimeBodyPart();
            mbp.setDataHandler(new DataHandler(ds));
            mbp.setFileName(file.getName());
            mbp.setDisposition(Part.ATTACHMENT);
            multipart.addBodyPart(mbp);

            mimeMessage.setContent(multipart);
            mailSender.send(mimeMessage);
}
romarcio

Da uma olhada aqui: http://mballem.wordpress.com/2011/02/15/enviando-email-com-a-api-javamail/

Ensina a enviar email com varios anexos e utilizando o javamail.

W

romarcio pmlm, consegui implementar graças aos exemplos de voces!

muito obrigado!

abraços.

romarcio

WalkMan:
romarcio pmlm, consegui implementar graças aos exemplos de voces!

muito obrigado!

abraços.


:thumbup:

Criado 15 de março de 2011
Ultima resposta 15 de mar. de 2011
Respostas 10
Participantes 4