0

我正在尝试以这种方式发送电子邮件,但我无法弄清楚一些事情

  1. 我如何使用输入流对象并添加为附件。
  2. 如何发送多个附件
  3. 如何使用 HTML 正文发送多个附件

我尝试了下面的代码,我只能发送一个附件或 HTML 正文

MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
        new InternetAddress(to));

message.addRecipient(Message.RecipientType.CC,
        new InternetAddress(cc));
Address address[] =
        {new InternetAddress(replyTo)};
message.setReplyTo(address);
// Set Subject: header field
message.setSubject(subject);
// Now set the actual message
MimeBodyPart messageBodyPart = new MimeBodyPart();

Multipart multipart = new MimeMultipart();

messageBodyPart = new MimeBodyPart();
String file = "/file.pdf";
String fileName = "attachmentName";

DataSource source = new FileDataSource(file);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(fileName);
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
message.setContent(body, "text/html");
// Send message
Transport.send(message);
4

2 回答 2

2

这回答了 1 个问题

用户 ByteArrayDataSource 它确实有构造函数
public ByteArrayDataSource(InputStream is, String type)

这回答了您列表中的 2 个问题。

您可以将多个 MimeBodyPart对象添加到Multipart对象

这是从Multipart.java它将MimeBodyPart对象添加到向量中的代码

public synchronized void addBodyPart(BodyPart part) throws MessagingException {
    if (parts == null) {
        parts = new Vector();
        parts.addElement(part);
        part.setParent(this);
    }
}
于 2014-09-30T20:20:03.297 回答
1

每次在“消息”上调用 setContent 时,它都会覆盖以前的内容。

您找到JavaMail 常见问题解答了吗?

于 2014-10-01T06:34:44.257 回答