6.3. Camel-mail
이메일과의 상호 작용은 메일 구성 요소에서 제공합니다.
기본적으로 Camel은 자체 메일 세션을 만들고 이를 사용하여 메일 서버와 상호 작용합니다. JBoss EAP는 이미 보안 연결, 사용자 이름 및 암호 암호화 등에 대한 모든 관련 지원을 제공하는 메일 하위 시스템을 제공하므로 JBoss EAP 구성 내에서 메일 세션을 구성하고 JNDI를 사용하여 Camel 엔드포인트로 전달하는 것이 좋습니다.
6.3.1. JBoss EAP 구성
먼저 메일 서버에 대한 JBoss EAP 메일 하위 시스템을 구성합니다. 다음 예제에서는 Google Mail Cryostat 및 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 및 포트 993의 imap.gmail.com의 호스트 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. 메일 프로듀서
이 예에서는 camel-cdi 구성 요소와 함께 CDI와 함께 SMTPS 프로토콜을 사용합니다. JBoss EAP 구성 내에서 구성한 Java 메일 세션은 JNDI를 통해 Camel RouteBuilder에 삽입됩니다.
6.3.3.1.1. 라우팅 빌더 SMTPS 예
GECDHE 메일 세션은 이전에 구성한 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. 메일 소비자
이메일을 수신하려면 Cryostat 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 구성
SSL/TLS를 사용하여 Java 메일 세션 및 관련 전송을 관리하도록 JBoss EAP를 구성할 수 있습니다. 메일 세션을 구성할 때 서버 유형에 대해 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의 코드 예제
예제 camel-mail 애플리케이션은 GitHub에서 이메일 전송을 시도하거나 이메일을 수신해 볼 수 있습니다.