영수증, 인증 코드, 재설정 메일

제품이 보내는 메일
호출부터 결과까지

앱이 메시지를 보내면 OpenEmail이 자사 도메인으로 발송합니다. 모든 호출은 그 호출을 만든 키에 기록되고, 발송마다 읽을 수 있는 결과가 남습니다.

내 코드
templateorder-receipt
idempotency-keyorder_10482
202msg_9f2c7a14한 번만 발송
내 엔드포인트hooks.acme.dev
email.sentmsg_9f2c7a14
email.deliveredmsg_9f2c7a14
email.openedmsg_9f2c7a14

호출은 메시지 ID를 돌려줍니다. 엔드포인트가 받는 모든 이벤트에 같은 ID가 붙습니다.

출발점

지금은 이런 모습입니다.

메일이 코드에서 나갑니다

영수증, 가입 코드, 비밀번호 재설정 메일은 사람이 쓰는 것이 아니라 백엔드가 보냅니다.

보낸 뒤에 돌아오는 것이 없습니다

고객은 코드가 오지 않았다고 하는데, 대조해 볼 배달 기록이 없습니다.

공용 키 하나, 호출 기록은 없음

모든 서비스가 같은 비밀 키로 보내고, 어떤 호출이 언제 실패했는지 보여 주는 것이 없습니다.

작동 방식

네 단계면 돌아갑니다.

  1. 01

    도메인 확인

    설정에 표시된 레코드를 게시하면, 맞아떨어지는 순간 도메인이 초록색으로 바뀝니다.

  2. 02

    범위를 정한 키 발급

    키가 보낼 수 있는 주소와 도메인을 한정하고, 역할로 닿을 수 있는 범위를 제한하세요.

  3. 03

    메시지 전송 요청

    호출 한 번에 템플릿, 값, 받는 사람을 지정하고, 재시도해도 두 번 발송되지 않습니다.

  4. 04

    웹훅 받고 로그 읽기

    엔드포인트는 메시지 id로 모든 이벤트를 받고, 로그에는 배달됨, 반송됨, 실패가 표시됩니다.

바탕이 되는 기능

일을 해내는 구성 요소.

문서화된 API와 범위를 정할 수 있는 키, 타입이 있는 SDK, 엔드포인트로 가는 웹훅, 버전이 있는 템플릿, 그리고 발송 도메인을 뒷받침하는 레코드 위에서 돌아갑니다.

REST API

발급하고, 범위를 정하고, 폐기할 수 있는 키를 갖춘 문서화된 HTTP API.

/threads?query=invoice
{ "threads": 12 }
사람이 쥐고 있든 프로그램이 쥐고 있든 같은 사서함.
타입이 있는 SDK

TypeScript 클라이언트를 먼저, 나머지는 그다음.

/threads?query=invoice
{ "threads": 12 }
사람이 쥐고 있든 프로그램이 쥐고 있든 같은 사서함.
웹훅

폴링하게 두지 않고, 메일이 도착하면 엔드포인트에 알립니다.

/threads?query=invoice
{ "threads": 12 }
사람이 쥐고 있든 프로그램이 쥐고 있든 같은 사서함.
템플릿

한 번 쓰고 버전 관리해 여러 번 보내는 본문: 작성 창에서, 내 코드에서, 또는 에이전트가.

소개인보이스후속 연락
Sarah 님, 만나뵈어 반가웠습니다
인증된 발신자

발신 도메인이 공개한 레코드가 맞아떨어질 때 발신자 옆에 붙는 마크.

receipts@stripe.com
SPFDKIMDMARC
인증된 발신자
DMARC 정책

시작용 p=none 레코드를 복사하도록 보여주거나 동기화가 직접 씁니다. 대신 조여주지는 않습니다.

TXT_dmarc.acme.com

v=DMARC1; p=none; rua=…

선택관찰만
내 도메인으로 하는 추적

추적 링크와 열람 픽셀을 OpenEmail 주소 대신 links.yourdomain.com처럼 직접 고른 서브도메인으로.

보낸 메일이 언제 열렸는지 확인

