在Java

问题描述:

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

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

你使用Spring吗?如果我知道这一点,我可能会帮助更多。我曾经以相当手动的方式做事,但Spring有一些有用的帮手。 – mwarren 2014-09-30 20:40:12

+0

不幸的是我不使用Spring。 – 2014-09-30 20:45:24

这回答1个问题

User ByteArrayDataSource它具有consutructor
public ByteArrayDataSource(InputStrea m是,字符串类型)

这回答您的列表中的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); 
    } 
} 
+0

谢谢前两项工作。试图让第三个正确。 – 2014-09-30 22:20:36

每次使用setContent的“消息”的时候,它会覆盖前内容。

您是否找到了JavaMail FAQ