SMTP라는 용어를 들어본 적은 있지만 정확히 무엇인지 궁금했던 분들이 많을 것입니다. SMTP는 이메일 메시지를 처리하는 가장 일반적인 방식 중 하나입니다.
이 글에서는 SMTP가 무엇인지 설명하고, SendGrid 같은 SMTP 서비스 제공업체를 활용해 내 이메일 주소에서 메일을 발송하는 방법까지 단계별로 알아보겠습니다.
SMTP란 무엇인가?
SMTP(Simple Mail Transfer Protocol, 단순 우편 전송 프로토콜)는 인터넷 서버 간에 이메일을 주고받을 때 사용되는 통신 규약입니다. 예를 들어 Gmail 계정으로 이메일을 보내면, 메일 클라이언트는 SMTP를 통해 해당 메시지를 서버로 전송하고, 서버 역시 SMTP를 사용해 수신자의 메일 서버로 메일을 전달합니다.
기술적인 세부 사항까지 깊이 들어가지 않더라도, 쉽게 말해 SMTP는 '이메일 서버'라고 생각하면 됩니다.
SendGrid란 무엇인가?
SendGrid는 SMTP 서비스 제공업체입니다. 실제로 freeCodeCamp도 Quincy의 주간 뉴스레터를 발송할 때 SendGrid를 사용하고 있습니다.
다른 많은 SMTP 제공업체와 마찬가지로, SendGrid는 자사의 메일 서버를 빌려 이메일을 보낼 수 있게 해줍니다. 대량의 이메일을 직접 발송한다면 상당한 시간과 노력이 필요하기 때문에, 이런 서비스는 대량 메일 발송에 매우 유용한 선택지입니다.
SendGrid 계정 만들기
SendGrid 서비스를 사용하는 첫 번째 단계는 계정 생성입니다. SendGrid 공식 웹사이트에 접속해 회원가입을 진행하세요. 다양한 요금제가 있지만, 최소한 이 튜토리얼을 따라 하는 데는 무료 플랜만으로 충분합니다.
다만 이메일 목록이 커지면 더 높은 구독 등급의 추가 기능이 필요할 수 있습니다.
로그인이 완료되면 기본 대시보드 화면을 확인할 수 있습니다.

SendGrid에 도메인 또는 이메일 연동하기
대시보드에서 "Settings(설정)"를 클릭한 후 드롭다운 메뉴에서 "Sender Authentication(발신자 인증)"을 선택합니다. 발신자 인증 설정은 어떤 이메일 계정에서 메일을 보낼 수 있는지 SendGrid에 지정하는 곳입니다.
여기에는 두 가지 방법이 있습니다. 자신만의 커스텀 도메인이 있다면 도메인 인증(Domain Authentication)을 설정할 수 있고, Gmail 같은 개인 이메일 주소를 사용한다면 단일 발신자 인증(Single Sender Authentication)을 설정해야 합니다.
본인에게 맞는 옵션을 선택한 뒤 SendGrid의 안내에 따라 설정을 마치면 아래와 같은 화면을 볼 수 있습니다.

SendGrid API로 이메일 보내기
실제 이메일 발송은 SendGrid의 API를 통해 이루어집니다. API를 사용하기 전에 먼저 API 키를 생성해야 합니다.
대시보드에서 "Settings" → "API Keys"를 차례로 선택한 후, "Create API Key"를 클릭하고 키에 부여할 권한을 지정합니다(문제를 피하기 위해 저는 모든 권한을 부여했습니다).
키가 생성되면 다시 조회할 수 없으므로 반드시 안전한 곳에 저장해 두세요.

