总之,我正在尝试使用 javax.mail 在谷歌应用引擎应用程序上发送 HTML 电子邮件。我想要的电子邮件结构是:
- 选择
- 文本
- 有关的
- HTML
- 图片
但是,当我尝试使用这种结构构建和发送电子邮件时,它在谷歌应用引擎上失败了。特别是一个问题是,无论结构是什么,我都无法将多部分嵌入到另一个多部分中并在谷歌应用引擎上发送该电子邮件。
我已经尝试使用 smtp 服务器在谷歌应用引擎应用程序之外使用这种结构构建和发送电子邮件,它工作正常。但是,将相同的代码迁移到我的真实应用程序无法正常工作。
我应该注意,我可以在谷歌应用引擎上发送纯文本或仅 html 的电子邮件,但是当我尝试将所有这些部分加在一起以撰写完整的电子邮件时,它失败了。
Message msg = new MimeMessage(session);
Multipart multiPart = new MimeMultipart("alternative");
Multipart relatedMp = new MimeMultipart("related");
BodyPart txtBdp = new MimeBodyPart();
txtBdp.setContent(msgBody, "text/plain");
multiPart.addBodyPart(txtBdp);
BodyPart htmlBdp = new MimeBodyPart();
htmlBdp.setContent(htmlBody, "text/html");
relatedMp.addBodyPart(htmlBdp);
DataSource dataSrc = new FileDataSource(new File(imageFileNm));
BodyPart imageBdp = new MimeBodyPart();
imageBdp.setDataHandler(new DataHandler(dataSrc));
imageBdp.setFileName("logo.png");
imageBdp.setHeader("Content-ID", "<image_logo>");
imageBdp.setDisposition(MimeBodyPart.INLINE);
relatedMp.addBodyPart(imageBdp);
BodyPart relatedBdp = new MimeBodyPart();
relatedBdp.setContent(relatedMp);
multiPart.addBodyPart(relatedBdp);
msg.setFrom(new InternetAddress(emailAddr));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailAddr, recipientNm));
msg.setSubject(subject);
msg.setContent(multiPart);
msg.saveChanges();
Transport.send(msg);
我收到的错误消息是:
附件需要内容和名称 com.google.appengine.api.mail.MailService$Attachment.(MailService.java:56) com.google.appengine.api.mail.stdimpl.GMTransport.convertAttachments(GMTransport.java:334) com。 google.appengine.api.mail.stdimpl.GMTransport.convertAttachments(GMTransport.java:321) com.google.appengine.api.mail.stdimpl.GMTransport.convertAttachments(GMTransport.java:295) com.google.appengine.api。 mail.stdimpl.GMTransport.sendMessage(GMTransport.java:262) javax.mail.Transport.send(Transport.java:95) javax.mail.Transport.send(Transport.java:48)
我不确定为什么当我在谷歌应用引擎上运行这段代码时会失败,因为我正在使用正确的名称格式来发送它的电子邮件,并且它在谷歌应用引擎之外工作。