第 22 章 邮件子系统
22.1. 在邮件子系统里使用自定义传输
当使用标准的邮件服务器(POP3、IMAP)时,服务器可以定义一系列属性,其中一些是必需的。
最重要的属性是
outbound-socket-binding-ref
,它是对转出邮件套接字绑定的引用,且是用主机地址和端口号码来定义的。
对于某些用户来说,这并非最有效的解决方案,因为他们的主机配置将多个主机用于负载平衡。然而,要求用户实现自定义邮件传输的标准的 JavaMail 不支持这个配置。
这些自定义的传输不要求
outbound-socket-binding-ref
且允许自定义的主机属性格式。
自定义传输可以通过下列 CLI 命令来进行配置:
过程 22.1.
- 添加新的邮件会话。下面的命令创建名为 mySession 的新会话并设置 JNDI 为
java:jboss/mail/MySession
:/subsystem=mail/mail-session=mySession:add(jndi-name=java:jboss/mail/MySession)
- 添加转出套接字绑定。下面的命令添加了名为
my-smtp-binding
的套接字绑定,它指向localhost:25
。/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-smtp-binding:add(host=localhost, port=25)
- 用
outbind-socket-binding-ref
添加 STMP 服务器。下面的命令添加一个名为my-smtp-binding
的 SMTP,并定义一个用户名、密码和 TLS 配置。/subsystem=mail/mail-session=mySession/server=smtp:add(outbound-socket-binding-ref= my-smtp-binding, username=user, password=pass, tls=true)
- 对 POP3 和 IMAP 重复这个过程:
/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)
/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 配置示例,它在 custom-server 属性里强调了自定义格式:
<subsystem xmlns="urn:jboss:domain:mail:1.1"> <mail-session jndi-name="java:/Mail" from="user.name@domain.org"> <smtp-server outbound-socket-binding-ref="mail-smtp" tls="true"> <login name="user" password="password"/> </smtp-server> <pop3-server outbound-socket-binding-ref="mail-pop3"/> <imap-server outbound-socket-binding-ref="mail-imap"> <login name="nobody" password="password"/> </imap-server> </mail-session> <mail-session debug="true" jndi-name="java:jboss/mail/Default"> <smtp-server outbound-socket-binding-ref="mail-smtp"/> </mail-session> <mail-session debug="true" jndi-name="java:jboss/mail/Custom"> <custom-server name="smtp"> <login name="username" password="password"/> <property name="host" value="mail.example.com"/> </custom-server> <custom-server name="pop3" outbound-socket-binding-ref="mail-pop3"> <property name="custom_prop" value="some-custom-prop-value"/> <property name="some.fully.qualified.property" value="fully-qualified-prop-name"/> </custom-server> </mail-session> <mail-session debug="true" jndi-name="java:jboss/mail/Custom2"> <custom-server name="pop3" outbound-socket-binding-ref="mail-pop3"> <property name="custom_prop" value="some-custom-prop-value"/> </custom-server> </mail-session> </subsystem>