搜索

6.3. camel-mail

download PDF

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

默认情况下,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 应用程序示例,供您尝试发送 / 接收电子邮件。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.