보낸 메시지가 열렸는지, 언제, 몇 번, 어떤 링크가 클릭됐는지. 끄기 전까지 켜져 있고, 얻을 수 없는 수치는 솔직하게 알려줍니다.

실제 활용

구성 요소별로 하나씩.

짧은 페이지 네 개가 그 경로를 따라갑니다. 코드에서 보내기, 호출 로그 읽기, 보낸 뒤에 일어난 일, 그리고 아직 준비 중인 테스트 실행 중의 메일.

앱에서 보내는 메일

영수증, 인증 코드, 재설정 링크를 내 코드로 보내고, 도착하면 알림을 받으세요.

templateorder-receipt
202msg_9f2c7a14
email.sentmsg_9f2c7a14
email.deliveredmsg_9f2c7a14
email.openedmsg_9f2c7a14
연동 지켜보기

키가 한 모든 호출과 보낸 모든 웹훅을, 코드와 소요 시간과 함께.

oe_live_7f20교체됨
GET/emails20061 ms
POST/emails429send_quota_exceeded
가입 메일 테스트

테스트 실행마다 전용 주소를 주고, 받은 메일을 읽으세요.

signup-02@acme.com
이메일 주소 확인730915
signup-01@acme.com418204
signup-02@acme.com730915
보낸 뒤 무슨 일이 있었는지

모든 발송의 결과를 보고, 죽은 주소는 다음 발송에서 빼세요.

배달129
반송3
차단됨[email protected]보류 중

질문

가입 전에 자주 묻는 것.

재시도할 때 같은 메일이 두 번 가지 않는 이유는 무엇인가요?

호출 한 번에 템플릿, 값, 받는 사람이 지정되고, 그 호출을 재시도해도 두 번 발송되지 않습니다. 호출은 메시지 id로 응답하며, 엔드포인트가 받는 모든 이벤트에 같은 id가 담깁니다.

보낸 뒤에 무슨 일이 있었는지 볼 수 있나요?

네. 발송마다 배달됨, 반송됨, 신고됨, 실패로 표시되고 날짜, 출처, 발송 주소별로 볼 수 있습니다. 요청 로그에는 키가 만든 모든 호출의 메서드, 경로, 상태 코드, 소요 시간이 남습니다.

제가 쓰는 언어용 SDK가 있나요?

대부분은 아직 없습니다. 타입이 있는 클라이언트는 TypeScript가 먼저이고 나머지는 그 뒤를 따르므로, 지금은 다른 언어에서 문서화된 HTTP API를 직접 호출합니다.

관련 사례

같은 메일함으로 할 수 있는 다른 일.

메일은 제품이 받고

티켓, 항목, 고객마다 자기 주소를 가질 수 있습니다. 그 주소로 온 메일은 서명된 이벤트로 엔드포인트에 도착하고, 코드가 그 주소로 답합니다.

티켓 8123ticket-8123@in.yourapp.com
티켓 8124ticket-8124@in.yourapp.com
받는 사람ticket-8123@in.yourapp.com
보낸 사람ticket-8123@in.yourapp.com같은 주소
메일함은 소프트웨어에 맡기고

에이전트에게 자기 주소와, 할 수 있는 일만큼 범위를 정한 키를 주세요. 읽고, 라벨을 붙이고, 초안을 쓰고, 보내며, 하는 호출은 모두 기록됩니다.

listThreadsgetThreadsearchMailsendEmail
두 사람 이상에게

템플릿으로 한 번만 쓰세요. 편집기에서, 직접 쓴 코드에서, 또는 원하는 날짜에 보내고, 그 뒤에 무슨 일이 있었는지 확인하세요.

안녕하세요{{firstName}}Omar
소식 읽기
130보냄42열람9클릭

받은편지함을,
내 방식대로.

기업, AI, 에이전트, 개인 메일을 위한 이메일 인프라. 규모와 프라이버시, 통제권을 위해 만들었습니다. 이메일이 처음부터 갖췄어야 할 모든 것.

OpenEmail

기업, AI, 에이전트, 개인 메일을 위한 이메일 인프라. 규모와 프라이버시, 통제권을 위해 만들었습니다. 이메일이 처음부터 갖췄어야 할 모든 것.

© 2026 OpenEmail. 모든 권리 보유.