Post
KO

aws - ses 설정

출처 : http://blog.naver.com/PostView.nhn?blogId=my0biho&logNo=220937119874

AWS - SES(Simple Mail service) 서비스 등록 하기!

오랜만에 블로그에 글을 남기네요. 그것도 AWS를 남기게 될 거라고는 생각을 못했네요.

이직 후 첫 요구사항이 메일링 서비스 교체 입니다.

AWS 의 SES 서비스를 이용해서 메일을 보내고 싶다는 내용이었는데요.

하여 개인 계정으로 테스트를 등록을 진행하였습니다.

SES서비스 간편하면서도 까다롭네요. 하지만 잘 이용한다면 충분히 도움될만한 내용이라 생각합니다.

먼저 SES 서비스의 주의사항으로는

반송율이 10%를 넘으면 안된다고 하는 내용이 있습니다. 이런경우 계정을 블럭 시켜버리는 것으로 보입니다.

반송율 체크의 가장 큰 요소는 현재 보내는 메일 주소가 존재하냐 안하냐 입니다. (블럭 해제 불가)

존재하지 않는 주소로 메일을 보낸다 -> 이것은 반송율에 들어가게 됩니다. 주기적 모니터링이 필요한 요소 입니다.

그럼 SES 서비스를 시작해볼까요?

![](/assets/images/posts/221049944965/e808e1ff9c77.png?type=w2)

로그인을 하신뒤에 -> 서비스 중에 AWS SES 를 찾아서 링크를 타고 들어가시면 됩니다.

위의 화면은 사용신청이 완료된 경우 입니다.

최초의 경우 다른 화면이 보일 수 있지만 당황하지 마시고 신청부터 하시면 됩니다. SES 사용!!

![](/assets/images/posts/221049944965/482366c11a6d.png?type=w2)

최초 화면입니다.

아직 아시아 지역은 SES 서비스용 서버가 없는거 같습니다.

EAST 버지니아로 보통 한다고 하네요. WEST가 더 빠르지 않을까요? 미국 동부 보다는.. 서부가 한국하고 가까우니…

어쨌거나 재쨌거나..

선택을하시면 맨 첫 화면을 보실 수 있습니다.

![](/assets/images/posts/221049944965/2903c4e31032.png?type=w2)

[E-Mail 등록 화면]

첫 화면에서

Domains 와 Email Addresses 를 선택하여 등록을 해야 됩니다.

Domains 등록은 네임서버에 TXT 키를 전달해야 되므로 해당 부분은 네임서버쪽 확인을 하시면 됩니다.

간단하게 등록하고자 하면 Email Addresses에 위 그림과 같은 방식으로 등록하면 됩니다.

verify a new email address 버튼을 누르면

위 그림의 팝업처럼 나옵니다. 실제 존재하는 E-Mail 주소를 입력하고 등록을 누르면

해당 메일주소로 인증메일이 도착합니다.

![](/assets/images/posts/221049944965/3472d3370b5c.png?type=w2)

[인증 요청 메일]

위 메일이 도착하면 중간에 링크를 눌러서 인증절차를 마무리 해야됩니다.

그러면 환영인사와 함께 메일이 등록되었음을 알 수 있습니다.

![](/assets/images/posts/221049944965/0b37cf46a43e.png?type=w2)

위 status가 초록색으로 등록된 상태임을 나타냅니다.

이제 위 메일주소로 보내거나 받을 수 있습니다.

문제는 저런식으로 등록 및 인증이 된 메일로만 송 수신이 가능합니다.

도메인 역시 마찬가지 입니다.

예로 WeMail.com 이라는 도메인이 등록이 되었으면

aaa@WeMail.com 이라는 메일 주소와 같은 형태의 주소에만 메일이 갑니다.

이것을 해결하기 위해서는 몇가지 설정을 해야됩니다.

SES를 통해서 메일을 보낼때 사용되는 방식은 Api(Https) 를 통한 방법, 자체 라이브러리(AWS LIB), SMTP

등의 방법이 있습니다.

제가 활용한 방법은 SMTP를 활용하는 것 입니다.

먼제 SMTP를 활성화 해야 됩니다.

![](/assets/images/posts/221049944965/8758ce52dafb.png?type=w2)

위 화면과 같이 smtp settings 를 통해 create my smtp credentials 를 생성합니다.

생성은 매우 간단하므로 직접 하시면 되고 최종적으로 주는 CVS파일을 잘 받아서

가지고 계시면 됩니다.

ACCESS KEY 와 PASSWORD 가 들어있으므로 잘 관리하면 됩니다.

잃어버리면 언제든 다시 생성할 수 있으니 걱정 없구요.

생성이 되었다면 IAM 이라는 서비스 화면으로 가게 될 겁니다.

![](/assets/images/posts/221049944965/cfbd31708beb.png?type=w2)

위와 같이 smtp용 user가 생성이 되었으며

메일을 보내기 위한 권한이 생성됩니다.

권한을 보려면 해당 유저링크를 클릭하시면 됩니다.

![](/assets/images/posts/221049944965/052d2704fcc1.png?type=w2)

클릭하여 회색으로 된 바를 누르면 위와 같은 텍스트가 들어가 있는데.

ses:sendrawEmail 이게 ses의 메일을 보내는 기능을 사용하는 내용입니다.

이걸 언제 생성했냐면 smtp credentials 를 생성할때 같이 생성하게 됩니다.

위 내용이 추가가 되었다면 이제 한가지가 남았는데요.

그건 aws 팀에 이 메일을 사용하기 위한 승인을 받아야 됩니다.

![](/assets/images/posts/221049944965/e66998a8e811.png?type=w2)

위 화면처럼 support center 로 이동합니다.

그리고 create case 메뉴로 이동합니다.

![](/assets/images/posts/221049944965/13ba9a8f4123.png?type=w2)

create case에 오면

위 화면과 같이 뭔가를 보내야 합니다.

이것은 ses를 사용하기 위해 승인을 해달라고 요청해야 되는 부분입니다.

중간에

Regarding 은 service limit increase 를 선택하시고

limit type 에는 ses sending limits 를 선택하시고 하루 보낼 이메일 량을 선택하시면 됩니다.

mail type 은 선택하시면 되고,

WebSite URL은 TXT이므로 입력하시면 됩니다.

첫번째 질문 항목은 YES 내용은 구글번역을 이용해보시길…

“이메일 전송은 AWS 서비스 약관 및 AUP를 준수합니다.”

위와 같은 내용을 볼 수 있습니다.

두번째와 세번째는 NO를 선택합니다.

샌드박스를 벗어나야 하기 때문이죠.

Use Case Description 은 직접 적으셔야 되며, 해당 내용은

샌드박스를 벗어나게 해달라는 요청을 하셔야 됩니다.

샌드박스를 벗어나지 못하면 등록된 메일 또는 도메인 외에는 전송이 불가능합니다.

![](/assets/images/posts/221049944965/8daffe1b21c1.png?type=w2)

보낸 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의 경우

나머지는 저 소스를 더 쉽게 쓸 수 있도록 개선하는 것 이겠죠? ^^

실제로 메일을 보내본 결과는 아래와 같습니다.

![](/assets/images/posts/221049944965/4c91fe111919.png?type=w2)
This article is licensed under CC BY 4.0 by the author.