How to attach multiple files to an email using JavaMail?

UPDATE (March 2020)

With the latest JavaMailâ„¢ API (version 1.6 at the moment, JSR 919), things are much simpler:

  • void attachFile(File file)
  • void attachFile(File file, String contentType, String encoding)
  • void attachFile(String file)
  • void attachFile(String file, String contentType, String encoding)

Useful reading

Here is a nice and to the point tutorial with the complete example:

  • JavaMail - How to send e-mail with attachments

Well, it's been a while since I've done JavaMail work, but it looks like you could just repeat this code multiple times:

DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);

For example, you could write a method to do it:

private static void addAttachment(Multipart multipart, String filename)
{
    DataSource source = new FileDataSource(filename);
    BodyPart messageBodyPart = new MimeBodyPart();        
    messageBodyPart.setDataHandler(new DataHandler(source));
    messageBodyPart.setFileName(filename);
    multipart.addBodyPart(messageBodyPart);
}

Then from your main code, just call:

addAttachment(multipart, "file1.txt");
addAttachment(multipart, "file2.txt");

etc