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");
Share:
12,116
Chris
Author by

Chris

Updated on June 04, 2022

Comments

  • Chris
    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.