Enviando email com anexo

2 respostas
J

aí gente, eu estou implementando uma classe que envia emails com anexos na memória no tipo byte[], eu andei dando uma olhada aqui e outra ali e acabei ficando com isso:

import java.util.Properties;  
  
import javax.activation.DataHandler;  
import javax.mail.Address;  
import javax.mail.Message;  
import javax.mail.Multipart;  
import javax.mail.Session;  
import javax.mail.Transport;  
import javax.mail.internet.InternetAddress;  
import javax.mail.internet.InternetHeaders;  
import javax.mail.internet.MimeBodyPart;  
import javax.mail.internet.MimeMessage;  
import javax.mail.internet.MimeMultipart;  
import javax.mail.util.ByteArrayDataSource;  
  
public class MailAnexo {  
    public void enviarEmail(byte[] bytes) throws Exception {  
    	
    	
        String de = "joseph.sarmento@***.com.br";  
        String para = "joseph.sarmento@***.com";  
        String assunto = "Teste";  
        String texto = "nononono";  
        try {  
        	Properties props = System.getProperties();
        	 props.put("mail.smtp.host", "smtp.gmail.com");

            Session sessao = Session.getInstance(props,null);  
            MimeMessage m = new MimeMessage(sessao);  
             
            m.setFrom(new InternetAddress(de));  
            Address[] to = new InternetAddress[] {new InternetAddress(para)};  
            m.setRecipients(Message.RecipientType.TO, to);  
            m.setSubject(assunto);  
            m.setSentDate(new java.util.Date());  
            m.setText(texto);  
  
            Multipart corpo = new MimeMultipart();  
            InternetHeaders headers = new InternetHeaders();  
            headers.addHeader("Content-Type", "application/pdf");  
            MimeBodyPart partPhoto = new MimeBodyPart();  
            partPhoto.setDataHandler(new DataHandler(new ByteArrayDataSource(bytes, "aplication/pdf")));  
            partPhoto.setFileName("PDF.pdf");              
  
            corpo.addBodyPart(partPhoto);  
            m.setContent(corpo);  
            Transport.send(m);  
        } catch (Exception ex) {  
            throw new Exception(ex.getMessage());  
        }  
    }  
}

o problema é que tá dando o seguinte erro:

java.lang.Exception: 530 5.7.0 Must issue a STARTTLS command first. v20sm38360948anv.17

A minha pergunta é óbvia: Alguém tem idéia do que ou do porque disto?

2 Respostas

romarcio

Acho que é necessário setar a propriedade props.put(“mail.smtp.starttls.enable”, “true”)

J

Valeu romarcio, era isso que tu respondeu com mais outras coisas, to mandando o código caso alguém precise futuramente:

import java.util.Properties;  
  
import javax.activation.DataHandler;  
import javax.mail.Address;  
import javax.mail.Message;  
import javax.mail.Multipart;  
import javax.mail.Session;  
import javax.mail.Transport;  
import javax.mail.internet.InternetAddress;  
import javax.mail.internet.InternetHeaders;  
import javax.mail.internet.MimeBodyPart;  
import javax.mail.internet.MimeMessage;  
import javax.mail.internet.MimeMultipart;  
import javax.mail.util.ByteArrayDataSource;  
  
public class MailAnexo {  
    public void enviarEmail(byte[] bytes) throws Exception {  
    	
    	
        String de = "joseph.sarmento@***.com";  
        String para = "joseph.sarmento@***.com";  
        String senha= "********";  
        String assunto = "Teste";  
        String texto = "nononono";  
        try {  
        	Properties props = System.getProperties();
        	 props.put("mail.smtp.host", "smtp.gmail.com");
        	 props.put("mail.smtp.starttls.enable", "true");
        	 
        	 props.put("mail.smtp.host", "smtp.gmail.com");
 	        props.put("mail.smtp.port", "465");
 	        props.put("mail.smtp.user", "joseph.sarmento@***.com");
 	 
 	        props.put("mail.smtp.auth", "true");
 	        props.put("mail.smtp.debug", "true");
 	 
 	        props.put("mail.smtp.socketFactory.port", "465");
 	        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
 	        props.put("mail.smtp.socketFactory.fallback", "false");

            Session sessao = Session.getInstance(props,null);  
            MimeMessage m = new MimeMessage(sessao);  
             
            m.setFrom(new InternetAddress(de));  
            Address[] to = new InternetAddress[] {new InternetAddress(para)};  
            m.setRecipients(Message.RecipientType.TO, to);  
            m.setSubject(assunto);  
            m.setSentDate(new java.util.Date());  
            m.setText(texto);  
  
            Multipart corpo = new MimeMultipart();  
            InternetHeaders headers = new InternetHeaders();  
            headers.addHeader("Content-Type", "application/pdf");  
            MimeBodyPart partPhoto = new MimeBodyPart();  
            partPhoto.setDataHandler(new DataHandler(new ByteArrayDataSource(bytes, "aplication/pdf")));  
            partPhoto.setFileName("PDF.pdf");              
  
            corpo.addBodyPart(partPhoto);  
            m.setContent(corpo);  
            Transport transport = sessao.getTransport("smtp");
            transport.connect(de, senha);
            transport.sendMessage(m, m.getAllRecipients());
            transport.close(); 
        } catch (Exception ex) {  
            throw new Exception(ex.getMessage());  
        }  
    }  
}
Criado 3 de outubro de 2011
Ultima resposta 3 de out. de 2011
Respostas 2
Participantes 2