Marketing Cloud Next | Consent Imports로 이메일 수신 동의 데이터 가져오기
안녕하세요, 루카입니다. 오늘은 첫 발송이 NOT_SENT로 끝났을 때 Consent Imports로 수신 동의를 가져오고, 다시 발송해 확인해 보겠습니다.
Consent Imports는 CSV 파일에 정리한 수신 동의를 Marketing Cloud Next(MCN)로 한 번에 가져오는 기능입니다.
동의가 없는 주소로 보낸 홍보 메일은 NOT_SENT로 끝나므로, 첫 발송 전에 동의를 가져와야 합니다.
준비할 것
- 발송 준비: 게시된 이메일, 발신 주소(003 설정), 이메일을 보내는 Flow(001 레코드 변경 Flow), 시험용 연락처가 있어야 합니다.
- 권한: 동의를 가져오려면 Marketing Cloud Admin 또는 Marketing Cloud Manager 권한 집합이, Data Cloud에서 동의 데이터를 조회하려면 Marketing Cloud Admin 권한 집합이 필요합니다.
완료 확인: Data Cloud 조회에서 Marketing이 OPT_IN으로 보이고, Flow를 다시 시작해 보낸 메일이 SENT면 끝입니다.
원인 확인
발송 상태와 사유는 Data Cloud의 SQL로 읽고, 사유가 "without opt-in"이면 수신 동의가 없어 발송되지 않은 것입니다.
Data Cloud의 Query Editor에서 Email Engagement DMO를 조회하면 발송 상태와 사유를 읽을 수 있습니다. Flow를 시작하고 몇 분 뒤부터 조회됩니다.
SELECT ssot__EngagementDateTm__c,
ssot__EmailRecipientSendStatus__c,
ssot__EngagementActionReasonText__c,
ssot__FlowElementRunId__c
FROM ssot__EmailEngagement__dlm
WHERE ssot__SendtimeEmailAddress__c
= '<시험 수신 주소>'
AND ssot__EngagementChannelActionId__c
= 'SEND_STATUS'
ORDER BY
ssot__EngagementDateTm__c DESC
같은 주소의 이전 기록도 함께 나오며, 가장 위 행이 가장 최근 발송입니다.
마지막 열의 값은 "Flow 실행 Id#Send 요소 이름" 형식입니다. 아래 쿼리로 찾은 Flow 실행의 Id와 앞부분이 같은 행이 그 실행의 결과입니다. 레코드 변경으로 시작하는 Flow는 연락처 Id로 실행을 찾습니다.
SELECT ssot__Id__c,
ssot__ScheduledDateTime__c
FROM ssot__FlowRun__dlm
WHERE ssot__PrimaryRecordId__c
= '<연락처 Id>'
ORDER BY
ssot__ScheduledDateTime__c DESC
첫 실행의 결과는 발송 상태 NOT_SENT, 사유 "Tried to send an email to recipient without opt-in"이었습니다. 사유가 여러 가지이므로 문구로 구별합니다.
| 사유 문구 | 뜻 | 할 일 |
|---|---|---|
| Tried to send an email to recipient without opt-in | 동의가 없음 | 동의를 가져옵니다 |
| Can't verify recipient consent | 동의를 확인하지 못함 | 수신자의 동의를 확인하고 다시 보냅니다 |
| Recipient address returned hard bounce in previous send attempt | 이전 발송이 반송됨 | 발송 대상에서 주소를 빼고 다시 시도합니다 |
사유 표는 도움말을 기준으로 했습니다. 도움말은 첫 문구를 "promotional email"로 적고, 이번에 읽은 문구는 "an email"이었습니다.
도움말에 따르면 CRM의 동의 데이터는 MCN이 자동으로 인식하지 않고, 동의는 CRM과 Data Cloud에 따로 저장됩니다. 그래서 CRM에 동의 레코드가 있어도 같은 사유가 나옵니다.
이전 시험에서는 CRM의 CommSubscriptionConsent에 OptIn을 넣었는데도 첫 발송이 NOT_SENT였습니다. 동의가 없는 연락처를 기본으로 수신 거부로 보는 규칙은 004 오브젝트의 동의 기록 절에 있습니다.

파일 준비
한 번 가져올 때 채널, 수신 구분, 동의 상태를 하나씩 고르고, 수신 구분은 Flow의 Send Email 요소에서 고른 것과 같게 맞춥니다.
수신 구분(Communication Subscription)은 '마케팅 메일', '안내 메일'처럼 동의를 받는 단위입니다. Flow의 Send Email 요소에서 하나를 고르고, 동의도 그 구분에 있어야 발송됩니다. 이번 Flow에서 선택한 수신 구분은 Marketing입니다.

가져오기 화면에서 고를 수 있는 수신 구분은 Subscriptions 목록에서 확인합니다.

