我在Google App Engine上使用Java并尝试发送包含多个附件的电子邮件。
我发现的是,由于某种原因,它错过了第一个附件。 基本上如果filesToAttach包含1个文件,那么就没有附件。 如果filesToAttach包含4个文件 - A,B,C和D,那么通过的消息将附加B,C和D.真奇怪。
我使用的代码如下。关于如何纠正这一点的任何建议都非常赞赏。
log.info调用生成的输出似乎显示已附加正确数量的文件。
Properties props = new Properties();
Session session = Session.getInstance(props);
Message message = new MimeMessage(session);
String fromEmail = "admin@" + ApiProxy.getCurrentEnvironment().getAppId() + ".appspotmail.com";
message.setFrom(new InternetAddress(fromEmail, "MyApp Admin"));
message.addRecipients(Message.RecipientType.BCC, addresses);
message.setSubject(subject);
MimeMultipart multipart = new MimeMultipart();
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(htmlBody, "text/html");
multipart.addBodyPart(htmlPart);
for(FileToAttach fileToAttach : filesToAttach) {
MimeBodyPart fileMimeBodyPart = new MimeBodyPart();
DataSource dataSource = new ByteArrayDataSource(fileToAttach.getContents(), "application/octet-stream");
fileMimeBodyPart.setDataHandler(new DataHandler(dataSource));
fileMimeBodyPart.setFileName(fileToAttach.getFileName());
log.info("attaching file " + fileToAttach.getFileName() + " of " + fileToAttach.getContents().length + " bytes");
multipart.addBodyPart(fileMimeBodyPart);
}
message.setContent(multipart);
log.info("the multipart contains " + multipart.getCount() + " parts and isComplete = " + multipart.isComplete());
Transport.send(message);
log.info("called Transport.send");