Google app engine 将多个文件附加到电子邮件
我已经为此挣扎了一段时间,但我找不到问题的答案。 情况如下: 一个使用play框架的web应用程序在Google应用程序引擎上发布。正在尝试将2个pdf文件附加到电子邮件并发送。使用一个文件,它可以完美地工作。有两个我会出错。 代码如下: 软件包应用程序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
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。我真的需要解决这个问题,因为我还没有找到解决方案。有人能帮我吗?