Skip to content

apache/sling-org-apache-sling-commons-messaging-mail

Apache Sling

Build Status Test Status Coverage Sonarcloud Status JavaDoc Maven Central License

Apache Sling Commons Messaging Mail

This module is part of the Apache Sling project.

This module provides a simple layer on top of Jakarta Mail 2.0 (package jakarta.mail) including a message builder and a service to send mails via SMTPS.

  • Mail Service: sends MIME messages
  • Message Builder: builds plain text and HTML messages with attachments and inline images
  • Message ID Provider: allows overwriting default message IDs by custom ones

Examples

Configuration

MailService

Example factory configuration (SimpleMailServiceConfiguration) for SimpleMailService:

{
  "mail.smtps.from": "[email protected]",
  "mail.smtps.host": "smtp.example.org",
  "mail.smtps.port": 465,
  "username": "SMTP-USERNAME-PLAIN",
  "password": "SMTP-PASSWORD-ENCRYPTED",
  "messageIdProvider.target": "(names=hostname)"
}

Optional MessageIdProvider

Example factory configuration (SimpleMessageIdProviderConfiguration) for optional SimpleMessageIdProvider:

{
  "names": [
    "hostname"
  ],
  "host": "author.cms.example.org"
}

Usage

Create a multipart MIME message with an attachment (filename: song.flac) where the HTML part contains an inline image (cid: ska) and send it:

    @Reference
    MailService mailService;

    String subject = "Rudy, A Message to You";
    String text = "Stop your messing around\nBetter think of your future\nTime you straighten right out\nCreating problems in town\n…";
    String html = […];
    byte[] attachment = […];
    byte[] inline = […];

    MimeMessage message = mailService.getMessageBuilder()
        .from("[email protected]", "Dandy Livingstone")
        .to("[email protected]", "The Specials")
        .replyTo("[email protected]");
        .subject(subject)
        .text(text)
        .html(html)
        .attachment(attachment, "audio/flac", "song.flac")
        .inline(inline, "image/png", "ska")
        .build();

    mailService.sendMessage(message);

Dependencies

Integration Tests

Integration tests require a running SMTP server. By default a GreenMail server is started.

An external SMTP server for validating messages with real mail clients can be used by setting required properties:

mvn clean install\
  -Dsling.test.mail.smtps.server.external=true\
  -Dsling.test.mail.smtps.ssl.checkserveridentity=true\
  [email protected]\
  -Dsling.test.mail.smtps.host=localhost\
  -Dsling.test.mail.smtps.port=465\
  -Dsling.test.mail.smtps.username=username\
  -Dsling.test.mail.smtps.password=password\
  [email protected]\
  -Dsling.test.mail.from.name=From\ Sender\
  [email protected]\
  -Dsling.test.mail.to.name=To\ Recipient\
  [email protected]\
  -Dsling.test.mail.replyTo.name=Reply\ To