For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /ko/docs/web/email.md (or send Accept: text/markdown).
이메일과 메일
트랜잭션 템플릿, 프리뷰 도구, 프로바이더 어댑터.
첫 번째 로컬 메시지를 읽은 후 전달을 활성화하세요.
거래 이메일은 로그인 코드나 작업 결과와 같은 앱 작업에 의해 트리거되는 메시지를 의미합니다. 웹 서버가 실행 중인 상태에서 apps/web/.env.local. 전체 데이터베이스 설정에 EMAIL_PROVIDER=local를 유지하고 /auth에서 로그인 코드를 요청한 다음 /mail-preview를 열고 최신 메시지를 검사합니다. 여기에 나타나는 로컬 메시지는 외부 받은 편지함으로 전달되는 이메일이 아닙니다.
실제 메시지를 보내려면 하나의 이메일 제공업체를 선택하고, 해당 제공업체의 계정을 만들고, 귀하가 관리하는 도메인을 확인한 후 해당 제공업체의 전용 가이드를 따르세요. 명명된 API 키와 보낸 사람 주소를 apps/web/.env.local에 넣고 저장한 후 웹 서버를 다시 시작합니다. 하나의 새로운 로그인 코드를 요청한 다음 공급자의 전송 로그와 스팸을 포함한 대상 받은 편지함을 모두 확인하세요. 도메인 확인 및 발신자 승인에는 시간이 걸릴 수 있습니다.
메시지가 실패하면 반복적으로 요청하기 전에 배달 오류와 보낸 사람 확인을 검사하세요. /mail-preview 경로는 개발 전용이며 프로덕션에서는 404를 반환합니다. 뉴스레터 캠페인으로 인해 계정 확인 메일이 중단되지 않도록 이 거래 발신자와 별도로 마케팅 활동을 진행하세요.
트랜잭션 전송 분리
이메일 모듈은 인증 및 작업 완료 알림을 포함한 트랜잭션 제품 메시지를 처리합니다. 아웃리치는 소비 제품 자체의 플로에 속하며 이 트랜잭션 경로와 분리되어 있어야 합니다.
전송 어댑터 구성
결정적 테스트에는 로컬 어댑터를 사용하세요. 외부 전송을 활성화하기 전에 선택한 프로덕션 어댑터와 그 서버 자격 증명을 구성하세요. 이메일 프로바이더 시크릿을 클라이언트 구성이나 로그에 넣지 마세요.
전송을 독립적으로 기록
생성된 결과와 그 완료 이메일은 별도의 결과를 가집니다. 메시지가 전송되었다고 주장하기 전에 전송 레코드를 검사하세요. 실패한 전송을 실패한 생성으로 취급하거나 중복 모델 작업을 제출하지 않고 테스트하세요.
설치 및 설정
EMAIL_PROVIDER=local은 개발 중 전달을 결정적으로 유지합니다. 프로덕션 전달에는 구성된 어댑터 중 하나를 고르세요 — Resend(RESEND_API_KEY), AWS SES(AWS_REGION과 액세스 키), Postmark, SendGrid, Mailgun, 일반 SMTP, Brevo — EMAIL_FROM은 프로바이더가 허용하는 검증된 발신자 ID와 일치해야 합니다.
모든 템플릿은 src/transactional-mail-templates.ts에 있습니다. 개발 전용 /mail-preview 라우트가 모든 템플릿을 렌더링해 메일을 보내지 않고 변경을 시각적으로 검토할 수 있습니다.
EMAIL_PROVIDER=resend
EMAIL_FROM=Your Product <[email protected]>구현 워크플로
인증 코드, 매직 링크, 초대, 빌링 통지, 태스크 완료 메일은 모두 해석된 로케일의 텍스트로 동일한 트랜잭션 발신자를 통과합니다. 아웃리치 캠페인은 별도의 프로덕트 관심사이며 이 경로를 공유하지 않습니다.
텍스트나 레이아웃을 편집하기 전에 mail-preview에서 템플릿을 미리 보고, 브랜드 값(이름, 색상, 로고 타일)이 설정에서 오게 유지해 파생 프로덕트가 템플릿을 포크하지 않고 리스타일할 수 있게 하세요.
검증 및 문제 해결
테스트에서는 로컬 어댑터의 기록된 메시지(수신자, 제목, 렌더링된 본문)에 대해 어서트합니다. 전송 실패는 깨진 워크플로가 아닌 전달 결과로 나타나야 합니다. 실제 전달에는 REAL_SMOKE_EMAIL_ALLOWED_DOMAIN을 사용하는 선택적 smoke 경로를 사용하세요.