Sendmail이 모든 인바운드 이메일 메시지에 evelope receive(s) 헤더를 추가하도록 만드는 방법은 무엇입니까?

Sendmail이 모든 인바운드 이메일 메시지에 evelope receive(s) 헤더를 추가하도록 만드는 방법은 무엇입니까?

부인 성명:나는 여기와 다른 곳에서 Sendmail의 헤더 재작성을 다루는 몇 가지 질문과 기사를 읽었습니다. 다른 질문은 대부분 다음과 관련되어 있기 때문에 아래 질문에 대한 답변을 찾지 못했습니다.다시 쓰기헤더를 추가하는 대신) 거의 모두가 다음과 관련됩니다.배 밖으로메시지와 봉투보내는 사람(봉투 수신자 대신).

이렇게 말하면:

저는 Debian jessie에서 Sendmail 8.14.4를 사용하여 메일 서버를 실행하고 있습니다.

동일한 O/S 사용자 계정에 매핑된 일부 이메일 수신자 주소가 있습니다. 해당 O/S 사용자가 메시지를 읽을 때 원래 메시지가 어떤 이메일 주소로 전송되었는지 확인할 수 없습니다.

따라서 Sendmail이 모든 인바운드 이메일 메시지에 봉투 수신자를 포함하는 사용자 정의 헤더를 추가하도록 하고 싶습니다.

내 문제를 예를 들어 더 잘 설명할 수 있을 것 같습니다.

[email protected]두 개의 이메일 주소 가 있고 [email protected]. 둘 다 O/S 사용자 계정에 매핑됩니다 offers. 이것은 지금까지 작동합니다. O/S 사용자는 offers이메일을 가져올 때 [email protected]및 로 전송된 모든 메시지를 받습니다 [email protected].

이제 문제는 각 메시지가 원래 어떤 이메일 주소로 전송되었는지 확인할 수 없다는 것입니다. 즉, 두 이메일 주소 모두에 전송된 모든 메시지를 보고 있지만 특정 메시지가 원래 에 전송되었는지 [email protected]또는 에 전송되었는지 알 수 없습니다 [email protected].

따라서 각 인바운드 메시지에 다음과 같은 사용자 정의 헤더를 추가하고 싶습니다 X-Envelope-Recipient: <Original envelope recipient>.

이를 수행하는 가장 쉬운 방법은 무엇입니까?

옛날 옛적에 나는 Sendmail에 대한 몇 가지 간단한 사용자 정의 규칙을 작성했습니다. 하지만 그로부터 거의 15년이 지났기 때문에 그런 일은 피하고 싶고, 쉬운 해결책이 있거나 누군가가 나에게 올바른 방향을 알려줬으면 좋겠다. 솔직히 말해서 내 문제를 해결하기 위해 Milter를 작성하는 것이 현재 Sendmail의 규칙 구문을 다시 배우는 것보다 더 쉬워 보입니다.

편집 1

@AnFi의 요청에 따라 sendmail.cf의 로컬 메일러 정의는 다음과 같습니다.

Mlocal,         P=/usr/lib/sm.bin/mail.local, F=lsDFMAw5:/|@qPSXnz9, S=EnvFromSMTP/HdrFromL, R=EnvToL/HdrToL,
                T=DNS/RFC822/SMTP,
                A=mail.local -l -h inbox

답변1

귀하의 질문은 Sendmail.org FAQ 3.29의 주소입니다.

3.29 가상 도메인의 여러 사용자가 단일 사서함으로 이동하는 경우 실제 수신자를 지정하는 헤더를 어떻게 추가할 수 있나요?

짧은 버전: virtusertable을 사용하고~offers/.procmailrc

가상 사용자 가능:

[email protected]  offers+offer1
[email protected]  offers+offer2

~offers/.procmailrc에서 "세부 사항 추가"를 얻어야 합니다 $1.
또는
사용자 정의 헤더에 $h(+detail로 설정)를 사용할 수 있습니다.

