Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javamail attach multiple files

Tags:

jakarta-mail

The following code sends mail and attachments as well via gmail smtp server using javamail api.

    public void doSendGmail(){
    from = txtFrom.getText();
    password= new String(txtPassword.getPassword());
    to = txtTo.getText();
    cc = txtCC.getText();
    bcc = txtBCC.getText();
    subject = txtSubject.getText();
    message_body = jtaMessage.getText();

    Properties props = new Properties();
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "587");

    Session session = Session.getInstance(props,null);

    try {
        //message definition
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
        if(!cc.equals("")){
            message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));
        }
        if(!bcc.equals("")){
            message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(bcc));
        }
        message.setSubject(subject);
        if(!filename.equals("")){// if a file has been attached...
            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setText(message_body);// actual message
            Multipart multipart = new MimeMultipart();// create multipart message

            // add the text message to the multipart
            multipart.addBodyPart(messageBodyPart);

            // attachment part
            messageBodyPart = new MimeBodyPart();
            String attachment = fileAbsolutePath;
            DataSource source = new FileDataSource(attachment);
            messageBodyPart.setDataHandler(new DataHandler(source));
            messageBodyPart.setFileName(filename);
            multipart.addBodyPart(messageBodyPart);//add the attachment to the multipart message
            // combine text and attachment
            message.setContent(multipart);
            // send the complete message
            Transport.send(message, from, password);
        }
        else{// if no file has been attached
            message.setText(message_body);
            Transport.send(message, from, password);
        }

        JOptionPane.showMessageDialog(this, "Message Sent!","Sent",JOptionPane.INFORMATION_MESSAGE);

    } catch (Exception e) {
        JOptionPane.showMessageDialog(this, e.toString());
    }
}

This code can only attach and send one file at a time. How do you enable it to attach multiple files and send them as one email?

The file is attached using a JFileChooser as shown below:

public void doAttachFile(){
    try {
        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        File file = chooser.getSelectedFile();
        filename = file.getName();// get name of selected file
        lblFileName.setText(filename);// display name of selected file
        fileAbsolutePath= file.getAbsolutePath();
        System.out.println("File name: "+filename+"\n"+"Absolute path: "+fileAbsolutePath);

    } catch (Exception e) {
        JOptionPane.showMessageDialog(this, "No file was attached");
    }
}
like image 984
David Avatar asked Sep 16 '26 00:09

David


1 Answers

Use a "for" loop around the attachment part.

like image 69
Bill Shannon Avatar answered Sep 24 '26 01:09

Bill Shannon



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!