[RESOLVIDO][ANDROID] Enviar EMAIL com ANEXO

3 respostas
felipebonezi

Pessoal,

Alguém sabe aonde posso ler a respeito de como enviar um email com um anexo através da API javax? Estou conseguindo enviar, receber, tudo mais, só que quero adicionar neste envio um anexo que está contido no SD CARD, seja imagem, som, pdf, arquivo...

Alguém tem idéia?
Abraço
---------------------------
Pessoal,

Consegui fazer com que ele enviasse um arquivo que está no meu sdcard! ;) Segue código:
package br.com.i2mobile.Javamail.service;

import java.io.IOException;
import java.io.OutputStream;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Flags;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Store;
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 android.os.Environment;
import android.util.Log;
import br.com.i2mobile.Javamail.util.UtilEmail;
import br.com.i2mobile.api.Conta;

public class EnviarEmails {

    public boolean enviarEmailImap(String from, String toEmails[],String ccEmails[], String bccEmails[],String assunto, String mensagem,Session session) throws Exception { 
        Message msg = new MimeMessage(session);
        InternetAddress addressFrom = new InternetAddress(from);

        msg.setFrom(addressFrom);   

        InternetAddress[] addressTo = new InternetAddress[toEmails.length];   
        for (int i = 0; i < toEmails.length; i++){   
            addressTo[i] = new InternetAddress(toEmails[i]);   
        }         
        msg.setRecipients(Message.RecipientType.TO, addressTo);          

        if(ccEmails != null && ccEmails.length > 0){
            InternetAddress[] endsCc = new InternetAddress[ccEmails.length];   
            for (int i = 0; i < ccEmails.length; i++){   
                endsCc[i] = new InternetAddress(ccEmails[i]);   

            }
            msg.setRecipients(Message.RecipientType.CC, endsCc);
        }

        if(bccEmails != null && bccEmails.length > 0){
            InternetAddress[] endsBCc = new InternetAddress[bccEmails.length];   
            for (int i = 0; i < bccEmails.length; i++){   
                endsBCc[i] = new InternetAddress(bccEmails[i]);   

            }
            msg.setRecipients(Message.RecipientType.BCC, endsBCc);
        }
        
        MimeBodyPart anexo = new MimeBodyPart();
        FileDataSource source = new FileDataSource(Environment.getExternalStorageDirectory().getAbsolutePath() + "/acessofacil_license.txt");
        anexo.setDataHandler(new DataHandler(source));
        anexo.setFileName("acessofacil_license.txt");
        
        MimeBodyPart messagePart = new MimeBodyPart();
        messagePart.setContent(mensagem, "text/plain");
        
        Multipart multi = new MimeMultipart();
        multi.addBodyPart(messagePart);
        multi.addBodyPart(anexo);
        
        msg.setSubject(assunto);           
        msg.setContent(multi);  

        msg.setFlag(Flags.Flag.SEEN, true);

        Transport transport = session.getTransport("smtps"); 
        transport.connect("smtp.gmail.com", 465, Conta.getSingleConta().getLogin(), Conta.getSingleConta().getSenha());

        transport.sendMessage(msg, msg.getAllRecipients());   
        transport.close(); 

        return true; 

    }
}

3 Respostas

leo_lvieira

Blz cara, to com a mesma duvida, vou usar sua resolução!

Abraços

S

Olá amigos, estou tentando enviar um email com uma imagem em anexo, e utilizei o codigo acima, mas ao rodar no momento do transport.sendMessage(msg, msg.getAllRecipients()); o erro abaixo ocorre.

Sabe me dizer o que estou fazendo errado?

Obrigado!

11-01 11:12:53.787: W/System.err(2641): javax.mail.MessagingException: IOException while sending message;
11-01 11:12:53.787: W/System.err(2641):   nested exception is:
11-01 11:12:53.797: W/System.err(2641): 	javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; 
11-01 11:12:53.797: W/System.err(2641): 	boundary="----=_Part_2_1095789224.1351768344322"
11-01 11:12:53.827: W/System.err(2641): 	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:676)
11-01 11:12:53.827: W/System.err(2641): 	at com.example.exemplo4.MainActivity.enviarEmailImap(MainActivity.java:206)
11-01 11:12:53.883: W/System.err(2641): 	at com.example.exemplo4.MainActivity.onClick(MainActivity.java:98)
11-01 11:12:53.887: W/System.err(2641): 	at android.view.View.performClick(View.java:3480)
11-01 11:12:53.967: W/System.err(2641): 	at android.view.View$PerformClick.run(View.java:13983)
11-01 11:12:53.977: W/System.err(2641): 	at android.os.Handler.handleCallback(Handler.java:605)
11-01 11:12:54.078: W/System.err(2641): 	at android.os.Handler.dispatchMessage(Handler.java:92)
11-01 11:12:54.107: W/System.err(2641): 	at android.os.Looper.loop(Looper.java:137)
11-01 11:12:54.129: W/System.err(2641): 	at android.app.ActivityThread.main(ActivityThread.java:4340)
11-01 11:12:54.157: W/System.err(2641): 	at java.lang.reflect.Method.invokeNative(Native Method)
11-01 11:12:54.207: W/System.err(2641): 	at java.lang.reflect.Method.invoke(Method.java:511)
11-01 11:12:54.217: W/System.err(2641): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-01 11:12:54.247: W/System.err(2641): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-01 11:12:54.277: W/System.err(2641): 	at dalvik.system.NativeStart.main(Native Method)
11-01 11:12:54.314: W/System.err(2641): Caused by: javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; 
11-01 11:12:54.314: W/System.err(2641): 	boundary="----=_Part_2_1095789224.1351768344322"
11-01 11:12:54.337: W/System.err(2641): 	at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:905)
11-01 11:12:54.366: W/System.err(2641): 	at javax.activation.DataHandler.writeTo(DataHandler.java:330)
11-01 11:12:54.376: W/System.err(2641): 	at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1403)
11-01 11:12:54.387: W/System.err(2641): 	at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1745)
11-01 11:12:54.407: W/System.err(2641): 	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:636)
11-01 11:12:54.407: W/System.err(2641): 	... 13 more
max.analista

O que seria o parametro do tipo Session. Qual objetivo, como montá-lo e pra que serve?

Criado 25 de outubro de 2011
Ultima resposta 25 de mar. de 2013
Respostas 3
Participantes 4