aws - ses 설정
출처 : http://blog.naver.com/PostView.nhn?blogId=my0biho&logNo=220937119874
AWS - SES(Simple Mail service) 서비스 등록 하기!
오랜만에 블로그에 글을 남기네요. 그것도 AWS를 남기게 될 거라고는 생각을 못했네요.
이직 후 첫 요구사항이 메일링 서비스 교체 입니다.
AWS 의 SES 서비스를 이용해서 메일을 보내고 싶다는 내용이었는데요.
하여 개인 계정으로 테스트를 등록을 진행하였습니다.
SES서비스 간편하면서도 까다롭네요. 하지만 잘 이용한다면 충분히 도움될만한 내용이라 생각합니다.
먼저 SES 서비스의 주의사항으로는
반송율이 10%를 넘으면 안된다고 하는 내용이 있습니다. 이런경우 계정을 블럭 시켜버리는 것으로 보입니다.
반송율 체크의 가장 큰 요소는 현재 보내는 메일 주소가 존재하냐 안하냐 입니다. (블럭 해제 불가)
존재하지 않는 주소로 메일을 보낸다 -> 이것은 반송율에 들어가게 됩니다. 주기적 모니터링이 필요한 요소 입니다.
그럼 SES 서비스를 시작해볼까요?

로그인을 하신뒤에 -> 서비스 중에 AWS SES 를 찾아서 링크를 타고 들어가시면 됩니다.
위의 화면은 사용신청이 완료된 경우 입니다.
최초의 경우 다른 화면이 보일 수 있지만 당황하지 마시고 신청부터 하시면 됩니다. SES 사용!!

최초 화면입니다.
아직 아시아 지역은 SES 서비스용 서버가 없는거 같습니다.
EAST 버지니아로 보통 한다고 하네요. WEST가 더 빠르지 않을까요? 미국 동부 보다는.. 서부가 한국하고 가까우니…
어쨌거나 재쨌거나..
선택을하시면 맨 첫 화면을 보실 수 있습니다.
 [E-Mail 등록 화면]
첫 화면에서
Domains 와 Email Addresses 를 선택하여 등록을 해야 됩니다.
Domains 등록은 네임서버에 TXT 키를 전달해야 되므로 해당 부분은 네임서버쪽 확인을 하시면 됩니다.
간단하게 등록하고자 하면 Email Addresses에 위 그림과 같은 방식으로 등록하면 됩니다.
verify a new email address 버튼을 누르면
위 그림의 팝업처럼 나옵니다. 실제 존재하는 E-Mail 주소를 입력하고 등록을 누르면
해당 메일주소로 인증메일이 도착합니다.
 [인증 요청 메일]
위 메일이 도착하면 중간에 링크를 눌러서 인증절차를 마무리 해야됩니다.
그러면 환영인사와 함께 메일이 등록되었음을 알 수 있습니다.

위 status가 초록색으로 등록된 상태임을 나타냅니다.
이제 위 메일주소로 보내거나 받을 수 있습니다.
문제는 저런식으로 등록 및 인증이 된 메일로만 송 수신이 가능합니다.
도메인 역시 마찬가지 입니다.
예로 WeMail.com 이라는 도메인이 등록이 되었으면
aaa@WeMail.com 이라는 메일 주소와 같은 형태의 주소에만 메일이 갑니다.
이것을 해결하기 위해서는 몇가지 설정을 해야됩니다.
SES를 통해서 메일을 보낼때 사용되는 방식은 Api(Https) 를 통한 방법, 자체 라이브러리(AWS LIB), SMTP
등의 방법이 있습니다.
제가 활용한 방법은 SMTP를 활용하는 것 입니다.
먼제 SMTP를 활성화 해야 됩니다.

위 화면과 같이 smtp settings 를 통해 create my smtp credentials 를 생성합니다.
생성은 매우 간단하므로 직접 하시면 되고 최종적으로 주는 CVS파일을 잘 받아서
가지고 계시면 됩니다.
ACCESS KEY 와 PASSWORD 가 들어있으므로 잘 관리하면 됩니다.
잃어버리면 언제든 다시 생성할 수 있으니 걱정 없구요.
생성이 되었다면 IAM 이라는 서비스 화면으로 가게 될 겁니다.

