1

我一直在努力寻找解决方案,但我做不到。这是整个事情。我写了以下代码

 MimeMessage message = new MimeMessage(session);
 message.setFrom(new InternetAddress(from));
 message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
 message.setSubject(subject);
 message.setSentDate(new Date());

 MimeBodyPart messagePart = new MimeBodyPart();
 messagePart.setContent(messageContent, "text/html");
 Multipart multipart = new MimeMultipart("mixed");
 multipart.addBodyPart(messagePart);

 MimeBodyPart attachmentPart = new MimeBodyPart();
 DataSource source = new ByteArrayDataSource(attachment.getBytes(), "text/plain");
 attachmentPart.setDataHandler(new DataHandler(source));
 attachmentPart.setFileName(attachmentFileName);
 multipart.addBodyPart(attachmentPart);
 message.setContent(multipart);

 try {
Transport.send(message);                
 } catch (Exception e) {
e.printStackTrace();
   }

代码几乎是不言自明的。messagePart 是邮件, attachmentPart 是附件。但是这里的 messagePart 不是纯文本。它是 HTML。所以问题是如果我运行此代码邮件发送成功,但附件没有附加到邮件中。所以我的问题归结为这一点。是否可以同时发送 html 内容并将某些内容附加到邮件中。我被困在这里。任何人都可以帮忙吗?

4

3 回答 3

0

你想添加

attachmentPart.setDisposition(Part.ATTACHMENT);

Part.ATTACHMENT表示该零件应显示为附件。

Part.INLINE表示您希望将附件显示为邮件的一部分。

于 2012-09-20T18:05:54.823 回答
0

我看不出您的代码有任何明显错误。

您如何确定邮件没有附件?

您可以通过添加“message.writeTo(System.out);”来准确查看 JavaMail 将发送的内容。就在您调用 Transport.send 之前。

您使用的是什么版本的 JavaMail?你用的是什么邮件服务器?一些邮件服务器(我在看你,Exchange)会将邮件重新格式化为他们认为应该的格式,即使它与您的预期不同。

于 2012-09-20T17:25:49.593 回答
0

如果您在 Google App Engine 上运行并添加了一个虚拟文本部分,它会很好用。我不知道为什么虚拟文本部分使它起作用,但我遇到了完全相同的问题,并且添加一个虚拟文本部分也对我有用。

于 2015-03-10T02:48:40.007 回答