Sending Emails with Java

1. Overview

In this quick tutorial, we’re going to look at sending an email with and without attachments – using the core Java mail library.

2. Project Setup and Dependency

For this article, we’ll be using a simple Maven-based project with a dependency on the Java mail library:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.5.0-b01</version>
</dependency>

The latest version can be found here.

3. Sending a Plain Text and an HTML Email

First, we need to configure the library with our email service provider’s credentials. Then, we’ll create a Session that’ll be used in constructing our message for sending.

The configuration is via a Java Properties object:

Properties prop = new Properties();
prop.put("mail.smtp.auth", true);
prop.put("mail.smtp.starttls.enable", "true");
prop.put("mail.smtp.host", "smtp.mailtrap.io");
prop.put("mail.smtp.port", "25");
prop.put("mail.smtp.ssl.trust", "smtp.mailtrap.io");

In the properties configuration above, we configured the email host as Mailtrap and use the port provided by the service as well.

Now let’s move further by creating a session with our username and password:

Session session = Session.getInstance(prop, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
    }
});

The username and password are given by the mail service provider alongside the host and port parameters.

Now that we have a mail Session object, let’s create a MimeMessage for sending:

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("from@gmail.com"));
message.setRecipients(
  Message.RecipientType.TO, InternetAddress.parse("to@gmail.com"));
message.setSubject("Mail Subject");

String msg = "This is my first email using JavaMailer";

MimeBodyPart mimeBodyPart = new MimeBodyPart();
mimeBodyPart.setContent(msg, "text/html");

Multipart multipart = new MimeMultipart();
multipart.addBodyPart(mimeBodyPart);

message.setContent(multipart);

Transport.send(message);

In the snippet above, we first created a message instance with the necessary properties – to, from and subject. Followed by a mimeBodyPartthat has an encoding of text/html, since our message is styled in HTML.

The next thing we did is to create an instance of MimeMultipart object that we can use to wrap the mimeBodyPart we created.

Finally, we set the multipart object as the content of our message and use the send()of Transport object to do the mail sending.

So, we can say that the mimeBodyPartis contained in the multipart that is contained in the message. Hence, a multipart can contain more than one mimeBodyPart.

This is going to be the focus of the next section.

4. Sending Email With an Attachment

Next, to send an attachment, we only need to create another MimeBodyPartand attach the file(s) to it:

MimeBodyPart attachmentBodyPart = new MimeBodyPart();
attachmentBodyPart.attachFile(new File("path/to/file"));

We can then add the new body part to the MimeMultipartobject we created earlier:

multipart.addBodyPart(attachmentBodyPart);

That’s all we need to do.

Once again, we set the multipart instance as the content of the message object and finally we’ll use the send() to do the mail sending.

5. Conclusion

In conclusion, we’ve seen how to use the native Java mail library to send emails even with attachment.

As always, the complete source code is available over on Github.

Related posts:

Java Program to Search Number Using Divide and Conquer with the Aid of Fibonacci Numbers
LinkedHashSet trong java
Java Program to Implement the Program Used in grep/egrep/fgrep
Java Program to Represent Graph Using Adjacency Matrix
Deque và ArrayDeque trong Java
Multipart Upload with HttpClient 4
Life Cycle of a Thread in Java
Hướng dẫn Java Design Pattern – Service Locator
Guide to the Java Clock Class
Spring Boot - Enabling HTTPS
Write/Read cookies using HTTP and Read a file from the internet
Case-Insensitive String Matching in Java
Giới thiệu Java Service Provider Interface (SPI) – Tạo các ứng dụng Java dễ mở rộng
Giới thiệu Google Guice – Aspect Oriented Programming (AOP)
Different Ways to Capture Java Heap Dumps
Java Program to Find Location of a Point Placed in Three Dimensions Using K-D Trees
Spring Data JPA and Null Parameters
Hướng dẫn Java Design Pattern – State
Spring @RequestMapping New Shortcut Annotations
Using JWT with Spring Security OAuth (legacy stack)
HttpAsyncClient Tutorial
Java Program to Implement TreeMap API
Java Program to Compute Determinant of a Matrix
Sử dụng JDBC API thực thi câu lệnh truy vấn dữ liệu
HttpClient Timeout
Jackson vs Gson
Java Program to Find the Longest Subsequence Common to All Sequences in a Set of Sequences
Mapping Nested Values with Jackson
Tạo chương trình Java đầu tiên sử dụng Eclipse
Logout in an OAuth Secured Application
A Guide to Java 9 Modularity
Java Program to Implement LinkedBlockingQueue API