Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 将多个文件附加到电子邮件_Google App Engine_Jakarta Mail - Fatal编程技术网

Google app engine 将多个文件附加到电子邮件

Google app engine 将多个文件附加到电子邮件,google-app-engine,jakarta-mail,Google App Engine,Jakarta Mail,我已经为此挣扎了一段时间,但我找不到问题的答案。 情况如下: 一个使用play框架的web应用程序在Google应用程序引擎上发布。正在尝试将2个pdf文件附加到电子邮件并发送。使用一个文件,它可以完美地工作。有两个我会出错。 代码如下: 软件包应用程序 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExce

我已经为此挣扎了一段时间,但我找不到问题的答案。 情况如下: 一个使用play框架的web应用程序在Google应用程序引擎上发布。正在尝试将2个pdf文件附加到电子邮件并发送。使用一个文件,它可以完美地工作。有两个我会出错。 代码如下: 软件包应用程序

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.MimeType;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;


public class Mailer {

    public static void sendEmail(String to, String subject, String body, byte[]     pdf1, byte[] pdf2)
    throws AddressException, MessagingException, UnsupportedEncodingException{
        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);
        Message msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress("myAddress@gmail.com", "John Smith"));
        msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to, to));
        msg.setSubject(subject);
        msg.setText(body);

        Multipart mp = new MimeMultipart();

        MimeBodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent(body, "text/html");
        mp.addBodyPart(htmlPart);

        //Attaching first pdf
        MimeBodyPart attachment = new MimeBodyPart();
        attachment.setFileName("pdf1.pdf");
        DataSource src = new ByteArrayDataSource(pdf1, "application/pdf"); 
        attachment.setDataHandler(new DataHandler(src));
        mp.addBodyPart(attachment);


        //Attaching second pdf
        attachment = new MimeBodyPart();
        attachment.setFileName("pdf2.pdf");
        src = new ByteArrayDataSource(badgePDF, "application/pdf"); 
        attachment.setDataHandler(new DataHandler(src));
        mp.addBodyPart(attachment);


        msg.setContent(mp);

        Transport.send(msg);
    }


}

不幸的是,即使打印捕获的异常的stackTrack,也没有错误消息,但我猜DataSource对象存在问题。非常感谢您的帮助。

您应该使用
FileDataSource
作为您的
DataSource
类型,而不是使用
ByteArrayDataSource
。请尝试以下操作:

Multipart mp = new MimeMultipart();
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(body, "text/html");
mp.addBodyPart(htmlPart);    

File[] attachments = new File[2];
atts[1] = new File("pdf1.pdf");
atts[2] = new File("pdf2.pdf");
for( int i = 0; i < attachments.length; i++ ) {
   messageBodyPart = new MimeBodyPart();
   FileDataSource fileDataSource =new FileDataSource(attachments[i]);
   messageBodyPart.setDataHandler(new DataHandler(fileDataSource));
   messageBodyPart.setFileName(attachments[i].getName());
   mp.addBodyPart(messageBodyPart);

}

msg.setContent(mp);
Transport.send(msg);
Multipart mp=new MimeMultipart();
MimeBodyPart htmlPart=新的MimeBodyPart();
setContent(body,“text/html”);
mp.addBodyPart(htmlPart);
文件[]附件=新文件[2];
附件[1]=新文件(“pdf1.pdf”);
附件[2]=新文件(“pdf2.pdf”);
对于(int i=0;i
pdf是由应用程序生成的,不会作为文件保存在服务器上,因为我无法在google app engine上保存文件,这就是为什么数据是字节数组。据我所知,您是否尝试过使用org.apache.commons。我真的需要解决这个问题,因为我还没有找到解决方案。有人能帮我吗?