You are viewing the documentation for Play 1. The documentation for Play 2 is here.

Sending emails with play

You can use the play.libs.Mail utility to send emails very easily:

Mail.send("[email protected]","[email protected]","Subject","Message");

Mail and MVC integration

You can also send complex, dynamic emails using the standard templates mechanism and syntax.

First, define a Mailer notifier in your application. Your mailer notifier must subclass play.mvc.Mailer and be part of the notifiers package.

Each public static method will be an email sender, in a similar manner as actions for a MVC controller.

For example:

package notifiers;
import play.*;
import play.mvc.*;
import java.util.*;
public class Mails extends Mailer {
   public static void welcome(User user) {
      setSubject("Welcome %s",;
   public static void lostPassword(User user) {
      String newpassword = user.password;
      setSubject("Your password has been reset");
      send(user, newpassword);

text/html email

The send call will render the app/views/Mails/welcome.html template as the body of the email message.

<html><body><p>Welcome <b>${}</b>, </p>

The template for the lostPassword method could look like this:


<html><body><head>...</head><body><img src=""/><p>Hello ${},<br/>
Your new password is <b>${newpassword}</b>.

text/plain email

If no HTML template is defined, then a text/plain email is sent using the text template.

The send call will render the app/views/Mails/welcome.txt template as the body of the email message.

Welcome ${},

The template for the lostPassword method could look like this:


Hello ${},
Your new password is ${newpassword}.

text/html email with text/plain alternative

If an HTML template is defined and a text template exists, then the text template will be used as an alternative message. In our previous example, if both




are defined, then the email will be sent in text/html as defined in lostPassword.html with an alternative part as defined in lostPassword.txt.
So you can send nice HMTL emails to your friends and still please those geeky friends that still use mutt ;)

SMTP configuration

First of all, you need to define the smtp server to use:

If your SMTP server requires authentication, use the following properties:


Channel & ports

There are two ways to send the email over an encrypted channel. If your server supports the starttls command (see: rfc 2487), you can use a clear connection on port 25 that will switch to SSL/TLS. You can do so by adding this configuration option:

Your server may also provide a smtp-over-ssl (smtps) connector, that is a SSL socket listening on port 465. In that case, you tell play to use this setup using the configuration option:

More about configuration

Under the hood, play uses JavaMail to perform the actual smtp transactions. If you need to see what’s going on, try:


When using ssl connections with JavaMail, the default ssl behavior is to drop the connection if the remote server certificate is not signed by a root certificate. This is the case in particular when using a self-signed certificate. Play’s default behavior is to skip that check. You can control this using the following property:


If you need to connect to servers using non-standard ports, the following property will override the defaults:


Using Gmail

To use gmail’s servers, use this configuration: