Envio de Email com Anexo [RESOLVIDO]

12 respostas
fabricioempresa

Bom pessoal tenho o seguinte codigo

import java.util.Properties;
import javax.activation.CommandMap;
import javax.activation.MailcapCommandMap;
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;

public class SendMail {

    String server = FileConfig.getInstance().getsmtp();
    private String host = server; /* endereço do servidor smtp */


    public class SMTPAuthenticator extends Authenticator {

        @Override
        public PasswordAuthentication getPasswordAuthentication() {
            String user = FileConfig.getInstance().getuser();
            String pwd = FileConfig.getInstance().getpwd();
            String username = user;
            String password = pwd;
            return new PasswordAuthentication(username, password);
        }
    }

    public void EnviarEmailPara(String para, String assunto, String mensagem) throws Exception {
        Properties mailProps = System.getProperties();
        mailProps.put("mail.smtp.host", this.host);

        //String fileAttachment = "";
        Authenticator auth = new SMTPAuthenticator();
        Session session = Session.getDefaultInstance(mailProps, auth);

        mailProps.put("mail.smtp.auth", "true");
        mailProps.put("mail.debug", "true");
        mailProps.put("mail.smtp.debug", "true");
        mailProps.put("mail.mime.charset", "ISO-8859-1");
        mailProps.put("mail.smtp.port", "25");

        MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
        mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
        mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
        mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
        mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
        mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");

        CommandMap.setDefaultCommandMap(mc);

        // Definir mensagem
        MimeMessage message = new MimeMessage(session);
        String from = FileConfig.getInstance().getuser();

        message.setFrom(new InternetAddress(from));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(para));
        message.setSubject(assunto);
        //JOptionPane.showMessageDialog(null,message.getFrom()[0].toString() + " " + message.getAllRecipients()[0].toString());
        // Criar parte da mensagem
        MimeBodyPart messageBodyPart = new MimeBodyPart();

        // Texto da mensagem
        messageBodyPart.setText(mensagem);

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

        // Enviar parte da mensagem
        message.setContent(multipart);
        
        message.setContent(mensagem.toString(), "text/html");

        // Enviar toda a mensagemSend the message
        Transport.send(message);
    }
}

Porem não estou conseguindo enviar anexo junto a isso alguem tem uma ideia.

Desde já agradeço pela atenção

12 Respostas

rdmardegam

Tente fazer assim:

// Altere o MimeMessage para Message
Message msg = new MimeMessage(session);

// Sete suas informacoes
.
.
.

// Altere o MimeBodyPart para BodyPart
BodyPart messageBodyPart = new MimeBodyPart();

// Seta as informacoes necessarias
.
.
.

// Adicionado mensagem
          Multipart multipart = new MimeMultipart();
          multipart.addBodyPart(messageBodyPart);

// Adiciona anexos
BodyPart bodyPart = new MimeBodyPart(); 
FileDataSource fileDataSource = new FileDataSource(new File("c:\arquivo.pdf")) {
	   	          @Override
	   	          public String getContentType() {
	   	        	  return "application/octet-stream";
	   	          	}
	          	  };
bodyPart.setDataHandler(new DataHandler(fileDataSource));
bodyPart.setFileName("arquivo.pdf");
multipart.addBodyPart(bodyPart); // add anexo
	          

// Finalizando mensagem para transportar
msg.setContent(multipart);        

// Agora vc tenta enviar de acordo com seu provedor de email
.
.
.

Espero q funcione, abraço.

fabricioempresa

Bah cara nao consegui tem como tu colocar + ou - como seria o resto do código Obrigado pela atenção.

rdmardegam

Estou enviando com um email do gmail

//Objeto encarregado de enviar os dados para o email  
      Transport tr;  
      try {  
          tr = session.getTransport(mailProtocolo); //define smtp para transporte  
          /* 
           *  1 - define o servidor smtp 
           *  2 - seu nome de usuario 
           *  3 - sua senha
           */  
          tr.connect(mailServer, userMail, userMailSenha);  
          msg.saveChanges();
          //envio da mensagem  
          tr.sendMessage(msg, msg.getAllRecipients());  
          tr.close();  
          System.out.println("EMAIL ENVIADO");
      } catch (Exception e) {  
          // TODO Auto-generated catch block  
          System.out.println(">> Erro: Envio Mensagem");  
          e.printStackTrace();  
      }
