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