-
Apache James + AWS EC2 메일 서버 구축Server/Spring Boots 2021. 6. 30. 18:04
메일 서버 구축을 테스트할 일이 생겨서 이런저런 자료를 찾던 중, Apache James를 찾게 되었다. 글 작성 당시의 최신 버전은 apache-james-3.6.0-app.zip 이다.
https://james.apache.org/server/quick-start.html
다운로드 받아서 압축을 푼다
(경로는 /usr/local/server/james)
$ wget https://mirror.navercorp.com/apache/james/server/3.6.0/james-server-app-3.6.0-app.zip $ unzip james-server-app-3.6.0-app.zip
그리고 각각의 설정 파일을 수정해준다.
1) domainlist.xml
- defualtDomain을 사용할 도메인으로 바꿔준다.
<domainlist class="org.apache.james.domainlist.jpa.JPADomainList"> <autodetect>false</autodetect> <autodetectIP>false</autodetectIP> <defaultDomain>사용할 도메인</defaultDomain> </domainlist>
2) smtpserver.xml
- authRequired: 메일을 보내기 위해서는 인증을 해야 한다. (오픈 릴레이를 막기 위해서 필요하다.)
- verifyIdentity: 발신인을 임의 수정 못하게 하기 위한 설정
<authRequired>true</authRequired> <verifyIdentity>true</verifyIdentity>
3) mailetcontainer.xml (중요)
- 외부로 메일을 발송하기 위해서는 아래 구문을 찾아서 주석처리해줘야 한다.
- 이것이 활성화된 상태에서는 메일을 보내더라도 relaying denied 가 발생하게 된다.
<!-- <mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor"> <processor>relay-denied</processor> <notice>550 - Requested action not taken: relaying denied</notice> </mailet> -->
이어서 james 서버를 기동하고, 도메인과 사용자계정을 생성해준다.
도메인, 계정 등록은 1번씩만 해두면 된다.
$ sh james start $ sh james-cli.sh adddomain 사용할도메인 $ sh james.cli.sh adduser 사용자@사용할도메인 패스워드
이제 Route53 에서 호스트 세팅을 하자
여기서 중요한 것은 MX 유형의 레코드를 잡아야 한다.
가령 mydomain.com 이란 호스트를 이용할거면 아래와 같이 MX 레코드와 A 레코드를 설정해주어야 한다.
mydomain.com MX 10 mail.mydomain.com
mail.mydomain.com A (서버의 고정 IP, AWS의 경우 Elastic IP)
레코드 셋이 잘 세팅 되었는지 확인은 아래에서 하면 된다.
이메일서버를 테스트 하면 아래와 같다
AWS EC2에서 25번 포트로 SMTP를 이용하여 메일을 발송하려면 RDNS 제한을 풀어달라고 요청을 보내야 한다.
https://console.aws.amazon.com/support/contacts?#/rdns-limits
아래와 같이 telnet에서 커맨드로 테스트 할 수 있다.
220 ip-172-*** JAMES SMTP Server Server (JAMES SMTP Server ) ready HELO mydomain.com 250 ip-172-*** Hello mydomain.com [61.***.***.***]) AUTH LOGIN 334 VXNl**** YWRt**** 334 UGFz**** dGVz**** 235 Authentication Successful MAIL FROM: <admin@mydomain.com> 250 2.1.0 Sender <admin@mydomain.com> OK RCPT TO: <****@naver.com> 250 2.1.5 Recipient <****@naver.com> OK DATA 354 Ok Send data ending with <CRLF>.<CRLF> SUBJECT: TEST MAIL FROM: <admin@mydomain.com> TO: <****@naver.com> mail test . 250 2.6.0 Message received
발송하면 실제로 외부 메일 (네이버)로 발송이 되게 된다.
썬더버드를 이용한 메일 테스트도 가능하다.
https://www.thunderbird.net/ko/
당연한 이야기지만, SMTP와 IMAP, POP3 등의 포트는 AWS 보안 설정에서 허용해줘야 정상적으로 메일을 송/수신 할 수 있다.
'Server > Spring Boots' 카테고리의 다른 글
Spring Security + CustomAuthenticationFilter 만들기 (0) 2021.05.27 Spring Boot Maven Multi Module 개발환경 설정하기 (0) 2020.11.11 Spring Profile + Maven Profile + WAR파일 배포 (1) 2020.10.21 [Spring boot] Class path contains multiple SLF4J bindings 에러 (0) 2020.10.21