6.3. camel-mail
与电子邮件的交互由 邮件 组件提供。
默认情况下,Camel 将创建自己的邮件会话,并使用它来与您的邮件服务器进行交互。由于 JBoss EAP 已经为安全连接、用户名和密码加密提供所有相关支持,因此建议在 JBoss EAP 配置中配置您的邮件会话,并使用 JNDI 将它们连接到您的 Camel 端点。
6.3.1. JBoss EAP 配置
首先,您为 Mail 服务器配置 JBoss EAP 邮件子系统。以下示例添加了 Google 邮件 IMAP 和 SMTP 的配置。
在"默认"会话后配置一个 mail-session。
<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 debug="true" name="gmail" jndi-name="java:jboss/mail/gmail"> <smtp-server outbound-socket-binding-ref="mail-gmail-smtp" ssl="true" username="your-username-here" password="your-password-here"/> <imap-server outbound-socket-binding-ref="mail-gmail-imap" ssl="true" username="your-username-here" password="your-password-here"/> </mail-session> </subsystem>
您可以配置 'mail-gmail-smtp' 和 'mail-gmail-imap' 的 outbound-socket-binding-ref
值。
下一步是配置这些套接字绑定。您可以按照以下方法在 socket-binding-group
配置中添加额外的绑定。
<outbound-socket-binding name="mail-gmail-smtp"> <remote-destination host="smtp.gmail.com" port="465"/> </outbound-socket-binding> <outbound-socket-binding name="mail-gmail-imap"> <remote-destination host="imap.gmail.com" port="993"/> </outbound-socket-binding>
这会将邮件会话配置为连接到端口 465 和 192.168.0.3 上的端口 465.gmail.com 上的 host smtp.gmail.com。如果您使用不同的邮件主机,则此详细信息会有所不同。
6.3.2. POP3 配置
如果您需要配置 POP3 会话,则与以上示例中定义的原则相同。
<!-- Server configuration --> <pop3-server outbound-socket-binding-ref="mail-pop3" ssl="true" username="your-username-here" password="your-password-here"/> <!-- Socket binding configuration --> <outbound-socket-binding name="mail-gmail-imap"> <remote-destination host="pop3.gmail.com" port="993"/> </outbound-socket-binding>
6.3.3. Camel 路由配置
6.3.3.1. mail producer
这个示例使用 SMTPS 协议和 CDI 与 camel-cdi 组件一起。您在 JBoss EAP 配置中配置的 Java 邮件会话通过 JNDI 注入到 Camel RouteBuilder 中。
6.3.3.1.1. 路由构建器 SMTP 示例
GMail 邮件会话使用 @Resource
注释注入 Producer 类,并引用您之前配置的 jndi-name
属性。这可让您在 camel-mail 端点配置中引用邮件会话。
public class MailSessionProducer { @Resource(lookup = "java:jboss/mail/greenmail") private Session mailSession; @Produces @Named public Session getMailSession() { return mailSession; } }
public class MailRouteBuilder extends RouteBuilder { @Override public void configure() throws Exception { from("direct:start") .to("smtps://smtp.gmail.com?session=#mailSession"); } }
要发送电子邮件,您可以创建一个 ProducerTemplate,并将适当的正文与必要的电子邮件标头一起发送。
Map<String, Object> headers = new HashMap<String, Object>(); headers.put("To", "destination@test.com"); headers.put("From", "sender@example.com"); headers.put("Subject", "Camel on Wildfly rocks"); String body = "Hi,\n\nCamel on Wildfly rocks!."; ProducerTemplate template = camelContext.createProducerTemplate(); template.sendBodyAndHeaders("direct:start", body, headers);
6.3.3.2. 邮件消费者
要接收电子邮件,您可以使用 IMAP 邮件端点。Camel 路由配置如下所示:
public void configure() throws Exception { from("imaps://imap.gmail.com?session=#mailSession") .to("log:email"); }
6.3.4. 安全性
6.3.4.1. SSL 配置
JBoss EAP 可以配置为管理 Java 邮件会话,以及使用 SSL / TLS 管理它们的相关传输。在配置邮件会话时,您可以在服务器类型上配置 SSL 或 TLS:
- smtp-server
- imap-server
- pop-server
通过设置属性 ssl="true"
或 tls="true"
。
6.3.4.2. 保护密码
建议您不要对配置文件中的密码使用明文。您可以使用 WildFly Vault 屏蔽敏感数据。
6.3.4.3. Camel 安全
6.3.5. GitHub 上的代码示例
GitHub 上提供了 camel-mail 应用程序示例,供您尝试发送/接收电子邮件。