6.3. camel-mail

与电子邮件交互由 邮件 组件提供。

默认情况下,Camel 将创建自己的邮件会话,并使用它来与您的邮件服务器交互。由于 JBoss EAP 已经提供了一个 mail 子系统,其中包含对安全连接、用户名和密码加密等所有相关支持,因此建议在 JBoss EAP 配置中配置您的邮件会话,并使用 JNDI 将它们连接到您的 Camel 端点。

6.3.1. JBoss EAP 配置

首先,您要为邮件服务器配置 JBoss EAP 邮件子系统。以下示例添加了 Google Mail IMAP 和 SMTP 的配置。

在 'default' 会话后配置额外的 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 上的 smtp.gmail.com 和端口 993 上的 imap.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. 邮件制作者

这个示例使用 SMTPS 协议,以及 CDI 与 camel-cdi 组件。您在 JBoss EAP 配置中配置的 Java 邮件会话通过 JNDI 注入到 Camel RouteBuilder 中。

6.3.3.1.1. 路由构建器 SMTPS 示例

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 MailEndpoint。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 可以配置为使用 SSL / TLS 管理 Java 邮件会话及其关联的传输。在配置邮件会话时,您可以在服务器类型上配置 SSL 或 TLS:

  • smtp-server
  • imap-server
  • pop-server

通过设置属性 ssl="true"tls="true"

6.3.4.2. 保护密码

建议不要在配置文件中使用明文密码。您可以使用 WildFly Vault 屏蔽敏感数据。

6.3.4.3. Camel 安全

Camel 端点安全文档可在 邮件 组件指南中找到。Camel 还有一个 安全摘要页面

6.3.5. GitHub 上的代码示例

GitHub 上提供了一个 camel-mail 应用程序示例,供您尝试发送 / 接收电子邮件。