# 내 도메인에서 이메일 보내기

Mocco는 여러분을 대신해 이메일을 보냅니다. 상태 페이지 구독자가 주소를 확인하거나 인시던트 소식을 받을 때, 누군가 피드백 보드에서 이메일로 투표할 때, 팔로우한 게시물이 출시됐을 때입니다. 도메인을 추가하기 전에는 이 메일이 Mocco 주소에서 프로젝트 이름을 달고 `ShowYourTime via Mocco`처럼 나갑니다. 내 도메인을 쓰면 `ShowYourTime <help@showyourti.me>`처럼 여러분의 주소에서 나가고, 여러분의 도메인으로 서명되므로 메일 서비스가 믿고 받습니다.

세 단계면 됩니다. 도메인을 추가하고, DNS 레코드 몇 개를 등록하고, 프로젝트마다 보낼 주소를 고릅니다.

## 필요한 것

- Amazon SES로 이메일을 보내는 Mocco 서버. Mocco가 운영하는 서버는 이미 그렇습니다. SES가 없는 자체 호스팅 서버에서는 **Email → 발신 도메인**(Sending domains)에 SES 드라이버가 필요하다고 나옵니다.
- 워크스페이스의 소유자 또는 관리자 권한. 멤버는 도메인과 발신자를 볼 수 있지만 바꿀 수는 없습니다.
- 도메인의 DNS를 바꿀 수 있는 권한(예: Cloudflare).

## 1. 도메인 추가하기

워크스페이스 사이드바에서 **Email → 발신 도메인**을 엽니다. **도메인 추가**(Add a domain)에 `showyourti.me` 같은 도메인을 입력하고, **MAIL FROM 하위 도메인**은 `bounce` 그대로 둡니다. **도메인 추가**(Add domain)를 누릅니다.

도메인은 워크스페이스에 속하므로 그 안의 모든 프로젝트가 같은 도메인에서 보낼 수 있습니다. 레코드가 확인될 때까지 도메인은 **확인 중**(Pending)입니다. 워크스페이스 하나에 발신 도메인은 최대 5개이고, 하루에 10번까지 추가할 수 있습니다.

Mocco는 Mocco 자신의 도메인과, 다른 워크스페이스가 이미 인증한 도메인(또는 그 상위·하위 도메인)을 거부합니다. 다른 워크스페이스가 도메인을 추가만 하고 인증하지 않았다면, Mocco는 도메인이 여러분의 것임을 증명하라고 안내합니다. 안내하는 TXT 레코드(`_mocco-verify.<내 도메인>`)를 등록한 뒤 도메인을 다시 추가하세요.

## 2. 레코드 등록하기

도메인 아래의 **DNS 레코드**(DNS records)에 DNS에 추가할 내용이 나옵니다. 각 줄에는 레코드의 유형, 이름(대부분의 DNS 서비스가 원하는 짧은 이름, 그 아래에 전체 이름), 값이 있고 각각 복사 버튼이 있습니다.

| 유형 | 이름 | 값 | |
|---|---|---|---|
| CNAME (×3) | `<token>._domainkey` | `<token>.dkim.amazonses.com` | 필수 |
| MX | `bounce` | `feedback-smtp.ap-northeast-2.amazonses.com`, 우선순위 10 | 권장 |
| TXT | `bounce` | `v=spf1 include:amazonses.com ~all` | 권장 |

CNAME 레코드 세 개는 DKIM입니다. 메일 서비스가 여러분의 도메인에서 온 메일이 그 도메인으로 서명됐는지 확인하게 해 주며, 이것만으로 도메인이 인증됩니다. `bounce`의 MX와 TXT 레코드는 반송 메일이 여러분의 하위 도메인으로 돌아오게 하고, SPF도 여러분의 도메인과 맞춰 줍니다.

**Cloudflare에서는** 도메인의 **DNS → Records**를 열고 줄마다 **Add record**를 누릅니다. 유형을 고르고 이름과 값을 붙여 넣은 뒤 **Proxy status**를 **DNS only**(회색 구름)로 둡니다. 프록시된 CNAME은 DKIM을 깨뜨립니다. MX 레코드의 우선순위에는 `10`을 입력합니다.

루트의 MX와 SPF 레코드는 그대로 두세요. Google Workspace(또는 다른 메일 서비스)가 이미 도메인의 메일을 받고 있어도 달라지는 것은 없습니다. 새 MX와 SPF 레코드는 도메인 자체가 아니라 `bounce`에 있습니다.

**DMARC.** 레코드 아래에서 Mocco가 도메인의 `_dmarc` 레코드를 읽습니다. 이미 게시하고 있다면 그렇다고 알려 줍니다. 그대로 두고, 두 번째 레코드는 추가하지 마세요. DMARC 레코드가 두 개면 둘 다 무효가 됩니다. 없다면 `_dmarc`에 TXT 레코드로 `v=DMARC1; p=none; rua=mailto:<your address>`를 추가하라고 제안합니다. `<your address>` 자리에는 여러분의 주소를 넣으세요. 보고서에 문제가 없으면 `p=quarantine`으로 올려도 됩니다.

