第 10 章 Mail 子系统

10.1. 配置 Mail 子系统

mail 子系统允许您在 JBoss EAP 里配置邮件会话,并使用 JNDI 把这些会话注入到应用程序。它也支持使用 Java EE 7 @MailSessionDefinition@MailSessionDefinitions 注解的配置。

配置应用程序里使用的 SMTP 服务器

  1. 用下列 CLI 命令配置 SMTP 服务器和转出套接字绑定,例如:

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-smtp:add(host=localhost, port=25)
    /subsystem=mail/mail-session=mySession:add(jndi-name=java:jboss/mail/MySession)
    /subsystem=mail/mail-session=mySession/server=smtp:add(outbound-socket-binding-ref=my-smtp, username=user, password=pass, tls=true)
  2. 在应用程序里调用配置的邮件会话

    @Resource(lookup="java:jboss/mail/MySession")
    private Session session;

10.2. 配置自定义传输

当使用标准的邮件服务器(如 POP3 或 IMAP)时,邮件服务器可以定义一系列属性,而一些属性是强制性的。其中最重要的是 outbound-socket-binding-ref,它是对转出邮件套接字绑定的引用,通过主机地址和端口号来定义。

对于使用多个主机来进行负载平衡的用户来说,定义 outbound-socket-binding-ref 可能不是最有效的解决方案。标准的 JavaMail 不支持使用多个主机进行负载平衡的主机配置。因此,使用这样的配置的用户必须实现自定义邮件传输。这些自定义邮件传输不要求 outbound-socket-binding-ref 并允许自定义的主机属性格式。

您可以用管理 CLI 配置自定义邮件传输。

  1. 添加新的邮件会话并指定 JNDI 名称。

    /subsystem=mail/mail-session=mySession:add(jndi-name=java:jboss/mail/MySession)
  2. 添加转出套接字绑定并指定主机和端口。

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-smtp-binding:add(host=localhost, port=25)
  3. 添加 SMTP 服务器并指定转出套接字绑定、用户名和密码。

    /subsystem=mail/mail-session=mySession/server=smtp:add(outbound-socket-binding-ref=my-smtp-binding, username=user, password=pass, tls=true)
注意

您可以用类似的步骤配置 POP3 或 IMAP 服务器。

POP3 服务器

/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-pop3-binding:add(host=localhost, port=110)
/subsystem=mail/mail-session=mySession/server=pop3:add(outbound-socket-binding-ref=my-pop3-binding, username=user, password=pass)

IMAP 服务器

/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-imap-binding:add(host=localhost, port=143)
/subsystem=mail/mail-session=mySession/server=imap:add(outbound-socket-binding-ref=my-imap-binding, username=user, password=pass)

要使用自定义服务器,您可以创建一个没有转出套接字绑定的自定义邮件服务器。您可以在自定义邮件服务器的属性定义里指定主机信息,例如:

/subsystem=mail/mail-session=mySession/custom=myCustomServer:add(username=user,password=pass, properties={"host" => "myhost", "my-property" =>"value"})

如果您定义了一个自定义协议,包含句点(.)的任何属性名都被当作全限定名且被直接处理。任何其他格式,如 my-property,将用下列格式进行转换:mail.server-name.my-property

下面是一个包含自定义服务器的邮件 XML 配置示例。

<subsystem xmlns="urn:jboss:domain:mail:2.0">
   <mail-session name="default" jndi-name="java:jboss/mail/Default">
        <smtp-server outbound-socket-binding-ref="mail-smtp"/>
   </mail-session>
    <mail-session name="myMail" from="user.name@domain.org" jndi-name="java:/Mail">
        <smtp-server password="password" username="user" tls="true" outbound-socket-binding-ref="mail-smtp"/>
        <pop3-server outbound-socket-binding-ref="mail-pop3"/>
        <imap-server password="password" username="nobody" outbound-socket-binding-ref="mail-imap"/>
    </mail-session>
    <mail-session name="custom" jndi-name="java:jboss/mail/Custom" debug="true">
        <custom-server name="smtp" password="password" username="username">
            <property name="host" value="mail.example.com"/>
        </custom-server>
    </mail-session>
    <mail-session name="custom2" jndi-name="java:jboss/mail/Custom2" debug="true">
        <custom-server name="pop3" outbound-socket-binding-ref="mail-pop3">
            <property name="custom-prop" value="some-custom-prop-value"/>
        </custom-server>
    </mail-session>
</subsystem>