
◈ 리턴 메시지 예시
아래의 사유로 메일 전송에 실패했습니다.
550-5.7.1 This message is not RFC 5322 compliant. There are multiple Cc headers. 550-5.7.1 To reduce the amount of spam sent to Gmail, this message has been 550-5.7.1 blocked. For more information, go to 550-5.7.1 https://support.google.com/mail/?p=RfcMessageNonCompliant and review 550 5.7.1 RFC 5322 specifications.
「번역」550-5.7.1 이 메시지는 RFC 5322를 준수하지 않습니다. 여러 개의 참조(Cc) 헤더가 있습니다.
550-5.7.1 Gmail로 전송되는 스팸 메일 수를 줄이기 위해 이 메시지가 차단되었습니다. 자세한 내용은 URL 주소에서 RFC 5322 사용을 참조하세요.

◈ 차단 사유
① RFC 5322 인터넷 표준?
이메일 메시지의 형식(구조)을 정의한 인터넷 표준(문법 설명서:영문), 메일을 발송하기 위해 메시지 안에는 이메일 헤더(Header)라는 메타데이터 정보가 포함되어 있습니다. 예를 들어 메일의 발신자, 수신자, 수발신 전송된 시간에 대한 정보를 말합니다. 네이버 메일 예시처럼 눈에 보이는 웹메일 UI가 메일 시스템에서는 원문 보기처럼 Header 영역 부분의 정보를 인식하고 처리하게 됩니다.

| 웹메일 UI 표시 | Header 영역 표시 |
| 보낸 사람(or 발신자) | From (or Sender) |
| 받는 사람 | To |
| 참조 (숨은 참조) | Cc (Bcc) |
| 제목 | Subject |
| 날짜 | Date |
| 답장 | Reply-To |
| 메시지-ID | Message-ID |
| 참조 | In-Reply-To, References |
② RFC 5322(중복 헤더) 반송 메일
이제 위에 내용을 보고 리턴 메시지를 보면 「There are multiple Cc headers / 여러 개의 참조(Cc) 헤더가 있습니다」 의미를 알게 됩니다. Header에서 이 표시들은 각각 한 개의 고유 필드 값입니다. 그러나 똑같은 값이 두 개 이상의 헤더 중복이 발생할 경우 Gmail에서는 비정상 메일로 보고 거부를 한다는 뜻입니다. 스팸/피싱 메일에서 자주 나타나는 비정상 헤더 패턴에도 이에 해당됩니다. 물론 메일 솔루션 버그나 아웃룩/모바일등 POP3/IMAP/SMTP 서비스를 이용하여 클라이언트에서 답장(RE:), 전달(FW:)하는 경우에도 잘못된 값이 삽입되는 경우가 흔하게 발생합니다.
받는 사람이나, 참조에 다수의 수신자(동보 메일)를 포함하여 발송을 할 때 하나의 필드 값에 한줄로 포함하여 발송하는 것은 문제가 되지 않지만, 중복 헤더가 추가되는 경우 문제가 됩니다. ※ 예시 참고
| 정상 패턴 예시 | 비정상 패턴 예시 |
| 받는 사람 (To) : A@foxymailtest.com, B@foxymailtest.com, C@foxymailtest.com | 받는 사람 (To) : A@foxymailtest.com 받는 사람 (To) : B@foxymailtest.com 받는 사람 (To) : C@foxymailtest.com |
| 참조 또는 숨은 참조 (Cc, Bcc) : A@foxymailtest.com, B@foxymailtest.com, C@foxymailtest.com | 참조 또는 숨은 참조 (Cc, Bcc) : A@foxymailtest.com 참조 또는 숨은 참조 (Cc, Bcc) : B@foxymailtest.com 참조 또는 숨은 참조 (Cc, Bcc) : C@foxymailtest.com |
| ※ 리턴 메시지에 다음과 같은 여러개의 패턴으로 올 수 있다. | There are multiple Cc(Bcc) headers There are multiple To headers There are multiple From headers |
자료를 추가로 찾아보니 (고급/보안)Gmail 공식 문서에도 동일한 내용이 명시되어 있었습니다. 해당 문서에서는 메일 헤더 구조와 RFC 규격 위반 사례에 대해 비교적 자세하게 설명하고 있어, 한 번쯤 정독해 보시면 이번과 같은 리턴 메시지뿐만 아니라 다양한 메일 반송 오류에 보다 유연하게 대응하는 데 도움이 될 것으로 보입니다.
◇ 참고 URL : https://support.google.com/a/answer/13567860?hl=ko

