我一直试图找到解决方案,但我无法做到。这是整个事情。我写了以下代码
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内容并同时将某些内容附加到邮件中。我被困在这里。有人可以帮忙吗。
我没有看到你的代码有任何明显错误。
你如何确定邮件没有附件?
您可以通过添加“message.writeTo(System.out);”来确切了解JavaMail将发送的内容。就在你调用Transport.send之前。
您使用的是哪个版本的JavaMail?你使用什么邮件服务器?有些邮件服务器(我正在看你,Exchange)会将邮件重新格式化为他们认为应该是什么,即使它与你的意图不同。
如果您在Google App Engine上运行并添加了一个虚拟文本部分,则效果很好。我不知道为什么虚拟文本部分使它工作,但我遇到了完全相同的问题,并添加了一个虚拟文本部分也为我工作。
你想要添加
attachmentPart.setDisposition(Part.ATTACHMENT);
Part.ATTACHMENT
表示该部分应显示为附件。
Part.INLINE
表示您希望将附件显示为消息的一部分。