Fork me on GitHub

Sending mail

Introduction

通过Ninja,您可以以非常简单明了的方式发送邮件. 您所要做的就是将依赖项添加到ninja-postoffice并在application.conf中配置您的SMTP服务器.

然后,您可以在应用程序中注入邮局邮件 . 这使您可以创建一个新的Mail实例并通过Postoffice发送它.

Adding the dependency and installing the module

首先-将依赖项添加到pom.xml中:

<dependency>
    <groupId>org.ninjaframework</groupId>
    <artifactId>ninja-postoffice</artifactId>
    <version>NINJA_VERSION_YOU_ARE_USING</version>
</dependency>

并通过install(new NinjaPostofficeModule(ninjaProperties))在Ninja应用程序的Module.java文件中启动该模块.

@Singleton
public class Module extends AbstractModule {
    @Override
    protected void configure() { 
        install(new NinjaPostofficeModule());
    }

}

Configuration and basic usage

通过以下参数在application.conf中配置邮件服务器:

smtp.host=...               // Hostname of the smtp server (e.g. smtp.mycompany.com)
smtp.port=...               // Port of the smtp server  (e.g. 465).
smtp.ssl=...                // Whether to enable SSL (true or false, default is false)
smtp.starttls=...           // Whether to enable STARTTLS (true or false, default is false)
smtp.starttls.required=...  // Whether to enforce using STARTTLS (true or false, default is false)
smtp.user=...               // Username to access the smtp server
smtp.password=...           // The password
smtp.debug=...              // Enable logging of a huge amount of debug information (true or false)

如果要发送邮件,可以将邮局和"邮件提供者"注入您的班级.

public class MailController {

    @Inject
    Provider<Mail> mailProvider;

    @Inject
    Postoffice postoffice;

    public void sendMail() {
    
        Mail mail = mailProvider.get();

        // fill the mail with content:
        mail.setSubject("subject");

        mail.setFrom("from1@domain");

        mail.addReplyTo("replyTo1@domain");
        mail.addReplyTo("replyTo2@domain");

        mail.setCharset("utf-8");
        mail.addHeader("header1", "value1");
        mail.addHeader("header2", "value2");

        mail.addTo("to1@domain");
        mail.addTo("to2@domain");

        mail.addCc("cc1@domain");
        mail.addCc("cc2@domain");

        mail.addBcc("bcc1@domain");
        mail.addBcc("bcc2@domain");

        mail.setBodyHtml("bodyHtml");

        mail.setBodyText("bodyText");

        // finally send the mail
		try {
		    postoffice.send(mail);
		} catch (EmailException | AddressException e) {
		    // ...
		}
    }
}

Mail in development and in testing

当Ninja在测试开发模式下运行时,默认情况下, Postoffice将由PostofficeMockImpl实现.

PostofficeMockImpl不发送邮件,而是存储邮件,因此您可以通过getLastSentMail()检查它们是否实际上已发送.

PostofficeMockImpl还可以打印出将发送到system.out的电子邮件. 如果您正在开发应用程序,但又不想检查您的电子邮件帐户以查看是否已发送某些消息,那么这很好.

Advanced usage

Specifying own Postoffice implementation

您可以通过application.conf中的以下参数覆盖将使用的实现:

postoffice.implementation=... // Implementation to use for interface Postoffice

如果要在开发人员模式下使用真实的SMTP邮局(默认情况下不使用模拟的邮局),则可以使用以下参数覆盖该行为:

%dev.postoffice.implementation=ninja.postoffice.commonsmail.PostofficeCommonsmailImpl

by  ICOPY.SITE