【问题标题】:Sending email with attachment through GMailSender?通过 GMailSender 发送带附件的电子邮件?
【发布时间】:2011-05-15 01:47:53
【问题描述】:

我一直在阅读博客并尝试了许多实现,但仍然无法将图像附加到我使用 java 通过 GMail 发送的电子邮件中。我下载了所有 jars 并添加了 GMailSender.java、GMailAuthenticator.java 和 JSSEProvider.java,我可以正常发送电子邮件。我尝试这样做的方式如下所示,中间部分被注释掉是我希望添加图像的部分。下面是我尝试执行此操作时 logcat 上的输出。当然,我错过了一些非常简单的东西。有人可以向我指出吗?提前致谢。

    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)  

【问题讨论】:

    标签: android gmail attachment jakarta-mail


    【解决方案1】:

    我修改了函数以接受文件参数并将其附加到电子邮件中,这里是

    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){
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 2017-12-22
      • 2020-01-12
      • 1970-01-01
      • 2015-09-30
      相关资源
      最近更新 更多