JavaMail 附件和正文问题

JavaMail attachment and body issue

我正在使用以下代码将 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);

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

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

通过在消息中调用 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);

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

 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);