## 3. 확인하기

Mocco는 확인 중인 도메인을 10분마다 확인하므로 기다려도 되고, **지금 확인**(Check now)을 눌러도 됩니다(도메인마다 1분에 한 번). CNAME 레코드가 확인되면 도메인이 **인증됨**(Verified)이 됩니다. 보통 레코드를 등록하고 몇 분이면 되며, 72시간 안에 찾지 못하면 **실패**(Failed)가 됩니다. 레코드를 등록한 뒤 **지금 확인**을 누르면 인증을 다시 시작합니다. 이때 새 레코드가 나올 수 있습니다.

## 4. 프로젝트마다 발신자 고르기

프로젝트의 **Inbox**를 열고 **Settings → 이메일 발신자**(Email sender)로 갑니다. 도메인을 고르고(인증된 도메인만 나옵니다), `help` 같은 주소를 입력합니다. 이름과 **회신 주소(Reply-To)**는 선택 사항입니다.

- **이름**은 받는 사람에게 보이는 이름입니다. 비워 두면 프로젝트 이름을 씁니다.
- **회신 주소**는 답장이 가는 곳입니다. 비워 두면 답장이 발신 주소로 갑니다. 그 주소에서 운영하는 메일함이 받습니다.

카드에서 `ShowYourTime <help@showyourti.me>`처럼 헤더를 미리 볼 수 있습니다. **발신자 저장**(Save sender)을 누르면, 그때부터 프로젝트가 보내는 모든 이메일이 이 주소에서 나갑니다. **Mocco 주소 사용**(Use Mocco's address)을 누르면 발신자를 지웁니다.

아직 인증된 도메인이 없으면 카드에 **발신 도메인**으로 가는 링크가 나옵니다.

## 한도와 일시 중지

- **하루 한도.** 워크스페이스는 자기 도메인에서 하루에 이메일을 최대 1,000통 보냅니다. **발신 도메인**에 지난 24시간 동안 보낸 양이 나옵니다. 한도를 넘으면 수가 줄어들 때까지 Mocco 주소에서 나갑니다.
- **반송과 스팸 신고에 따른 일시 중지.** 지난 7일 동안 워크스페이스가 자기 도메인에서 200통 이상 보냈고, 그중 5%를 넘게 반송되거나 0.1%를 넘게 스팸으로 신고되면 그 도메인들의 메일이 일시 중지됩니다. **발신 도메인**에 일시 중지가 표시됩니다. 그동안 메일은 Mocco 주소에서 나가며, Mocco 운영자가 살펴본 뒤 재개합니다.

어느 쪽도 메일을 멈추지는 않습니다. 메일이 나가는 주소만 바뀝니다.

## 레코드가 깨졌을 때

Mocco는 인증된 도메인을 하루에 한 번 확인합니다. 확인이 실패하면 도메인에 경고가 뜨지만 메일은 계속 나갑니다. 한 번의 조회 실패는 DNS가 잠깐 흔들린 것일 때가 많습니다. 하루 뒤 확인도 실패하면 도메인이 **인증 해제됨**(Revoked)이 되고, 그 도메인에서 보내던 프로젝트는 레코드가 돌아올 때까지 Mocco 주소에서 보냅니다. 레코드를 다시 등록하고 **지금 확인**을 누르면 도메인이 **인증됨**으로 돌아오고 발신자도 저절로 다시 쓰입니다.

한 번도 인증되지 않고 일주일 동안 **실패**로 남은 도메인은 삭제됩니다.

## 도메인 삭제하기

**삭제**(Remove)는 먼저 확인을 구하며, 그 도메인에서 보내는 프로젝트를 보여 줍니다. 삭제하면 그 프로젝트들의 발신자가 지워져 다시 Mocco 주소에서 메일을 보냅니다. 삭제한 뒤에는 도메인의 DKIM, MX, SPF 레코드를 지워도 됩니다. 나중에 같은 도메인을 다시 추가하면 새 레코드를 등록해야 합니다.

도메인을 추가하고, 인증하고, 삭제한 일과 발신자를 바꾼 일은 모두 [감사 로그](https://www.mocco.club/docs/ko/articles/2yiscf-audit-log)에 남습니다.

## 에이전트에서

Mocco에 연결된 에이전트([에이전트에 Mocco 연결하기](https://www.mocco.club/docs/ko/articles/frhj3w-connect))도 같은 일을 할 수 있습니다. `mocco_email_domains_list`는 도메인을 읽고(멤버 누구나), `mocco_email_domain_add`는 도메인을 추가하고 레코드를 알려 주며, `mocco_email_domain_verify`는 지금 확인하고, `mocco_email_domain_remove`는 도메인을 삭제하고, `mocco_email_sender_set`은 프로젝트의 발신자를 정하거나 지웁니다. 바꾸는 도구는 처음 쓸 때 따로 권한을 요청합니다. **Send email from your domains as you: add, check and remove sending domains and choose each project's sender**.
