Note
|
For Play 2.3.x please read the README on the 2.x branch. |
-
Add a library dependency on play-mailer:
"com.typesafe.play" %% "play-mailer" % "{version}"
See below for the version matrix.
-
Configure the mailer in your
conf/application.conf
:play.mailer { host (mandatory) port (defaults to 25) ssl (defaults to no) tls (defaults to no) user (optional) password (optional) debug (defaults to no, to take effect you also need to set the log level to "DEBUG" for the application logger) timeout (defaults to 60s in milliseconds) connectiontimeout (defaults to 60s in milliseconds) mock (defaults to no, will only log all the email properties instead of sending an email) }
You can also configure the mailer programmatically, see user manual.
import play.libs.mailer.Email;
import play.libs.mailer.MailerClient;
import javax.inject.Inject;
import java.io.File;
import org.apache.commons.mail.EmailAttachment;
public class MyComponent {
@Inject MailerClient mailerClient;
public void sendEmail() {
String cid = "1234";
Email email = new Email()
.setSubject("Simple email")
.setFrom("Mister FROM <from@email.com>")
.addTo("Miss TO <to@email.com>")
// adds attachment
.addAttachment("attachment.pdf", new File("/some/path/attachment.pdf"))
// adds inline attachment from byte array
.addAttachment("data.txt", "data".getBytes(), "text/plain", "Simple data", EmailAttachment.INLINE)
// adds cid attachment
.addAttachment("image.jpg", new File("/some/path/image.jpg"), cid)
// sends text, HTML or both...
.setBodyText("A text message")
.setBodyHtml("<html><body><p>An <b>html</b> message with cid <img src=\"cid:" + cid + "\"></p></body></html>");
mailerClient.send(email);
}
}
You need a MailerClient
instance to send an email :
import play.api.libs.mailer._
import java.io.File
import org.apache.commons.mail.EmailAttachment
def sendEmail {
val cid = "1234"
val email = Email(
"Simple email",
"Mister FROM <from@email.com>",
Seq("Miss TO <to@email.com>"),
// adds attachment
attachments = Seq(
AttachmentFile("attachment.pdf", new File("/some/path/attachment.pdf")),
// adds inline attachment from byte array
AttachmentData("data.txt", "data".getBytes, "text/plain", Some("Simple data"), Some(EmailAttachment.INLINE)),
// adds cid attachment
AttachmentFile("image.jpg", new File("/some/path/image.jpg"), contentId = Some(cid))
),
// sends text, HTML or both...
bodyText = Some("A text message"),
bodyHtml = Some(s"""<html><body><p>An <b>html</b> message with cid <img src="cid:$cid"></p></body></html>""")
)
mailerClient.send(email)
}
Since Play 2.4, you can use runtime dependency injection or compile time dependency injection.
As a result, the MailerClient
instance can be obtained using runtime dependency injection or compile time dependency injection.
Use the @Inject
annotation on the constructor of your component or controller:
import play.api.libs.mailer._
import javax.inject.Inject
class MyComponent @Inject() (mailerClient: MailerClient)
Note
|
Configuration will be retrieved each time |
Declare the MailerClient
without the @Inject
annotation:
import play.api.libs.mailer._
class MyComponent(mailerClient: MailerClient)
Then in your router definition, use the trait MailerComponents
:
import play.api._
import play.api.ApplicationLoader.Context
import router.Routes
import play.api.libs.mailer._
class MyApplicationLoader extends ApplicationLoader {
def load(context: Context) = {
new ApplicationComponents(context).application
}
}
class ApplicationComponents(context: Context) extends BuiltInComponentsFromContext(context) with MailerComponents {
lazy val myComponent = new MyComponent(mailerClient)
// create your controllers here ...
lazy val router = new Routes(...) // inject your controllers here
}
Finally add this line play.application.loader=SimpleApplicationLoader
in application.conf
.
The Play Mailer plugin supports several different versions of Play.
Plugin version | Play version |
---|---|
5.x |
2.5.x |
4.x |
2.4.x |
3.x |
2.4.x |
2.x |
2.3.x |
latest snapshot |
For Play 2.3:
"com.typesafe.play" %% "play-mailer" % "2.4.1"
For Play 2.4:
"com.typesafe.play" %% "play-mailer" % "4.0.0"
For Play 2.5 (milestone):
"com.typesafe.play" %% "play-mailer" % "5.0.0-M1"
This software is licensed under the Apache 2 license, quoted below.
Copyright 2012 Typesafe (http://www.typesafe.com).
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this project except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.