2011-05-15 122 views
8

我一直在閱讀這些博客,並嘗試過很多實現,但仍未能獲得附加到我通過使用Java發送的GMail的電子郵件的圖像。我下載了所有的jar文件,並添加了GMailSender.java,GMailAuthenticator.java和JSSEProvrov.java,並且我可以發送正常的電子郵件。我試過的方式如下所示,中間部分被評論爲我希望添加圖像的部分。下面是我嘗試執行此操作時logcat上的輸出。當然,我錯過了很簡單的事情。請問有人能指出我嗎?提前致謝。通過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) 

回答

9

我修改了函數接受一個文件參數,並將其附加到電子郵件,在這裏它是

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

其做工精細.. thnks – 2011-08-27 07:01:22

相關問題