API 키를 확보했다면, 이제 /mail/send 엔드포인트를 호출하는 코드를 작성해야 합니다. 코드를 직접 작성할 수도 있고, SendGrid의 Node.js 패키지 같은 헬퍼 라이브러리를 활용할 수도 있습니다.
Node.js 패키지를 사용할 때는 아래와 같이 이메일 관련 값을 설정합니다.
to: 수신자 이메일 주소from: 발신자 이메일 주소 — 발신자 인증 설정과 일치해야 합니다.subject: 이메일 제목text: 일반 텍스트 형식 이메일의 본문 내용html: HTML 형식 이메일의 본문 내용
순수 API 호출을 할 때는 속성명이 다르며, 다른 헬퍼 라이브러리 역시 속성 구성이 조금씩 다릅니다. 따라서 사용하려는 방식에 맞는 공식 문서를 반드시 참고하세요.
SendGrid 동적 템플릿(Dynamic Template) 활용하기
API 호출 시 이메일 내용을 직접 담아 보내는 대신, 동적 템플릿(Dynamic Template)을 사용해 콘텐츠를 생성하는 방법도 있습니다.
동적 템플릿을 사용하면 발송할 이메일의 내용을 미리 설정해 둘 수 있고, Handlebars 기능으로 특정 데이터 필드를 동적으로 치환할 수도 있습니다.
동적 템플릿을 만들려면 대시보드에서 "Email API" → "Dynamic Templates"를 차례로 선택한 뒤, "Create a Dynamic Template" 버튼을 클릭합니다. 그러면 하단에 생성된 템플릿이 나타납니다.
템플릿을 클릭하고 "Add Version"을 선택하면 템플릿 종류 선택 화면이 열립니다. 빈 템플릿(blank template)을 고른 후 원하는 편집기 유형을 선택하세요(저는 코드 편집기를 사용했습니다).

이메일 본문을 작성하면서 {{name}} 같은 플레이스홀더를 넣으면, 실제 발송 시 API 호출을 통해 해당 위치에 동적 데이터가 채워집니다.
렌더링 결과를 미리 확인하고 싶다면 "Test Data" 탭에서 플레이스홀더에 넣을 샘플 데이터를 추가하면 됩니다.
API로 차단/반송/스팸 현황 확인하기
전송 실패 이메일을 추적하는 것은 매우 중요합니다. SendGrid는 이를 돕는 도구를 제공하며, 세 가지 대시보드 화면(또는 데이터를 프로그래밍 방식으로 파싱하고 싶다면 API 엔드포인트)을 통해 확인할 수 있습니다.
Blocked(차단): 수신 측 이메일 제공업체의 정책에 의해 거부된 이메일입니다. 외부 메일을 받지 않는 대학 이메일이나, 메일 서버 자체를 찾을 수 없는 경우(DNS 확인 실패) 등이 여기에 해당합니다.Bounced(반송): 서버에는 도달했지만 되돌아온 이메일입니다. 메일 서버는 존재하지만 해당 사용자 계정이 없거나, 받은 편지함 용량이 가득 찬 경우에 발생합니다.Spam(스팸): 감시해야 할 가장 중요한 항목입니다. 사용자가 여러분의 이메일을 받고 자신의 제공업체에 스팸으로 신고하면 기록됩니다. 스팸 신고는 발신자 평판에 직접적인 영향을 미치므로, 한번 스팸으로 신고한 사람에게는 절대 다시 이메일을 보내지 않아야 합니다.
그 외 알아두어야 할 사항들
발신자 평판 이야기가 나온 김에 짚고 넘어갈 것이 있습니다. SendGrid는 "Sender Reputation(발신자 평판)"이라는 지표를 제공합니다. 이 지표는 플랫폼을 통해 이루어진 활동을 종합한 것으로, 이메일 제공업체들이 여러분의 메일을 어떻게 처리할지 가늠하게 해 줍니다.
평판이 낮아지면 이메일이 자동으로 스팸함에 분류되거나, 심한 경우 IP 주소 자체가 차단될 수도 있습니다.
SendGrid 무료 플랜을 사용한다면 공유 IP(shared IP)를 이용하게 됩니다. 즉, 같은 IP를 통해 다른 고객들도 이메일을 발송하며, 그들의 행위가 여러분의 평판에 악영향을 줄 수 있습니다.
대량의 이메일을 발송할 계획이라면, 평판을 안전하게 지키기 위해 전용 IP(dedicated IP) 구매를 권장합니다.
마무리
이 글이 SendGrid와 그 서비스를 이해하는 데 도움이 되었기를 바랍니다. 이제 여러분도 직접 이메일을 발송할 준비가 되었습니다.
이메일 뉴스레터를 시작할 계획이라면, 효과적인 뉴스레터 제작 방법을 다룬 글도 함께 참고해 보세요.