6.3. camel-mail
メールとの対話は、mail コンポーネントによって提供されます。
デフォルトでは、Camel は独自のメールセッションを作成し、これを使用してメールサーバーと対話します。JBoss EAP はすでに、安全な接続、ユーザー名およびパスワードの暗号化などの関連する機能がすべてサポートされるメールサブシステムを提供しているため、JBoss EAP 設定内でメールセッションを設定し、JNDI を使用して Camel エンドポイントに接続することが推奨されます。
6.3.1. JBoss EAP の設定
最初に、メールサーバーに JBoss EAP メールサブシステムを設定します。以下の例では、Google Mail IMAP および SMTP の設定を追加します。
追加の mail-session は 'default' のセッションの後に設定されます。
<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. メールプロデューサー
この例では、CDI と camel-cdi コンポーネントの併用と共に、SMTPS プロトコルを使用します。JBoss EAP 設定内で設定した Java メールセッションは、JNDI を介して Camel RouteBuilder に注入されます。
6.3.3.1.1. ルートビルダー SMTPS の例
GMail のメールセッションは、以前に設定した jndi-name
属性への参照とともに @Resource
アノテーションを使用して Producer クラスに注入されます。これにより、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 エンドポイントのセキュリティードキュメントは、mail コンポーネントガイドにあります。Camel には セキュリティーの概要 ページもあります。
6.3.5. GitHub のコード例
GitHub で利用できる camel-mail アプリケーション のサンプルで、電子メールの送受信を試すことができます。