mail
Send email with attachment
With this tutorial we are going to see how to send an email with an attachment in a Java Application. This is particularly useful when you want to handle email activities inside your application.
Basically, all you have to do to send email with attachment is:
- Set SMTP properties using a
Propertiesobject. - Use
properties.put("mail.smtp.host", "smtp.javacodegeeks.com")to set the smtp host. - Use
properties.put("mail.smtp.port", "25")to set the smtp port. - Create a new
Sessionwith the above properties usingSession.getDefaultInstance(properties, null). - Create a new
MimeMessageobject with the above session. - Use
setFrom(new InternetAddress(from))to set the sender address. - Use
setRecipient(Message.RecipientType.TO, new InternetAddress(to)) to set the recipient. - Use
setSubjectto set the subject of the message. - Create a new
MimeBodyPartand usesetTexto set the body of the email. - Create a new
MimeBodyPartfor the attachement. - Create a new
FileDataSource. - Use
setDataHandler(new DataHandler(fileDataSource))to set the data handler for the attachment. - Add all parts of the email to
Multipartobject.
Let’s see the code:
package com.javacodegeeks.snippets.enterprise;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Properties;
public class EmailAttachmentExample {
public static void main(String[] args) {
EmailAttachmentExample example = new EmailAttachmentDemo();
example.sendEmail();
}
public void sendEmail() {
// Strings that contain from, to, subject, body and file path to the attachment
String from = "sender@javacodegeeks.com";
String to = "receiver@javacodegeeks.com";
String subject = "Test mail";
String body = "Test body";
String filename = "C:\sample.txt";
// Set smtp properties
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.javacodegeeks.com");
properties.put("mail.smtp.port", "25");
Session session = Session.getDefaultInstance(properties, null);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject(subject);
message.setSentDate(new Date());
// Set the email body
MimeBodyPart messagePart = new MimeBodyPart();
messagePart.setText(body);
// Set the email attachment file
MimeBodyPart attachmentPart = new MimeBodyPart();
FileDataSource fileDataSource = new FileDataSource(filename) {
@Override
public String getContentType() {
return "application/octet-stream";
}
};
attachmentPart.setDataHandler(new DataHandler(fileDataSource));
attachmentPart.setFileName(fileDataSource.getName());
// Add all parts of the email to Multipart object
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messagePart);
multipart.addBodyPart(attachmentPart);
message.setContent(multipart);
// Send email
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
This was an example on how to send email with attachment.