fabricioempresa

Eu tenho o seguite código ele até anexa alguma coisa mas não é o documento correto

import java.io.File;
import java.util.Properties;
import javax.activation.CommandMap;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.activation.MailcapCommandMap;
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;

public class SendMail {
    String server = FileConfig.getInstance().getsmtp();
    private String host = server; /* endereço do servidor smtp */

    public class SMTPAuthenticator extends Authenticator {
        @Override
        public PasswordAuthentication getPasswordAuthentication() {
            String user = FileConfig.getInstance().getuser();
            String pwd = FileConfig.getInstance().getpwd();
            String username = user;
            String password = pwd;
            return new PasswordAuthentication(username, password);
        }
    }


    public void EnviarEmailPara(String para, String assunto, String mensagem) throws Exception {
        Properties mailProps = System.getProperties();
        mailProps.put("mail.smtp.host", this.host);
        String fileAttachment = "";
        Authenticator auth = new SMTPAuthenticator();
        Session session = Session.getDefaultInstance(mailProps, auth);
        
        mailProps.put("mail.smtp.auth", "true");
        mailProps.put("mail.debug", "true");
        mailProps.put("mail.smtp.debug", "true");
        mailProps.put("mail.mime.charset", "ISO-8859-1");
        mailProps.put("mail.smtp.port", "25");
        
        MailcapCommandMap mc = (MailcapCommandMap)CommandMap.getDefaultCommandMap();
        //mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
        mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
        mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
        mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
        mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
        CommandMap.setDefaultCommandMap(mc);

        // Definir mensagem
        MimeMessage message = new MimeMessage(session);
        String from = FileConfig.getInstance().getuser();

        message.setFrom(new InternetAddress(from));
        message.addRecipient(Message.RecipientType.TO,new InternetAddress(para));
        //message.setSubject(assunto);
        message.setSubject(assunto);
        //JOptionPane.showMessageDialog(null,message.getFrom()[0].toString() + " " + message.getAllRecipients()[0].toString());
        // Criar parte da mensagem
        MimeBodyPart messageBodyPart = new MimeBodyPart();
        // Texto da mensagem
        FileDataSource fileDataSource = new FileDataSource(new File("C:\relatoriodia.xls"));
        messageBodyPart.setDataHandler(new DataHandler(fileDataSource));
        messageBodyPart.setFileName("relatoriodia.xls");
        messageBodyPart.setText(mensagem);

       
        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(messageBodyPart);
        //Enviar parte da mensagem
         message.setContent(multipart);//,mensagem.toString(), "text/html");
        //Enviar toda a mensagemSend the message
        Transport.send(message);
    
 
    }
}

Ele envia um arquivo texto em vez de um pdf

rdmardegam

Fiz uma alteração, porem acho q será enviado só o anexo, e o texto não será enviado. Me add no msn qualquer coisa, [email removido]

public void EnviarEmailPara(String para, String assunto, String mensagem) throws Exception {  
      Properties mailProps = System.getProperties();  
        mailProps.put("mail.smtp.host", this.host);  
        String fileAttachment = "";  
        Authenticator auth = new SMTPAuthenticator();  
        Session session = Session.getDefaultInstance(mailProps, auth);  
          
        mailProps.put("mail.smtp.auth", "true");  
        mailProps.put("mail.debug", "true");  
        mailProps.put("mail.smtp.debug", "true");  
        mailProps.put("mail.mime.charset", "ISO-8859-1");  
        mailProps.put("mail.smtp.port", "25"); 

        
          
        MailcapCommandMap mc = (MailcapCommandMap)CommandMap.getDefaultCommandMap();  
        //mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");  
        mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");  
        mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");  
        mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");  
        mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");  
        CommandMap.setDefaultCommandMap(mc);  
  
        // Definir mensagem  
        MimeMessage message = new MimeMessage(session);  
        String from = "[email removido]";  
  
        message.setFrom(new InternetAddress(from));  
        message.addRecipient(Message.RecipientType.TO,new InternetAddress(para));  
        //message.setSubject(assunto);  
        message.setSubject(assunto);  
        //JOptionPane.showMessageDialog(null,message.getFrom()[0].toString() + " " + message.getAllRecipients()[0].toString());  
        // Criar parte da mensagem  
        MimeBodyPart messageBodyPart = new MimeBodyPart();  
        
        // Texto da mensagem  
        BodyPart bodyPart = new MimeBodyPart(); 
    	  FileDataSource fileDataSource = new FileDataSource(new File("C:\relatorio.xls")) {
	          @Override
	          public String getContentType() {
	        	  return "application/octet-stream";
	          	}
    	  };
         bodyPart.setDataHandler(new DataHandler(fileDataSource));
         bodyPart.setFileName("relatoriodia.xls");
        
         messageBodyPart.setText(mensagem);  
  
         
        Multipart multipart = new MimeMultipart();  
        multipart.addBodyPart(bodyPart);  
        //Enviar parte da mensagem  
         message.setContent(multipart);//,mensagem.toString(), "text/html");  
        //Enviar toda a mensagemSend the message  
        Transport.send(message);  
    }
