电子邮件中缺少邮件,具体取决于正文添加的顺序



我遇到的问题是,当我在添加附件之前将电子邮件的邮件正文部分添加到邮件对象时,电子邮件的正文没有显示,但是当我在所有附件之后添加邮件正文部分时,它显示正常。

这很奇怪,但我有一封电子邮件,我正在尝试使用 JavaMail 发送。它有电子邮件所需的所有常规内容(地址等)。您将在下面看到的"电子邮件"对象是一个Javabean,其中包含用于附件的mimeBodyParts以及用于邮件正文,主题等的mimeBodyPart。

这是不起作用的代码(如上所述)

Multipart multipart = new MimeMultipart("alternative");
message.setSubject(email.getSubject());
multipart.addBodyPart(email.getContentBodyPart()); //This is the only line that moves
for (MimeBodyPart mimeBodyPart : email.getBodyParts()) {
  multipart.addBodyPart(mimeBodyPart);
}
message.setContent(multipart);

以下是确实有效的代码:

Multipart multipart = new MimeMultipart("alternative");
message.setSubject(email.getSubject());
for (MimeBodyPart mimeBodyPart : email.getBodyParts()) {
  multipart.addBodyPart(mimeBodyPart);
}
multipart.addBodyPart(email.getContentBodyPart()); //This is the only line that moved
message.setContent(multipart);

如果您需要有关电子邮件javabean的更多信息,我会将其提供给您(或者您可以在此处找到整个目标代码),但我猜我只是缺少一些简单的东西。提前谢谢。

只是为了向阅读本文的其他任何人澄清:如果您使用"替代"MimeMultipart,则其所有部分都应该是相同内容的替代版本。此外,根据相关的 RFC,应最后添加首选版本的内容。在创建具有纯文本回退的 HTML 电子邮件时,您会经常这样做。这就是为什么他们在JavaMail文档中警告您阅读RFC的原因。

如果您要创建带有附件的邮件,为什么要使用多部分/替代? 您应该使用(默认)多部分/混合。

您是否在不理解的情况下剪切并粘贴了该代码? :-)

最新更新