Introduction
This article explains how to create a Java Mail API. The NetBeans IDE is used for creating this application.
What is Java Mail API
This API is used to write, read and compose mails. This API provides a platform-independent and protocol-independent framework for sending and receiving mails. The javax.mail and javax.mail.activation packages contain the core classes of the Java Mail API.
Some uses
The following are some uses:
- Used at the time of registering the user (sending notification such as thanks message)
- Used when the user forgot their password; the password is then sent to the user's email-id
- Used to send some important notification, update, etcetera.
Some Protocols mainly used are
- POP (Post Office Protocol).
- NNTP (Network News Transfer Protocol).
- SMTP (Simple Mail Transfer Protocol).
- MIME (Multipurpose Internet Mail Extension Protocol).
- etcetera
Note: In our application; we use the MIME and SMTP protocols.
Some core classes
The following are some core classes:
- javax.mail.Folder
- javax.mail.Message
- javax.mail.Address
- javax.mail.Store
- javax.mail.Session
- javax.mail.PasswordAuthentication
- javax.mail.MimeMessages etcetera.
How to send email
This API provides many ways to send email, but you must have a SMTP server to send emails to. Use the simple GMail server or download any SMTP server manually.
How to send email
Use the following procedure to to send email:
- First get a session object
- Then compose message
- Finally, send the message
1. Get the Session Object
The javax.mail.Session class provides the following two method to get the object of a session.
- Session.getInstance()
- Session.getDefaultInstance()
2. Compose message
The javax.mail.Message class provides a method to compose the message. For this we need to pass the session object in the Mime interface.
Example
MimeMessage mssg=new MimeMessage(session);
3. Send the message
The javax.mail.Transport class provide methods to send the message.
- static void send(Message mssg)
- static void send(Message mssg, Address[] add)
Let's start creating our application using a servlet
For creating this application you first need to download the following JAR files and add to your project library.
Note: You can download the latest version of this JAR file directly from the Oracle Website.
Now you need to create following files:
- index.html file
- MailServlet.java file
- Mail.java file
1. index.html file
This file is necessary to provide an interface in which the user can provide their email-id, subject and message contents.
2. MailServlet.java file
This servlet file handles the request and provides the response to the user.
3. Mail.java file
This Java file contains the send method to send the email to the specifeid recipients.
Now to create this application we need to use the following procedure.
Step 1
Open the NetBeans IDE.
Step 2
Choose "Java web" -> "Web application" as in the following.
Step 3
Provide your project name as "JavaMailAPP" as in the following.
Step 4
Choose the Server and Java version wizard as in the following.
Step 5
Now delete the default "index.jsp" file and create a new "index.html" file and write the following code there.
index.html
<!DOCTYPE html>
<html>
<head>
<title>TODO supply a title</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width">
</head>
<body bgcolor="pink">
<form action="MailServlet">
<table>
<tr>
<td>To:</td>
<td><input type="text" name="mail"/><br/></td>
</tr>
<tr>
<td>Subject:</td>
<td><input type="text" name="subject"><br/></td>
</tr>
<tr>
<td>Message Text:</td>
<td><textarea rows="12" cols="80" name="message"></textarea><br/></td>
</tr>
<tr>
<td><input type="submit" value="Send"></td>
<td><input type="reset" value="Reset"></td>
</tr>
</table>
</form>
</body>
</html>
Step 6
Now create a servlet named "MailServlet" and write the following code there.
MailServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MailServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String m = request.getParameter("mail");
String sub = request.getParameter("subject");
String messg = request.getParameter("message");
SendMail.send(m, sub, messg);
out.print("Your Mail has been sent successfully");
out.close();
}
}
Step 7
Create a Java file named "Mail" with the following code.
SendMail.java
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class SendMail {
public static void send(String m, String sub, String messg) {
final String user = "enter your gmail id here";
final String pass = "enter your gmail password here";
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.host", "gmail");
props.put("mail.user", "enter your gmail id");
props.put("mail.password", "enter your gmail-password");
props.put("mail.port", "465");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, pass);
}
});
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(user));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(m));
message.setSubject(sub);
message.setText(messg);
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
Step 8
Check your "web.xml" file that the code is the same as the following.
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>MailServlet</servlet-name>
<servlet-class>MailServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MailServlet</servlet-name>
<url-pattern>/MailServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
Note:
For running this application first make some changes in your Gmail account.
Go to your Gmail account then select "Settings" -> "Enable popup".
Step 9
Now your project is ready to run.
Right-click on the Project menu and choose "Run". The following shows the output.
Step 10
Now fill in the details as email-id, subject, and message content as shown below.
Step 11
After filling in the details, click on the "send" button; the following message will be generated by the servlet.
Note:
If you get the same message then that means your message has been successfully sent, if any error is thrown then check the SMTP setting.
Step 12
If you want to check the mail then go to the mail-id you sent the mail to. I will assume you see the mail in your mail-box as below.