경고: 두 사람 모두에게 주소가 지정된 메시지 사본 두 개를 가져오거나 처리합니다 [email protected].[email protected]

답변2

당신이 제안하는 것은 SMTP 프로토콜에 위배되는 것입니다. 또는 헤더 RCPT TO에 주소가 존재하지 않음에도 불구하고 명령 에 주소를 추가하는 합법적인 이유가 있습니다.To:Cc:RFC 5321 7.2."블라인드" 사본(강조는 제가 했습니다):

메시지 헤더 섹션에 나타나지 않는 주소는 여러 가지 이유로 SMTP 서버에 대한 RCPT 명령에 나타날 수 있습니다. 가장 일반적인 두 가지 방법은 우편 주소를 "목록 분해기"(여러 주소로 해석되는 단일 주소)로 사용하는 것과 "숨은 참조"로 나타나는 것입니다. 특히 둘 이상의 RCPT 명령이 존재할 때 이러한 메커니즘의 목적 중 일부를 무효화하는 것을 방지하기 위해SMTP 클라이언트와 서버는 RCPT 명령 인수의 전체 세트를 추적 헤더 필드의 일부로 또는 정보 또는 개인 확장 헤더 필드로 헤더 섹션에 복사해서는 안 됩니다.. 이 규칙은 실제로 자주 위반되고 시행될 수 없기 때문에 "bcc" 사용을 인식하는 SMTP 시스템을 보내는 것은 단일 RCPT 명령만 포함하는 별도의 메시지 트랜잭션으로 각 숨은 복사본을 보내는 것이 도움이 될 수 있습니다.

SMTP 트랜잭션의 "역방향"(MAIL, SAML 등 명령) 또는 "전달"(RCPT) 주소("봉투")와 헤더 섹션의 주소 사이에는 고유한 관계가 없습니다. 수신 시스템은 그러한 관계를 추론하고 이를 사용하여 배달할 메시지의 헤더 섹션을 변경하려고 시도해서는 안 됩니다. 인기 있는 Apparently-to헤더 필드는 이 원칙을 위반할 뿐만 아니라 의도하지 않은 정보 공개의 일반적인 소스이므로 사용해서는 안 됩니다.

권장되지 않는 Apparently-to헤더는 옵션으로 제어됩니다 NoRecipientAction=action.

메시지에 수신자 헤더( To:, Cc:또는 ) 가 없을 때의 동작을 다음과 같이 설정합니다 .Bcc:

  • none메시지를 변경하지 않고 그대로 둡니다.
  • add-toTo:봉투 수신자와 함께 헤더를 추가합니다 .
  • add-apparently-toApparently-To:봉투 수신자와 함께 헤더를 추가합니다 .
  • add-bccBcc:헤더를 추가하고
  • add-to-undisclosed 헤더 읽기를 추가합니다 'To: undisclosed-recipients:;'.

일반적으로 원래 수신자 주소는 To:또는 Cc:헤더에 이미 있습니다. 사용자 계정 이름으로 수정하면 안 되므로 , 또는 숨겨 offers집니다 . 헤더를 다시 작성하면 DKIM 서명도 깨질 수 있으므로 더욱 위험해졌습니다. 유일하게 합리적인 사용 사례는 로컬 출처( to )의 메일에 대한 주소 다시 쓰기입니다.[email protected][email protected]user[email protected]


모든 주소 목록을 추가하면 RCPT TO프로토콜을 위반하게 되지만 실제로는 다음이 필요합니다.단일 원래 RCPT TO주소메일이 전달된 사용자에 대해. Sendmail로 이것을 어떻게 달성하는지 모르겠지만,접미사(기본 구성 사용)추가하다X-Original-To:정확히 해당 내용을 포함하는 헤더와 Delivered-To:내부 대상 사서함( [email protected])을 포함하는 헤더를 추가로 포함합니다.

관련 정보