위와 같이 smtp용 user가 생성이 되었으며
메일을 보내기 위한 권한이 생성됩니다.
권한을 보려면 해당 유저링크를 클릭하시면 됩니다.

클릭하여 회색으로 된 바를 누르면 위와 같은 텍스트가 들어가 있는데.
ses:sendrawEmail 이게 ses의 메일을 보내는 기능을 사용하는 내용입니다.
이걸 언제 생성했냐면 smtp credentials 를 생성할때 같이 생성하게 됩니다.
위 내용이 추가가 되었다면 이제 한가지가 남았는데요.
그건 aws 팀에 이 메일을 사용하기 위한 승인을 받아야 됩니다.

위 화면처럼 support center 로 이동합니다.
그리고 create case 메뉴로 이동합니다.

create case에 오면
위 화면과 같이 뭔가를 보내야 합니다.
이것은 ses를 사용하기 위해 승인을 해달라고 요청해야 되는 부분입니다.
중간에
Regarding 은 service limit increase 를 선택하시고
limit type 에는 ses sending limits 를 선택하시고 하루 보낼 이메일 량을 선택하시면 됩니다.
mail type 은 선택하시면 되고,
WebSite URL은 TXT이므로 입력하시면 됩니다.
첫번째 질문 항목은 YES 내용은 구글번역을 이용해보시길…
“이메일 전송은 AWS 서비스 약관 및 AUP를 준수합니다.”
위와 같은 내용을 볼 수 있습니다.
두번째와 세번째는 NO를 선택합니다.
샌드박스를 벗어나야 하기 때문이죠.
Use Case Description 은 직접 적으셔야 되며, 해당 내용은
샌드박스를 벗어나게 해달라는 요청을 하셔야 됩니다.
샌드박스를 벗어나지 못하면 등록된 메일 또는 도메인 외에는 전송이 불가능합니다.

보낸 case의 history는 위와 같이 확인이 가능하며,
상태가 승인이 되어야 비로서 사용이 가능해집니다.
이렇게 등록이 완료되면 이제 실제로 메일을 전송해보아야 겠지요?
String from = ""; String to = ""; from = reqData.get("fromMail").toString(); to = reqData.get("toMail").toString(); String subject = "dear mail Test biho!"; //제목 String body = "hey, did you know that this message was sent via simple Email Service programming for java 네이버링크"; String Access_Key = "YOU KEY"; String Secret_Key = "YOU PW"; String Host = "YOUR HOST"; String Port = "25"; Properties props = System.getProperties(); props.put("mail.transport.protocol", "smtps"); props.put("mail.smtp.port", Port); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.starttls.required", "true"); Session session = Session.getDefaultInstance(props); MimeMessage msg = new MimeMessage(session); msg.setFrom(new InternetAddress(from)); msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); msg.setSubject(subject); msg.setContent(body,"text/plain"); Transport transport = session.getTransport(); try{ transport.connect(Host, Access_Key, Secret_Key); // Send the email. transport.sendMessage(msg, msg.getAllRecipients()); System.out.println("Email sent!"); }catch (Exception e){ System.out.println("Error message: " + e.getMessage()); }finally{ transport.close(); }
위 소스는 샘플 소스 입니다.
대부분 SDK로 샘플소스를 뒤져보면 메인 applet 으로 실행하는 소스 뿐이 없어서..
위 소스는 spring mvc 기반 Controller에 세팅하고 ajax로 호출하여 진행하였습니다.
또 Mail-api를 활용하였으므로 smtp 기반 mail-api를 참고하시면 될 듯 합니다.
(tomcat은 8.5버전, spring은 4.2.9버전 입니다. java-mail-api-1.5 버전 javax.mail-1.5.5 버전 입니다.)
조금만 응용하시면 모두 성공할 수 있을것으로 보입니다. 위 라이브러리는 필 수 입니다. smtp의 경우
나머지는 저 소스를 더 쉽게 쓸 수 있도록 개선하는 것 이겠죠? ^^
실제로 메일을 보내본 결과는 아래와 같습니다.