③ 텔넷(Telnet)을 이용한 SMTP 발송 테스트 (multiple headers) 구현

◇ SMTP단계 명령어(Command) 순서 예시
수신 서버 응답 시 코드
[2XX] 정상 응답, [3XX] 정상 응답(중립), [4XX] 일시적 거부, [5XX] 영구적인 거부(or 차단)
| 명령어(Command) ■ 직접 입력할 부분 | 설명 |
| CMD#> telnet 수신서버호스트(or IP) 25 | 수신서버호스트(or IP) SMTP 25번 포트 접근 |
| 220 서버 호스트 이름 ESMTP MAIL Service | 코드[220] 정상 응답, 일반적으로 서버(호스트 이름)이나 메일 소프트웨어 사용 프로그램 이름 정보가 나옵니다. |
| helo foxytestmail.co.kr (송신 도메인주소) 250 서버 호스트 이름 Hello [IP] |
접속한 SMTP 서버에 자신의 도메인 호스트 주소를 알립니다. 코드[250] 정상 응답 |
| mail from:<foxydog@foxytestmail.co.kr> 250 2.1.0 OK |
송신자의 메일 주소를 알립니다. 코드[250] 정상 응답 |
| rcpt to:<A@gmail.com> 250 2.1.5 OK |
수신자의 메일 주소를 알립니다. 코드[250] 정상 응답 |
| data 354 Go ahead (or Start mail input 등) |
본문 내용(body)을 적기 위한 시작 명령어 |
| from:foxydog@foxytestmail.co.kr (송신자 메일 주소) to:A@gmail.com (수신자 메일 주소) subject:testmail (메일 제목) testmail (본문 내용 입력) |
헤더 영역, 웹메일(메일쓰기)생각하시면 됩니다. 송신자/수신자/메일 제목/본문 내용 입력 SMTP 통신 내부에서는 사이에 공백이 있으면 안됩니다. |
| ※ 정상 패턴 . 250 2.0.0 OK |
끝마침(을 해야 최종 발송 시도를 합니다.) 코드[250] 정상 응답 및 발송 완료 |
| ※ 거부하거나 비정상 패턴 550-5.7.1 This message is not RFC 5322 compliant. There are multiple To headers. |
to:A@gmail.com to:B@gmail.com 헤더 영역에 To (받는 사람)의 필드가 2개가 있어 메일을 거부 |
| quit 221 2.0.0 Bye Connection closed by foreign host. |
SMTP 연결 종료 |
마무리(결론)
해당 문제가 발생할 경우, 메일을 최종 발송하는 SMTP 서버에서 중복 헤더가 추가되는 원인을 먼저 확인해야 합니다. 이는 직접 운영 중인 웹메일 발송 서버일 수도 있고, 그룹웨어나 ERP와 같이 SMTP 연동 방식으로 메일을 발송하는 환경이라면 웹메일이 아닌 해당 그룹웨어 솔루션에서 원인이 발생했을 가능성도 충분합니다. 또한 리눅스나 윈도우 웹 호스팅 환경에서 동작하는 폼 메일 구성 오류로 인해 동일한 헤더가 중복 생성되는 사례도 자주 확인됩니다.
메일 서비스를 운영하다 보면 이처럼 발송 경로와 구성 방식에 따라 다양한 변수가 발생할 수밖에 없습니다. 그렇기 때문에 메일 솔루션이나 발송 로직을 설계하는 개발자는 RFC 5322에서 정의한 이메일 메시지 형식 규칙을 정확히 준수해야 하며, 작은 헤더 처리 오류 하나가 실제 메일 거부나 스팸 판정으로 이어질 수 있다는 점을 항상 염두에 두어야 합니다.