2011-05-15 20 views
8

He estado leyendo blogs y he intentado numerosas implementaciones, pero todavía no he podido obtener una imagen adjunta a un correo electrónico que estoy enviando a través de GMail usando Java. Descargué todas las jarras y agregué GMailSender.java, GMailAuthenticator.java y JSSEProvider.java y puedo enviar correos electrónicos regulares sin problemas. La forma en que he intentado hacerlo se muestra a continuación, con la parte del medio que está comentada como la parte que esperaba agregar la imagen. Debajo está la salida en el logcat cuando intento ejecutar esto. Seguramente me estoy perdiendo algo bastante simple. ¿Alguien podría decírmelo, por favor? Gracias por adelantado.¿Enviando un correo electrónico con un archivo adjunto a través de GMailSender?

public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception { 
     try { 
      Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); 
     MimeMessage message = new MimeMessage(session); 
     DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain")); 
     message.setSender(new InternetAddress(sender)); 
     message.setSubject(subject); 
     message.setDataHandler(handler); 

     /* 
     // Create your new message part 
     BodyPart imgPart = new MimeBodyPart(); 

     // Create a related multi-part to combine the parts 
     MimeMultipart multipart = new MimeMultipart("related"); 
     multipart.addBodyPart(imgPart); 

     String fileName = "http://.../sampleBarcode.png"; 

     ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
     if (classLoader == null) { 
       classLoader = this.getClass().getClassLoader(); 
      if (classLoader == null) { 
       System.out.println("IT IS NULL AGAIN!!!!"); 
      } 
     } 

     DataSource ds = new URLDataSource(classLoader.getResource(fileName)); 
     imgPart.setDataHandler(new DataHandler(ds)); 
     imgPart.setHeader("Content-ID", "<logoimg_cid>"); 

     multipart.addBodyPart(imgPart); 

     message.setContent(multipart); 
     */ 

     if(recipients.indexOf(',') > 0) { 
       message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients)); 
     } 
     else message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients)); 

     Transport.send(message); 
     } 
     catch(Exception e){Log.e("EMAIL_ERROR",e.getMessage(), e);} 
    } 

null 
java.lang.NullPointerException 
    at javax.activation.URLDataSource.getContentType(URLDataSource.java:91) 
    at javax.activation.DataHandler.getContentType(DataHandler.java:218) 
    ... 
    ... 
    (plus some more) 

Respuesta

9

que modifica la función de aceptar un parámetro del archivo y adjuntarlo al correo electrónico, aquí está

public synchronized void sendMail(String subject, String body, String sender, String recipients, File attachment) throws Exception { 
    try{ 
    MimeMessage message = new MimeMessage(session); 
    message.setSender(new InternetAddress(sender)); 
    message.setSubject(subject); 

    MimeBodyPart mbp1 = new MimeBodyPart(); 
    mbp1.setText(body); 

    MimeBodyPart mbp2 = new MimeBodyPart(); 
    FileDataSource fds = new FileDataSource(attachment); 
    mbp2.setDataHandler(new DataHandler(fds)); 
    mbp2.setFileName(fds.getName()); 

    Multipart mp = new MimeMultipart(); 
    mp.addBodyPart(mbp1); 
    mp.addBodyPart(mbp2); 

    message.setContent(mp); 

    if (recipients.indexOf(',') > 0) 
     message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients)); 
    else 
     message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients)); 
    Transport.send(message); 
    }catch(Exception e){ 

    } 
} 
+0

sus trabajan bien .. Thnks –

Cuestiones relacionadas