Java send smtp mail using Gmail

Today I wanted to make a mail notification mechanism for a project of mine. After some web searching I stumbled upon a tutorial where he uses SMTP with Java Mail API to send emails via Gmail. I modified the code in some places to make it more general and API friendly. Now I can send emails easily using different authentication and encryption methods (TLS,SSL)! I hope you find it useful!

import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

 * Simple SMTP mail class built using the example from: <a
 * href=""></a>
 * <p>If you get {@link}: , try
 * ping and make sure you got a response (able to access). Often
 * times, your connection may block by your firewall or proxy behind.</p>
public class MailSender {

    private String userName;
    private String password;
    private Properties props;
    private final static String CONTENT_CHARSET = "text/html; charset=utf-8";

    public MailSender(Properties props) {
        this.userName = (String) props.get("userName");
        this.password = (String) props.get("password");
        this.props = props;

    public void sendMail(String subject, String bodyText) throws MessagingException {
        sendMail(subject, bodyText, false);

    public void sendMail(String subject, String bodyText, boolean isHtmlBody) throws MessagingException {
        Session session = Session.getDefaultInstance(props,
                new javax.mail.Authenticator() {

                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(userName, password);

        Message message = new MimeMessage(session);

        // set from (sender) address
        message.setFrom(new InternetAddress((String) props.get("fromAddress")));

        // set recipients addresses (may be more than one)
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse((String) props.get("recipientsAddresses")));

        // set message subject

        // if it is html change multipart information
        if (isHtmlBody) {
            message.setContent(bodyText, CONTENT_CHARSET);
        } else {




    public static void main(String[] args) throws MessagingException {

        Properties proper = new Properties();

        // put credentials
        proper.put("userName", "user");
        proper.put("password", "password");

        // put server information
        proper.put("", "");
        proper.put("mail.smtp.socketFactory.port", "465");
        proper.put("mail.smtp.auth", "true");
        proper.put("mail.smtp.port", "465");

        // if you do not want to use authentication
        //proper.put("", "");
        //proper.put("mail.smtp.socketFactory.port", "25");
        //proper.put("mail.smtp.socketFactory.class", "");
        //proper.put("mail.smtp.auth", "false");
        //proper.put("mail.smtp.port", "25");

        // put sender information
        proper.put("fromAddress", "");

        // put recipient information
        proper.put("recipientsAddresses", "");

        new MailSender(proper).sendMail("Bob", "Some text body for bob");

And if you are using maven you can add the dependency to Java Mail API with the following code to your pom.xml. For me, the latest version is 1.4.6


About cmanios

This entry was posted in Java, Networking, smtp and tagged , , , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s