【问题标题】:JavaMail attachment and body issueJavaMail 附件和正文问题
【发布时间】:2016-12-12 15:38:17
【问题描述】:

我正在使用以下代码将 pdf 文件附加到邮件 (JAVAMAIL)。这个职位完美无缺,并在我的邮件中添加了附件,但是这封邮件没有任何正文。

        Multipart multipart = new MimeMultipart();
        msg.setContent(multipart);
        DataSource source = new FileDataSource(pdf);
        MimeBodyPart messageBodyPart = new MimeBodyPart();
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(pdf.getName().toString());
        multipart.addBodyPart(messageBodyPart);
        msg.setContent(multipart);

当我在代码中添加以下行时,它会删除附件并向我发送仅包含文本的邮件。

msg.setText(body);

请帮我将附件和测试正文添加到我的邮件中。

【问题讨论】:

  • 我猜你应该找到某种 TextBodyPart 并调用 multipart.addBodyPart(textBodyPart)。现在真的看不出来,无论如何
  • 是的,我做到了。我只需要添加新的身体部位。不管怎么说,还是要谢谢你。 :)

标签: java jakarta-mail


【解决方案1】:

问题是,如果您想发送带有附件的消息,那么您需要有一部分用于您的消息,一部分用于您的附件。

通过在消息中调用setText,您将丢弃您之前设置的多部分。

您的消息需要具有如下所示的层次结构(如果您想要纯文本和 html 消息,则需要更多嵌套):

MimeMessage
+- MimeMultiPart
   +- MimeBodyPart (message)
   +- MimeBodyPart (attachment)

例如

MimeMessage message = new MimeMessage(session);
MimeMultiPart multiPart = new MimeMultiPart();

MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(body);
multiPart.addBodyPart(messageBodyPart);

MimeBodyPart attachment = new MimeBodyPart();
attachment.setDataHandler(new DataHandler(source));
attachment.setDisposition(Part.ATTACHMENT);
attachment.setFileName(pdf.getName().toString());
multipart.addBodyPart(attachment);

message.setContent(multiPart);

【讨论】:

  • 是的,我已经通过 rob 的评论对其进行了配置。但无论如何,谢谢。 :)
  • @ShariarImtiaz 是的,输入完整答案总是比快速评论需要更多时间。
【解决方案2】:

我添加了以下几行以使其正常工作。

 Multipart multipart = new MimeMultipart();
            msg.setContent(multipart);
            DataSource source = new FileDataSource(pdf);
            MimeBodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setDataHandler(new DataHandler(source));
            messageBodyPart.setFileName(pdf.getName().toString());
            multipart.addBodyPart(messageBodyPart);
            msg.setContent(multipart);
            BodyPart htmlPart = new MimeBodyPart();
            htmlPart.setContent(body, "text/html");
            multipart.addBodyPart(htmlPart);

【讨论】:

  • 一些提示:在附件前添加html部分(不是绝对必要,但有些邮件客户端可能会混淆),并使用htmlPart.setText(body, "UTF-8", "html")而不是setContent(body, "text/html")
猜你喜欢
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 2018-04-22
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多