CSV는 이메일 주소와 동의 날짜 두 열입니다. 머리글을 아래처럼 쓰면 미리보기에 Email과 Consent Date로 표시됩니다.
EmailAddress,ConsentDate
<시험 수신 주소>,2026-10-12
형식이 헷갈리면 파일 올리기 화면의 Use this sample file 링크를 확인합니다.
가져오기는 새 연락처를 만들지 않습니다. 이메일 주소가 이미 레코드에 있어야 하고, 새 연락처와 동의를 함께 넣으려면 Contacts나 Leads 탭에서 가져옵니다.
- 날짜 규칙: 파일의 동의 날짜가 기존 동의 날짜보다 이전이면 그 날짜는 무시됩니다.
- 날짜 형식: yyyy-MM-dd HH:mm:ss.SSSZ, MM/dd/yyyy HH:mm:ss, MM/dd/yyyy, yyyy-MM-dd, M/dd/yyyy 가운데 하나를 씁니다. 이번 실습에서는 yyyy-MM-dd를 썼습니다.
- 완료 알림: 가져오기가 끝나면 가져오기를 실행한 사용자에게 알림 메일이 갑니다.
Consent 화면 위의 노란 안내 띠는 SMS 동의를 가져올 때 필요한 Sender Code 안내이며, 이메일 가져오기와는 상관없습니다.
가져오기
Consent 탭의 Consent Imports에서 채널, 수신 구분, 동의 상태를 고르고 파일을 올린 뒤 Import를 누릅니다.
1. Consent Imports에서 Import를 누릅니다
Marketing 앱의 탭 막대에서 Consent를 열고(탭 막대에 없으면 More 메뉴 안에 있습니다) 왼쪽 메뉴의 Consent Imports를 고른 뒤 Import를 누릅니다.

2. 채널, 수신 구분, 동의 상태를 고릅니다
Channel은 Email, Communication Subscription은 Marketing을 고르고, Set consent status to에서 Opt In 카드를 눌러 Next를 누릅니다.

3. CSV 파일을 올립니다
Upload Files로 파일을 고르면 파일 이름이 나타납니다. 확인한 뒤 Next를 누릅니다.

4. 미리보기를 확인하고 Import를 누릅니다
Import Preview에서 Email과 Consent Date의 필드 이름과 값을 확인하고 Import를 누릅니다. 제출한 뒤 Consent Imports 목록에서 새 행의 Status가 Completed로 바뀌면 가져오기가 끝난 것입니다.


목록의 Date는 가져온 날짜이고 CSV의 동의 날짜와 다릅니다. 이번 계정은 미국 서부 시간대여서 한국 시간 10월 12일 오전에 가져온 것이 Oct 11로 표시됐습니다.
실제로 수신 동의를 받은 주소만 가져옵니다. 법과 규정을 지킬 책임은 가져오는 사용자에게 있다고 도움말이 안내합니다.
반영 확인
목록이 Completed가 되어도 Data Cloud에는 몇 분 뒤에야 보입니다. 보인 뒤에 Flow를 다시 시작하면 SENT가 됩니다.
이번 시험에서 목록의 Status는 약 15초 만에 Completed가 되어 가져오기가 바로 끝난 것처럼 보였지만, Data Cloud의 동의 조회는 3분이 지나도 0건이었고 약 4분 뒤에야 보였습니다.
조회 결과에서 이름이 Marketing인 행의 상태가 OPT_IN이어야 하며, 다른 수신 구분의 OPT_IN은 Marketing 동의가 아닙니다.
수신 구분의 이름은 동의 레코드에 없고 Id만 있어서, 수신 구분 채널 DMO를 거쳐 수신 구분 DMO에서 이름을 가져옵니다. 수신 구분마다 행이 하나씩 나옵니다.
SELECT s.ssot__Name__c,
c.ssot__ConsentStatus__c,
c.ssot__ConsentCapturedDateTime__c
FROM
ssot__CommunicationSubscriptionConsent__dlm c
JOIN
ssot__CommunicationSubscriptionChannelType__dlm t
ON c.ssot__CommunicationSubscriptionChannelTypeId__c
= t.ssot__Id__c
JOIN ssot__CommunicationSubscription__dlm s
ON t.ssot__CommunicationSubscriptionId__c
= s.ssot__Id__c
WHERE c.ssot__ContactPointValueText__c
= '<시험 수신 주소>'

Marketing 행이 OPT_IN으로 보이면 Flow를 다시 시작합니다. 이 글의 Flow는 연락처의 Title을 바꾸면 시작하므로 Title을 바꿨고, 다른 Flow는 각자의 시작 조건을 한 번 더 만족시키면 됩니다. 다시 시작한 실행의 발송 상태는 SENT였고 사유는 빈 문자열이었습니다.
동의가 보인 직후 처음 시작한 실행은 오류로 끝나 발송 기록이 남지 않았고(원인은 확인하지 못했습니다), 다시 시작한 실행이 SENT였습니다.
실패 사례
가져온 수신 구분과 다른 구분으로 보내거나 반송 이력이 있는 주소는, 동의를 가져와도 NOT_SENT가 될 수 있습니다.
- 다른 수신 구분으로 발송: Consent Imports로 Marketing 동의만 넣은 주소를 세그먼트로 시작하는 Flow에서 이전에 시험했더니, Marketing으로 보내면 SENT였고 다른 수신 구분으로 보내면 "without opt-in"의 NOT_SENT였습니다. 보내는 수신 구분마다 동의를 가져옵니다.
- 반송 이력이 있는 주소: 한 번 반송된 시험 주소로 다시 보내면 "hard bounce" 사유의 NOT_SENT가 됩니다. 주소를 바꾸거나 대상에서 빼고, 주소를 바꾸면 새 주소의 동의도 가져옵니다.

참고 문서
'Salesforce > Marketing Cloud' 카테고리의 다른 글
| Marketing Cloud Next | Dynamic Content로 수신자에 따라 인사말 변경 (0) | 2026.10.12 |
|---|---|
| Marketing Cloud Next | Email Builder로 이메일 작성 및 게시 (0) | 2026.10.12 |
| Marketing Cloud Next | Segment Builder로 이메일 발송 대상 선정 (0) | 2026.10.08 |
| Marketing Cloud Next | Decision으로 조건에 따라 이메일 발송 경로 나누기 (0) | 2026.10.08 |
| Marketing Cloud Next | 오브젝트 구조와 Unified Individual의 역할 (0) | 2026.10.08 |