AWS SES send Email with SenderName

AWS SES 를 이용한 메일발송시 발송자 이름 지정

AmazonSimpleEmailServiceClient로 이메일 발송을 구현하다 보니

다른 서비스에서 보낸 메일들과 차이가 눈에 띄었다.

-_- 내가 구현한 메일발송은 발송자 이름이 표시가 안되는것이었다. 덜덜..

발송자 이름이라 함은

구글메일 자세히 보기를 하면 보이는 부분이다.

이동권 <circlee7@gmail.com>

애초에 자바 메일을 구현하기 보다는 다른 응용서비스를 사용했기에 신경쓴적이 없어서. 기반지식이 전무..

fromAddress에 “이동권 <circlee7@gmail.com>” 이라고 지정하고 발송.
전송 잘되고, 수신도 잘되지만. 구글메일을 보면 “발송자 불명”이라 나온다.

name <address>형식은 맞지만 name부분이 잘못됨을 느꼈다.
(끼워 맞추기 어거지 코딩은 하기싫은데. 간단할줄 알았다..)

SES 메일 발송 객체인 SendEmailRequest에서 fromAddress를 설정하는 withSource메소드를 봤다.

API 주석에 다음과 같은 내용이 써져있었다.
(API주석을 달아주다니…굳)

In all cases, the email address must be 7-bit ASCII. If the text must contain any other characters, then you must use MIME encoded-word syntax (RFC 2047) instead of a literal string. MIME encoded-word syntax uses the following form: =?charset?encoding?encoded-text?=. For more information, see RFC 2047.

역시.. 스펙..스펙을 봐야해..하악

MIME (Multipurpose Internet Mail Extensions)스펙을 알았어야 했는데..

RFC2047 스펙 확인.

RFC2047 스펙으로 fromAddress “이동권 <circlee7@gmail.com>”은 아래와 같다.

=?utf-8?Q?=EC=9D=B4=EB=8F=99=EA=B6=8C?=<circlee7@gmail.com>

=?charset?endcoding?encodedText?=

charset은 말그대로 캐릭터 셋이고

encoding은 스펙상 “Q”와 “B”로 지정된다.

encoding Q의 경우 encodedText 는 = 로 구분된 두자리 16진수 값이 온다.

%인코딩인 url인코딩과 같은 값이 =로구분되어 나옴을 알수 있다.

encoding B의 경우 encodedText 는 Base64인코딩과 같다.

이미 만들어진 javax.mail.MIMEUtility를 사용하자

gradle dependency 추가

compile “javax.mail:mail:1.4.1”

그리고 사용하자

서비스는 다음과 같이

메소드 오버로딩으로 ..

Written by

엘디는 사랑입니다.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store