모든 메일(즉, 모든 사용자와 모든 도메인, 로컬이 아닌 메일까지 포함)을 허용하고 이를 단일 로컬 포괄 편지함에 넣는 테스트 환경을 위한 메일 서버 구성을 설정해야 합니다.
내가 가지고 있는 것은 Sendmail(8.14)이 포함된 SLES 11이며 /etc/mail/virtusertable을 다음과 같이 수정하려고 했습니다.
@ catchall
또는 좋아한다
@* catchall
하지만 아무 소용이 없습니다 - 대상 메일 주소(예:"[이메일 보호됨]")은 다시 작성되지 않습니다.캐치올@이므로 적절한 MX로 전달이 시도됩니다.
# sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,0 [email protected]
canonify input: santa @ northpole . org
Canonify2 input: santa < @ northpole . org >
Canonify2 returns: santa < @ northpole . org . >
canonify returns: santa < @ northpole . org . >
parse input: santa < @ northpole . org . >
Parse0 input: santa < @ northpole . org . >
Parse0 returns: santa < @ northpole . org . >
ParseLocal input: santa < @ northpole . org . >
ParseLocal returns: santa < @ northpole . org . >
Parse1 input: santa < @ northpole . org . >
MailerToTriple input: < > santa < @ northpole . org . >
MailerToTriple returns: santa < @ northpole . org . >
Parse1 returns: $# esmtp $@ northpole . org . $: santa < @ northpole . org . >
parse returns: $# esmtp $@ northpole . org . $: santa < @ northpole . org . >
조회 테이블의 소스 도메인 부분에서는 와일드카드가 지원되지 않는 것 같습니다.
Sendmail로 이것을 어떻게 구현합니까?
편집하다:에 따라Andrzej의 코멘트나는 메일러 가능한 항목을 시도했습니다
. local:catch-all-outgoing
게다가
.. local:catch-all-outgoing
sendmail -bv
두 경우 모두에 대해 동일한 출력을 받았습니다 .
# sendmail -d60.5 -bv [email protected]
map_lookup(dequote, root, %0=root) => NOT FOUND (0)
map_lookup(host, example.net, %0=example.net) => example.net. (0)
[email protected]... deliverable: mailer esmtp, host example.net., user [email protected]
(예, 루트입니다. sendmail
루트가 아닌 사용자로는 실행할 수 없는 것 같습니다.)
편집하다:알고 보니 매크로 파일에서는 mailertable 기능이 활성화되어 있지 않았기 때문에 sendmail.cf에는 작동을 위한 적절한 재작성 규칙이 포함되어 있지 않았습니다.
답변1
여기서 겪고 있는 상황은 /etc/mail/virtusertable
아웃바운드가 아닌 인바운드 이메일에만 국한되어 있다고 생각합니다.
mailertable 또는 SMART_HOST의 기본 경로를 사용하여 로컬이 아닌 모든 메시지를 하나의 로컬 사서함/별칭으로 전달할 수 있습니다.
mailertable entry:
. local:catch-all-outgoing
aliases:
catch-all-outgoing: some-local-account
점으로 시작하지 않는 LHS 항목은 표시된 전체 호스트 이름과 일치합니다. 점으로 시작하는 LHS 항목은 해당 도메인 이름으로 끝나는 모든 항목과 일치합니다(선행 점 포함). 즉, 비어 있지 않은 문자 시퀀스에 대해 선행 ".+" 정규식 패턴이 있는 것으로 생각할 수 있습니다.
RHS는 항상 "mailer:host" 쌍이어야 합니다. 메일러는 메일러의 구성 이름입니다(즉, sendmail.cf 파일의 M 행). "호스트"는 해당 메일러에 전달된 호스트 이름입니다.
(참조:센드메일 읽어보기, "메일러 테이블 사용" 섹션)
그래서 다음과 같습니다.
. local:catch-all-outgoing
(단 하나의 점만Adrzej의 코멘트) /etc/mail/mailertable에 있으면 모든 domain.tld가 sendmail.cf에 정의된 로컬 메일러 구성으로 리디렉션됩니다. 별칭을 사용하여 호스트 이름을 잡아서 catch-all-outgoing
로컬 이메일 주소로 만듭니다.
메일러 테이블이 작동하려면 구성에서 활성화해야 합니다. 첨가
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
구성을 생성하는 m4 매크로 파일에 추가하면 이를 처리해야 합니다.
또한 sendmail 사이트 도움말 파일에서:
우편물 발송 가능:
특정 도메인에 대한 라우팅을 무시하는 데 사용할 수 있는 "메일러 테이블"을 포함합니다.({w} 클래스에 속하지 않음, 즉 로컬 호스트 이름). FEATURE의 인수는 키 정의일 수 있습니다. 아무것도 지정되지 않은 경우 사용되는 정의는 다음과 같습니다.
해시 /etc/mail/mailertable
이 데이터베이스의 키는 정규화된 도메인 이름이거나 점이 앞에 오는 부분 도메인입니다(예: "vangogh.CS.Berkeley.EDU" 또는 ".CS.Berkeley.EDU").후자의 특별한 경우로서 "." 다른 키에 포함되지 않는 모든 도메인과 일치합니다.값은 메일러:도메인 형식이어야 합니다.
여기서 "mailer"는 내부 메일러 이름이고 "domain"은 메시지를 보낼 위치입니다. 이러한 맵은 메시지 헤더에 반영되지 않습니다.특별한 경우로, local:user 형식은 로컬 메일러를 사용하여 지정된 사용자에게 전달됩니다.
답변2
Sendmail: 로컬 및 비로컬 주소에 대한 캐치올
SMART_HOST
로컬이 아닌 도메인과 MAIl_HUB
로컬 이메일 도메인에 대해 정의할 수 있습니다 .
sendmail.mc:
define(`SMART_HOST',`local:some_existing_user')dnl
define(`MAIL_HUB',`local:some_existing_user')dnl
dnl optional part to list local users/mailboxes excluded from the redirect
dnl in /etc/mail/direct-users file (one user per line)
LOCAL_CONFIG
FL/etc/mail/direct-users
divert(0)
추신
echo '$=w' | sendmail -bt
로컬 이메일 도메인 목록을 가져오는 데 사용합니다 . Sendmail은 기본적으로 자동으로 채워줍니다.
mailertable을 사용하여 일부 외부 도메인을 리디렉션에서 제외할 수 있습니다.
example.net %0