fabricioempresa

Cara você testou e funcionou?
Vou ver com o pessoal do Ti se eles me liberam o msn.

rdmardegam

Não, não testei!!

fabricioempresa

Blz vou ver aquio como vou fazer

rdmardegam

Tenta fazer parecido com o meu primeiro post.
Abraço.

Qualquer coisa fala ae

fabricioempresa

FUNCIONO DEI UMA GRANDE PENSADA AQUI E FUNCIONO CERTINHO

import java.io.File;
import java.util.Properties;
import javax.activation.CommandMap;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.activation.MailcapCommandMap;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
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;

public class SendMail {
    String server = FileConfig.getInstance().getsmtp();
    private String host = server; /* endereço do servidor smtp */

    public class SMTPAuthenticator extends Authenticator {
        @Override
        public PasswordAuthentication getPasswordAuthentication() {
            String user = FileConfig.getInstance().getuser();
            String pwd = FileConfig.getInstance().getpwd();
            String username = user;
            String password = pwd;
            return new PasswordAuthentication(username, password);
        }
    }


    public void EnviarEmailPara(String para, String assunto, String mensagem) throws Exception {
        Properties mailProps = System.getProperties();
        mailProps.put("mail.smtp.host", this.host);
        String fileAttachment = "";
        Authenticator auth = new SMTPAuthenticator();
        Session session = Session.getDefaultInstance(mailProps, auth);

        mailProps.put("mail.smtp.auth", "true");
        mailProps.put("mail.debug", "true");
        mailProps.put("mail.smtp.debug", "true");
        mailProps.put("mail.mime.charset", "ISO-8859-1");
        mailProps.put("mail.smtp.port", "25");

        MailcapCommandMap mc = (MailcapCommandMap)CommandMap.getDefaultCommandMap();
        mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
        mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
        mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
        mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
        mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
        CommandMap.setDefaultCommandMap(mc);
        // Definir mensagem
        MimeMessage message = new MimeMessage(session);
        String from = FileConfig.getInstance().getuser();
        message.setFrom(new InternetAddress(from));
        message.addRecipient(Message.RecipientType.TO,new InternetAddress(para));
        message.setSubject(assunto);
        // Criar parte da mensagem
        MimeBodyPart messageBodyPart = new MimeBodyPart();
        // Texto da mensagem
        messageBodyPart.setText(mensagem);





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



        BodyPart bodyPart = new MimeBodyPart();
        FileDataSource fileDataSource = new FileDataSource(new File("c:\relatoriodia.xls"));
        bodyPart.setDataHandler(new DataHandler(fileDataSource));
        bodyPart.setFileName("relatoriodia.xls");
        multipart.addBodyPart(bodyPart);
        // Enviar parte da mensagem
        message.setContent(multipart);
        message.setFileName("relatoriodia.xls");
        //message.setContent(mensagem.toString(), "text/html");

        Transport.send(message);

 }
}
rdmardegam

Entao show de bola, parabens.

Agora so se voce precisar, tente implementar para enviar varios anexos ou se isso já resolve show de bola.

Flw

fabricioempresa

Bah velho boa ideia vour ver como posso fazer um dia em que eu tiver mais tempo.Mas agradeço demais pela sua ajuda.Quando você quizer
eu estou ai para lhe ajudar 8)

Criado 11 de junho de 2010
Ultima resposta 11 de jun. de 2010
Respostas 12
Participantes 2