How to send mail with multiple attachments in java
12,116
Solution 1
Create a simple method called, something like, attachFile
, which takes a File
, Multipart
and MimeBodyPart
as parameters...
public void attachFile(File file, Multipart multipart, MimeBodyPart messageBodyPart) {
DataSource source = new FileDataSource(file);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(file.getName());
multipart.addBodyPart(messageBodyPart);
}
Call it as often as you need
File attachFiles[] = ...
if (attachFiles > 0) {
//attach file
attachFile(attachFiles[0], multipart, messageBodyPart);
if (attachFiles > 1) {
for (int index = 1; index < attachFiles.length; index++) {
attachFile(attachFiles[0], multipart, new MimeBodyPart());
}
}
}
as an example
Solution 2
Using Java Mail 1.4 and above makes attaching file more simpler,
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.attachFile(String filePath)
multipart.addBodyPart(messageBodyPart);
Solution 3
Have a look at answer given here
https://stackoverflow.com/a/3177640/772590
Step 1 Create a Datasource
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
Step 2 create method to add attachment
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);
}
Step 3 call above method to add attachment
addAttachment(multipart, "file1.txt");
addAttachment(multipart, "file2.txt");
Author by
Chris
Updated on June 04, 2022Comments
-
Chris almost 2 years
I have here can send mail with multiple attachment:
Properties props = System.getProperties(); String host = "smtp.gmail.com"; props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", host); props.put("mail.smtp.user", from); props.put("mail.smtp.password", pass); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(props); MimeMessage message = new MimeMessage(session); Multipart multipart = new MimeMultipart(); // creates body part for the message MimeBodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setContent(message, "text/html"); //set message body BodyPart msgBodyPart = new MimeBodyPart(); msgBodyPart.setText(body); multipart.addBodyPart(msgBodyPart); msgBodyPart = new MimeBodyPart(); //attach file DataSource source = new FileDataSource(attachFile); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(attachFile); multipart.addBodyPart(messageBodyPart); //attach file 2 source = new FileDataSource(attachFile2); BodyPart messageBodyPart2 = new MimeBodyPart(); messageBodyPart2.setDataHandler(new DataHandler(source)); messageBodyPart2.setFileName(attachFile2); multipart.addBodyPart(messageBodyPart2); try { message.setFrom(new InternetAddress(from)); InternetAddress[] toAddress = new InternetAddress[to.length]; // To get the array of addresses for( int i = 0; i < to.length; i++ ) { toAddress[i] = new InternetAddress(to[i]); } for( int i = 0; i < toAddress.length; i++) { message.addRecipient(Message.RecipientType.TO, toAddress[i]); } } catch (MessagingException ex) { ex.printStackTrace(); } message.setSubject(subject); message.setContent(multipart); Transport transport = session.getTransport("smtp"); transport.connect(host, from, pass); transport.sendMessage(message, message.getAllRecipients()); transport.close();
But the problem is how can I add multiple attachments? I don't know if i can declare many variable or put it on array. The code can only include 2 attachments what if 5 or any in every send of the email.