Sun Java System Messaging Server 6.3 관리 설명서

11.6 템플리트 대체 및 다시 쓰기 규칙 제어 시퀀스

대체는 문자열을 다시 작성된 주소(사용된 특정 대체 시퀀스에 의해 결정되는 값)에 삽입하여 아이디나 주소를 다시 쓰는 데 사용됩니다. 이 절은 다음과 같은 하위 절로 구성되어 있습니다.

예를 들어, 다음 템플리트에서 $U는 대체 시퀀스입니다. 이 대체 시퀀스는 템플리트의 출력에서 다시 쓰는 주소의 username 부분을 대체합니다. 따라서 이 템플리트로 jdoe@mailhost.siroe.com이 다시 작성된 경우 $U가 원래 주소의 username 부분인 jdoe로 대체되어 결과 출력은 jdoe@siroe.com이 됩니다.

$U@siroe.com

제어 시퀀스는 특정 다시 쓰기 규칙의 적용 가능성에 추가 조건을 부과합니다. 다시 쓰기 규칙의 패턴 부분이 검사되는 호스트 또는 도메인 지정과 일치해야 할 뿐만 아니라 다시 쓰는 주소의 다른 측면에서 제어 시퀀스에 의해 설정된 조건을 충족해야 합니다. 예를 들어, 다시 쓰는 주소는 $E 제어 시퀀스가 있을 경우 봉투 주소여야 하며 $F 제어 시퀀스가 있을 경우 정방향 지정 주소여야 합니다. 다음 다시 쓰기 규칙은user@siroe.com 형식의 (다시 쓰기) 봉투의 To: 주소에만 적용됩니다.

siroe.com $U@mail.siroe.com$E$F

도메인 또는 호스트 지정이 다시 쓰기 규칙의 패턴 부분과 일치하지만 규칙 템플리트의 제어 시퀀스가 부과한 모든 조건을 충족하지 않을 경우 다시 쓰기 규칙은 실패하고 다른 적용 가능한 규칙을 찾기 위해 다시 쓰기 프로세스가 계속됩니다.

표 11–4에는 템플리트 대체와 제어 시퀀스가 요약되어 있습니다.

표 11–4 다시 쓰기 규칙 템플리트 대체 및 제어 시퀀스 요약

대체 시퀀스 

대체 대상 

$D

일치한 도메인 지정 부분 

$H

호스트/도메인 지정의 일치하지 않는 부분(패턴에 있는 점의 왼쪽) 

$L

도메인 리터럴의 일치하지 않는 부분(패턴 리터럴에 있는 점의 오른쪽) 

$U

원래 주소의 아이디 

$nA 

위치 0에서 시작하여 현재 주소의 n번째 왼쪽 문자를 삽입합니다. n을 생략하면 전체 주소가 삽입됩니다. 

$nX 

0에서 시작하여 메일 호스트의 n번째 왼쪽 구성 요소를 삽입합니다. n을 생략하면 전체 메일 호스트가 삽입됩니다. 

$0U 

원래 주소에서 모든 하위 주소를 뺀 로컬 부분(아이디) 

$1U 

원래 주소의 로컬 부분(아이디)에 있는 하위 주소(있을 경우) 

$$

리터럴 달러 기호($) 삽입

$%

리터럴 백분율 기호(%) 삽입

$@

리터럴 at 기호(@) 삽입

$\

모두 소문자로 적용 

$^

모두 대문자로 적용 

$_

원래 대소문자 사용 

$=

대체된 후속 문자가 LDAP 검색 필터에 삽입하기 적합하게 인용되도록 합니다. 

$W

임의의 고유 문자열로 대체 

$]...[

LDAP 검색 URL 조회 

$.

임시 LDAP 조회에 실패한 경우 매핑 항목의 결과로 처리되는 문자열을 지정합니다. 

$(text)

일반 데이터베이스 대체(조회에 실패할 경우 규칙이 실패함) 

${...}

지정된 매핑을 제공된 문자열에 적용 

$[...] 

사용자 제공 루틴 호출(결과로 대체) 

$&n

일치하지 않는(와일드카드로 표시된) 호스트의 n번째부분(0부터 시작하여 왼쪽에서 오른쪽으로 계산)

$!n

일치하지 않는(와일드카드로 표시된) 호스트의 n번째부분(0부터 시작하여 오른쪽에서 왼쪽으로 계산)

$*n

일치하는 패턴의 n번째 부분(0부터 시작하여 왼쪽에서 오른쪽으로 계산)

$#n

일치하는 패턴의 n번째 부분(0부터 시작하여 오른쪽에서 왼쪽으로 계산)

$nD

일치한 도메인 지정 부분(0부터 시작하는 n번째 맨 왼쪽 부분부터 대체) 

$nH

일치하지 않는 호스트/도메인 지정 부분(0부터 시작하는 n번째 맨 왼쪽 부분부터 대체) 

제어 시퀀스 

다시 쓰기 규칙에 미치는 영향 

$1M 

채널이 내부 재처리 채널일 경우에만 적용됩니다. 

$1N 

채널이 내부 재처리 채널이 아닐 경우에만 적용됩니다. 

$1~ 

보류 중인 모든 채널 일치 검사를 수행합니다. 검사가 실패할 경우 현재 다시 쓰기 규칙 템플리트의 처리가 성공적으로 종료합니다. 

$A 

호스트가 at 기호의 오른쪽에 있을 경우 적용됩니다. 

$B 

헤더/본문 주소에만 적용됩니다. 

$C channel

channel로 보낼 경우 실패합니다.

$E 

봉투 주소에만 적용됩니다. 

$F 

정방향 지정(예: To:) 주소에만 적용됩니다. 

$M channel

channel이 주소를 다시 쓰는 경우에만 적용됩니다.

$N channel

channel이 주소를 다시 쓰는 경우 실패합니다.

$P 

호스트가 백분율 기호의 오른쪽에 있을 경우 적용됩니다. 

$Q channel

channel로 보낼 경우 적용됩니다.

$R 

역방향 지정(예: From:) 주소에만 적용됩니다. 

$S 

호스트가 소스 경로에서 온 경우 적용됩니다. 

$Tnewtag

다시 쓰기 규칙 태그를 newtag로 설정합니다. 

$Vhost

호스트 이름이 LDAP 디렉토리(DC 트리에 있거나 가상 도메인으로 존재)에 정의되지 않은 경우 실패합니다. LDAP 검색의 시간이 초과되면 호스트 이름 다음의 문자 바로 뒤부터 시작하는 다시 쓰기 패턴의 나머지 부분은 MTA 옵션 문자열 DOMAIN_FAILURE로 대체됩니다.

$X 

호스트가 느낌표의 왼쪽에 있을 경우 적용됩니다. 

$Zhost

호스트 이름이 LDAP 디렉토리(DC 트리에 있거나 가상 도메인으로 존재)에 정의된 경우 실패합니다. LDAP 검색의 시간이 초과되면 호스트 이름 다음의 문자 바로 뒤부터 시작하는 다시 쓰기 패턴의 나머지 부분은 MTA 옵션 문자열 DOMAIN_FAILURE로 대체됩니다.

$nT

기본 ALIAS_MAGIC 설정을 대체합니다. 여기서 nALIAS_MAGIC MTA 옵션의 적절한 값입니다. 별칭 확장 중에 규칙이 일치할 때 도메인의 설정을 대체합니다.

$?errmsg

다시 쓰기가 실패할 경우 기본 오류 메시지 대신에 errmsg를 반환합니다. 오류 메시지는 US ASCII여야 합니다.

$number?errmsg

다시 쓰기가 실패할 경우 기본 오류 메시지 대신에 errmsg를 반환하고 SMTP 확장 오류 코드를 a.b.c로 설정합니다.

  • anumber/ 1000000(첫 번째 자리 값)

  • b는 (number/1000) 나머지 1000(두 번째에서 네 번째 자리의 값)

  • cnumber 나머지 1000(마지막 세 개 자리의 값)

    다음 예는 오류 코드를 3.45.89로 설정합니다.

    $3045089?the snark is a boojum

11.6.1 아이디 및 하위 주소 대체, $U, $0U, $1U

템플리트의 모든 $U는 원래 주소의 아이디(RFC 822 “로컬 부분”)로 대체됩니다. a.“b” 형식의 사용자 이름은 “a.b”로 대체된다는 것에 주의합니다. 이는 RFC2822에서 RFC 822의 이전 구문을 더 이상 사용하지 않고 앞으로는 후자의 형식이 필수적으로 사용될 것이기 때문입니다.

템플리트의 모든 $0U는 하위 주소 및 하위 주소 표시 문자(+)를 빼고 원래 주소의 아이디로 대체됩니다. 템플리트의 모든 $1U는 원래 주소의 하위 주소 및 하위 주소 표시 문자(있을 경우)로 대체됩니다. 따라서 $0U 및 $1U가 아이디의 보완적 부분이며 $0U$1U는 $U와 동일하다는 것에 주의합니다.

11.6.2 호스트/도메인 및 IP 리터럴 대체, $D, $H, $nD, $nH, $L

모든 $H는 규칙에 의해 일치되지 않은 호스트/도메인 지정 부분으로 대체됩니다. 모든 $D는 다시 쓰기 규칙에 의해 일치된 호스트/도메인 지정 부분으로 대체됩니다. $nH 및 $nD 문자는 0부터 계산되는 n번째 맨 왼쪽 부분에서 일반 $H 또는 $D 부분을 대체합니다. 즉, $nH 및 $nD는 각각 $H 또는 $D 대체의 맨 왼쪽에서 1부터 계산되는 n개의 부분을 생략합니다. 특히, $0H는 $H와 동일하며 $0D는 $D와 동일합니다.

예를 들어, jdoe@host.siroe.com 주소가 다음 다시 쓰기 규칙과 일치한다고 가정해 봅니다.

host.siroe.com    $U%$1D@TCP-DAEMON

결과 주소는 TCP-DAEMON을 보내는 채널로 사용하는 jdoe@siroe.com입니다. 여기에서 $D는 일치한 전체 도메인 host.siroe.com으로 대체될 것이지만 $1D는 첫 번째 항목(siroe)으로부터 일치하는 부분으로 대체되므로 siroe.com으로 대체됩니다.

$L은 다시 쓰기 규칙에 의해 일치되지 않은 도메인 리터럴 부분을 대체합니다.

11.6.3 리터럴 문자 대체, $$, $%, $@

$, % 및 @ 문자는 일반적으로 다시 쓰기 규칙 템플리트에서 메타 문자입니다. 이러한 문자의 리터럴 삽입을 수행하려면 달러 문자 $를 사용하여 해당 문자를 인용합니다. 즉, $$는 단일 달러 기호 $로 확장되고 $%는 단일 백분율 %(이 경우 백분율은 템플리트 필드 구분자로 해석되지 않음)로 확장되며 $@은 단일 at 기호 @(마찬가지로 필드 구분자로 해석되지 않음)으로 확장됩니다.

11.6.4 LDAP 쿼리 URL 대체, $]...[

$]ldap-url[ 형식의 대체는 LDAP 쿼리 URL로 해석되며 LDAP 쿼리 결과가 대체됩니다. 표준 LDAP URL은 호스트와 포트가 생략된 채로 사용됩니다. 호스트와 포트는 대신 msg.conf 파일(local.ldaphostlocal.ldapport 속성)에서 지정됩니다.

즉, LDAP URL은 다음과 같이 지정해야 하며 여기에서 대괄호 문자 [ ]는 URL의 선택적 부분을 나타냅니다.

ldap:///dn[?attributes[?scope?filter]]

dn은 필수 항목으로서 검색 기준을 지정하는 고유 이름입니다. URL의 선택적 속성, 범위 및 필터 부분은 반환할 정보를 더욱 구체화합니다. 다시 쓰기 규칙의 경우 반환 지정을 위한 속성은 mailRoutingSystem 속성(또는 이와 유사한 속성)이 될 수 있습니다. 범위는 base(기본값), one 또는 sub가 될 수 있으며 필터는 mailDomain 값이 다시 쓰는 도메인과 일치하는 객체의 반환을 요청하는 것이 될 수 있습니다.

LDAP 디렉토리 스키마가 mailRoutingSystemmailDomain 속성을 포함할 경우 주어진 주소를 라우팅할 시스템을 결정하기 위한 다시 쓰기 규칙은 다음과 같이 나타날 수 있습니다. 여기에서 LDAP URL 대체 시퀀스 $D는 현재 도메인 이름을 생성된 LDAP 쿼리로 대체하는 데 사용됩니다.


.siroe.com \
  $U%$H$D@$]ldap:///o=siroe.com?mailRoutingSystem?sub? \
  (mailDomain=$D)

백슬래시 문자는 쉽게 알아볼 수 있도록 하나의 논리적 다시 쓰기 규칙 행을 계속해서 두 번째 물리적 행으로 이어주는 데 사용됩니다. 표 11–5에는 LDAP URL 대체 시퀀스가 나열되어 있습니다.

표 11–5 LDAP URL 대체 시퀀스

대체 시퀀스 

설명 

$$

리터럴 $ 문자 

$. 

임시 LDAP 조회에 실패한 경우 매핑 항목의 결과로 처리되는 문자열을 지정합니다. 기본적으로 현재 규칙의 적용 기간에만 임시 실패 문자열이 설정된 상태로 있습니다. "$.."를 사용하여 기본 상태로 돌아갈 수 있습니다. 이 기본 상태에서는 임시 실패 문자열이 설정되지 않았으며, 임시 LDAP 실패 발생 시 매핑 항목이나 다시 쓰기 규칙 실패가 발생합니다. 디렉토리 항목 일치 실패 이외의 모든 오류는 임시 오류로 간주됩니다. 일반적으로 잘못된 LDAP URL로 인한 오류와 디렉토리 서버 구성 문제로 인한 오류는 구분할 수 없습니다.  

$~ account

사용자 계정의 홈 디렉토리 

$A

주소 

$D

도메인 이름 

$H

호스트 이름(정규화된 도메인 이름의 첫 번째 부분) 

$L

~ 또는 _와 같은 특수한 선행 문자를 뺀 아이디 

$S

하위 주소 

$U

아이디 

MTA는 이제 다시 쓰기 규칙 및 매핑에서 수행된 조회에서 URL 결과를 캐시합니다. 이 새로운 URL 결과 캐시는 두 개의 새로운 MTA 옵션, 즉 URL_RESULT_CACHE_SIZE(기본값은 10000개 항목) 및 URL_RESULT_CACHE_TIMEOUT(기본값은 600초)에 의해 제어됩니다.

11.6.5 일반 데이터베이스 대체, $(...)

$(텍스트) 형식의 대체는 특수하게 처리됩니다. 텍스트 부분은 특수한 일반 데이터베이스에 액세스하기 위한 키로 사용됩니다. 이 데이터베이스는 msg-svr-base/config/imta_tailor 파일의 IMTA_GENERAL_DATABASE 옵션으로 지정하는 파일(일반적으로 msg-svr-base/db/generaldb.db)로 구성됩니다.

데이터베이스에서 “text-string”이 발견될 경우 데이터베이스의 해당 템플리트가 대체됩니다. "text-string"이 데이터베이스의 항목과 일치하지 않을 경우 다시 쓰기 프로세스는 실패합니다(다시 쓰기 규칙이 처음에 일치하지 않은 것과 같음). 대체에 성공할 경우 추가 대체를 위해 데이터베이스에서 추출된 템플리트가 다시 스캔됩니다. 그러나 참조가 무한대로 반복되는 것을 방지하기 위해 추출된 템플리트의 추가 $(텍스트) 대체는 금지됩니다.

예를 들어, jdoe@siroe.siroenet 주소가 다음 다시 쓰기 규칙과 일치한다고 가정해 봅니다.

.SIROENET $($H)

이 경우 텍스트 문자열 siroe가 일반 데이터베이스에서 조회되고 조회 결과(있을 경우)가 다시 쓰기 규칙의 템플리트에 사용됩니다. siroe를 조회한 결과가 $u%eng.siroe.com@siroenet이라고 가정해 봅니다. 그러면 템플리트 출력은 jdoe@eng.siroe.com(즉, 아이디 = jdoe, 호스트/도메인 지정 = eng.siroe.com)이 되고 라우팅 시스템은 siroenet이 됩니다.

일반 텍스트 데이터베이스가 있는 경우 제대로 작동하려면 세계 공용이어야 합니다. 자세한 내용은 10.9.1 MTA 텍스트 데이터베이스를 참조하십시오.

11.6.6 지정된 매핑 적용, ${...}

.SIROENET $($H) ${mapping,argument} 형식의 대체는 MTA 매핑 파일에서 매핑을 찾아 적용하는 데 사용됩니다. mapping 필드는 사용할 매핑 테이블의 이름을 지정하며 argument는 매핑에 전달할 문자열을 지정합니다. 매핑은 존재해야 하며 성공적일 경우 해당 출력에 $Y 플래그를 설정해야 합니다. 매핑이 존재하지 않거나 $Y를 설정하지 않을 경우 다시 쓰기가 실패합니다. 성공적일 경우 매핑 결과가 현재 위치에서 템플리트에 병합되고 다시 확장됩니다.

이 기법을 통해 MTA 다시 쓰기 프로세스는 복잡한 여러 방법으로 확장될 수 있습니다. 예를 들어, 주소의 아이디 부분을 선택적으로 분석 및 수정할 수 있습니다(일반적으로 MTA 다시 쓰기 프로세스에서 불가능한 기능임).

11.6.7 사용자 제공 루틴 대체, $[...]

$[image,routine,argument] 형식의 대체는 사용자 제공 루틴을 검색 및 호출하는 데 사용됩니다. UNIX의 런타임에서 MTA는 dlopendlsym을 사용하여 공유 라이브러리 이미지에서 지정된 루틴을 동적으로 로드 및 호출합니다. 그런 다음 루틴은 다음 인수 목록과 함께 함수로 호출됩니다.

status := routine (argument, arglength, result, reslength)

argumentresult는 252바이트 길이의 문자열 버퍼입니다. UNIX에서 argumentresult는 문자열에 대한 포인터로 전달됩니다(예: C에서는 char*로 전달됨). arglengthreslength는 참조에 의해 전달되는 서명된 긴 정수입니다. 입력 시에 argument는 다시 쓰기 규칙 템플리트의 인수 문자열을 포함하며 arglength는 해당 문자열의 길이를 포함합니다. 반환 시에 결과 문자열은 result에 포함되고 그 길이는 reslength에 포함되어야 합니다. 그런 다음 해당 결과 문자열은 다시 쓰기 규칙 템플리트의 "$[image,routine,argument]"를 대체합니다. 루틴은 다시 쓰기 규칙이 실패할 경우 0을 반환하고 성공할 경우 -1을 반환합니다.

이 기법을 통해 다시 쓰기 프로세스는 모든 종류의 복잡한 방법으로 확장될 수 있습니다. 예를 들어, 일부 유형의 이름 서비스에 대한 호출을 수행하고 그 결과를 사용하여 주소를 일정한 방식으로 변경할 수 있습니다. 호스트siroe.com에 대한 정방향 지정 주소(예: To: 주소)에 대해 다음 다시 쓰기 규칙을 사용하여 디렉토리 서비스 조회를 수행할 수 있습니다. 11.6.12 방향 및 위치별 다시 쓰기 규칙($B, $E, $F, $R)에 설명된 $F는 정방향 지정 주소에 대해서만 이 규칙이 사용되도록 합니다.

siroe.com $F$[LOOKUP_IMAGE,LOOKUP,$U]

정방향 지정 주소 jdoe@siroe.com은 이 다시 쓰기 규칙과 일치할 경우 LOOKUP_IMAGE(UNIX의 공유 라이브러리)가 메모리에 로드된 다음 LOOKUP 루틴이 인수 매개 변수로 jdoe와 함께 호출되게 합니다. 그런 다음 LOOKUP 루틴은 결과 매개 변수에서 다른 주소, 즉 John.Doe%eng.siroe.com과 다시 쓰기 규칙이 성공했음을 나타내는 값 -1을 반환할 수 있습니다. 결과 문자열의 백분율 기호( 11.4.2 반복되는 다시 쓰기 템플리트, A%B 참조)는 John.Doe@eng.siroe.com을 다시 쓸 주소로 사용하여 다시 쓰기 프로세스가 다시 시작되게 합니다.

UNIX 시스템에서 사이트 제공 공유 라이브러리 이미지는 세계 공용이어야 합니다.

11.6.8 단일 필드 대체, $&, $!, $*, $#

단일 필드 대체는 다시 쓰는 호스트/도메인 지정에서 단일 하위 도메인 부분을 추출합니다. 표 11–6에는 사용 가능한 단일 필드 대체가 나와 있습니다.

표 11–6 단일 필드 대체

제어 시퀀스 

사용 

$&n 

호스트 지정에서 n번째 요소(n=0,1,2,..,9)를 대체합니다(일정한 와일드카드와 일치하지 않았거나 일치한 부분). 요소는 점으로 구분되며 왼쪽의 첫 번째 요소가 요소 0입니다. 요청한 요소가 없으면 다시 쓰기가 실패합니다. 

$!n 

호스트 지정에서 n번째 요소(n=0,1,2,..,9)를 대체합니다(일정한 와일드카드와 일치하지 않았거나 일치한 부분). 요소는 점으로 구분되며 오른쪽의 첫 번째 요소가 요소 0입니다. 요청한 요소가 없으면 다시 쓰기가 실패합니다. 

$*n 

도메인 지정에서 n번째 요소(n=0,1,2,..,9)를 대체합니다(패턴의 명시적 텍스트와 일치하지 않은 부분). 요소는 점으로 구분되며 왼쪽의 첫 번째 요소가 요소 0입니다. 요청한 요소가 없으면 다시 쓰기가 실패합니다. 

$#n 

도메인 지정에서 n번째 요소(n=0,1,2,..,9)를 대체합니다(패턴의 명시적 텍스트와 일치하지 않은 부분). 요소는 점으로 구분되며 오른쪽의 첫 번째 요소가 요소 0입니다. 요청한 요소가 없으면 다시 쓰기가 실패합니다. 

jdoe@eng.siroe.com 주소가 다음 다시 쓰기 규칙과 일치한다고 가정해 봅니다.

*.SIROE.COM     $U%$&0.siroe.com@mailhub.siroe.com

이 경우 템플리트의 결과는 jdoe@eng.siroe.com이 되며 mailhub.siroe.com이 라우팅 시스템으로 사용됩니다.

11.6.9 고유 문자열 대체

$W 제어 시퀀스를 사용할 때마다 대문자 및 숫자로 구성된 반복되지 않는 고유한 텍스트 문자열이 삽입됩니다. 반복되지 않는 주소 정보를 생성해야 할 경우에 $W가 유용합니다.

11.6.10 소스 채널별 다시 쓰기 규칙($M, $N)

특정 소스 채널에 대해서만 작동하는 다시 쓰기 규칙을 지정할 수 있습니다. 이것은 단순 형식의 이름이 다음과 같이 두 개의 의미를 가질 경우에 유용합니다.

  1. 특정 채널에 도착하는 메시지에 나타날 경우

  2. 다른 채널에 도착하는 메시지에 나타날 경우

소스 채널별 다시 쓰기는 사용 중인 채널 프로그램과 rulesnorules 채널 키워드와 연관됩니다. 다시 쓰기를 수행 중인 MTA 구성 요소와 연관된 채널에서 norules가 지정된 경우 채널별 다시 쓰기 검사가 수행되지 않습니다. 이러한 채널에 rules가 지정된 경우에는 채널별 규칙 검사가 적용됩니다. rules 키워드가 기본값입니다.

소스 채널별 다시 쓰기는 주어진 주소와 일치하는 채널과 연관되지 않으며 다시 쓰기를 수행하는 MTA 구성 요소와 이 구성 요소의 채널 테이블 항목에만 의존합니다.

채널별 다시 쓰기 검사는 규칙의 템플리트 부분에 있는 $N 또는 $M 제어 시퀀스의 존재에 의해 트리거됩니다. $N 또는 $M 뒤에서부터 at 기호(@), 백분율 기호(%) 또는 후속 $N, $M, $Q, $C, $T 또는 $?의 앞 부분에 있는 문자는 채널 이름으로 해석됩니다.

예를 들어, $Mchannel의 경우 channel이 현재 다시 쓰기를 수행 중이 아니면 규칙이 실패하고 $Nchannel의 경우 channel이 다시 쓰기를 수행 중이면 규칙이 실패합니다. 여러 $M$N 절을 지정할 수 있습니다. 여러 $M 절 중 하나가 일치하면 규칙이 성공하며 여러 $N 절 중 하나가 일치하면 규칙이 실패합니다.

11.6.11 대상 채널별 다시 쓰기 규칙($C, $Q)

메시지를 대기열에 넣는 채널에 의존하여 다시 쓰기 규칙이 적용될 수 있습니다. 이것은 일부 호스트에 대한 두 개의 이름, 즉 특정 호스트 그룹에 알려진 이름과 다른 호스트 그룹에 알려진 이름이 존재할 경우에 유용합니다. 다른 채널을 사용하여 메시지를 각 그룹에 보내면 주소를 다시 작성하여 각 그룹에 알려진 이름으로 호스트를 참조할 수 있습니다.

대상 채널별 다시 쓰기는 메시지를 대기열에서 빼고 처리하는 채널과 해당 채널의 rulesnorules 채널 키워드와 연관됩니다. 대상 채널에 norules가 지정된 경우 채널별 다시 쓰기 검사가 수행되지 않습니다. 대상 채널에 rules가 지정된 경우 채널별 규칙 검사가 적용됩니다. rules 키워드가 기본값입니다.

대상 채널별 다시 쓰기는 주어진 주소와 일치하는 채널과 연관되지 않습니다. 대상 채널별 다시 쓰기는 메시지의 봉투의 To: 주소에만 의존합니다. 메시지를 대기열에 넣을 때 대상 채널을 결정하기 위해 메시지의 envolope To: 주소가 우선적으로 다시 작성됩니다. envelope To: 주소를 다시 쓰는 동안 $C$Q 제어 시퀀스는 무시됩니다. envelope To: 주소가 다시 작성되고 대상 채널이 결정되면 메시지와 연관된 다른 주소가 다시 작성될 때 $C$Q 제어 시퀀스가 적용됩니다.

대상 채널별 다시 쓰기 검사는 규칙의 템플리트 부분에 있는 $C 또는 $Q 제어 시퀀스의 존재에 의해 트리거됩니다. $C 또는 $Q 뒤에서부터 at 기호(@), 백분율 기호( %) 또는 후속 $N, $M, $C, $Q, $T 또는 $?의 앞 부분에 있는 문자는 채널 이름으로 해석됩니다.

예를 들어, $Qchannel의 경우 channel이 대상이 아니면 규칙이 실패하고 $Cchannel의 경우 channel이 대상이면 규칙이 실패합니다. 여러 $Q$C 절을 지정할 수 있습니다. 여러 $Q 절 중 하나가 일치하면 규칙이 성공하며 여러 $C 절 중 하나가 일치하면 규칙이 실패합니다.

11.6.12 방향 및 위치별 다시 쓰기 규칙($B, $E, $F, $R)

경우에 따라 봉투 주소 또는 헤더 주소에만 적용되는 다시 쓰기 규칙을 지정해야 합니다. 제어 시퀀스 $E는 다시 쓰는 주소가 봉투 주소가 아닐 경우 다시 쓰기가 실패하도록 지정하며 $B는 다시 쓰는 주소가 메시지 헤더나 본문에서 오지 않은 경우 다시 쓰기가 실패하도록 지정합니다. 이러한 시퀀스는 다시 쓰기에 다른 영향을 미치지 않으며 다시 쓰기 규칙 템플리트의 임의 위치에 나타날 수 있습니다.

주소를 또한 방향별로 범주화할 수 있습니다. 정방향 지정 주소는 To:, Cc:, Resent-to: 또는 대상을 나타내는 다른 헤더 또는 봉투 행에서 시작되는 주소입니다. 역방향 지정 주소는 소스를 나타내는 From:, Sender: 또는 Resent-From:과 같은 주소입니다. 제어 시퀀스 $F는 주소가 정방향 지정일 경우에 다시 쓰기를 적용하도록 지정하며 $R은 주소가 역방향 지정일 경우에 다시 쓰기를 적용하도록 지정합니다.

11.6.13 호스트 위치별 다시 쓰기($A, $P, $S, $X)

경우에 따라 주소에서 호스트 이름이 나타나는 위치가 중요한 다시 쓰기가 필요할 수 있습니다. 호스트 이름은 다음과 같이 주소의 여러 다른 컨텍스트에 나타날 수 있습니다.

정상적인 경우라면 호스트 이름은 표시 위치에 상관 없이 동일하게 처리되어야 합니다. 일부 상황에서는 특수한 처리가 필요할 수 있습니다.

주소에서의 호스트 위치에 기초한 일치를 제어하기 위해 네 개의 제어 시퀀스가 사용됩니다.

호스트가 지정된 위치와 다른 위치에 있을 경우 규칙은 실패합니다. 이러한 시퀀스는 하나의 다시 쓰기 규칙에서 결합될 수 있습니다. 예를 들어, $S$A가 지정된 경우 규칙은 소스 경로나 at 기호의 오른쪽에 지정된 호스트와 일치합니다. 이러한 시퀀스를 전혀 지정하지 않는 것은 시퀀스를 모두 지정되는 것과 같습니다. 즉, 위치에 상관 없이 규칙이 일치할 수 있습니다.

11.6.14 현재 태그 값 변경, $T

$T 제어 시퀀스는 현재 다시 쓰기 규칙 태그를 변경하는 데 사용됩니다. 구성 파일과 도메인 데이터베이스에서 다시 쓰기 규칙 패턴이 조회되기 전에 다시 쓰기 규칙 태그가 모든 다시 쓰기 규칙 패턴의 앞에 놓입니다. $T의 뒤에서부터 at 기호, 백분율 기호, $N, $M, $Q, $C, $T 또는 $?의 앞 부분에 있는 텍스트는 새 태그로 간주됩니다.

태그는 특정 구성 요소가 발견되었을 때 주소의 전체 특성이 변경되는 특수한 주소 지정 형식을 처리하는 데 유용합니다. 예를 들어, 소스 경로에서 발견될 경우 특정 호스트 이름 internet을 주소에서 제거해야 하며 TCP-DAEMON 채널에 대해 결과 주소를 강제로 일치시켜야 한다고 가정해 봅니다.

이것은 다음과 같은 규칙으로 구현할 수 있습니다(localhost가 로컬 호스트의 공식 이름이라고 가정함).

internet               $S$U@localhost$Tmtcp-force|

mtcp-force|.           $U%$H@TCP-DAEMON

첫 번째 규칙은 특정 호스트 이름 internet과 일치합니다(소스 경로에 표시될 경우). 이 규칙은 internet을 로컬 채널에 대해 강제로 일치시켜 주소에서 제거되도록 합니다. 그런 다음 다시 쓰기 태그가 설정됩니다. 다시 쓰기가 진행되지만 태그로 인해 일반 규칙은 일치하지 않습니다. 마지막으로 태그와 함께 기본 규칙이 시도되고 이 집합의 두 번째 규칙이 적용되어 다른 조건에 상관 없이 TCP-DAEMON 채널에 대해 주소를 강제로 일치시킵니다.

11.6.15 다시 쓰기와 관련된 오류 메시지 제어($?)

MTA는 다시 쓰기 및 채널 일치가 실패할 경우 기본 오류 메시지를 제공합니다. 특별한 상황에서는 이러한 메시지를 변경하는 기능이 유용할 수 있습니다. 예를 들어, 누군가가 이더넷 라우터 상자에 메일을 보내려고 시도할 경우 일반적인 “잘못된 호스트/도메인이 지정됨”라는 메시지보다 “라우터가 메일을 수락할 수 없음”이라는 메시지가 더 정확하게 의미를 표시합니다.

특수한 제어 시퀀스를 사용하여 규칙이 실패할 경우 인쇄할 오류 메시지를 변경할 수 있습니다. $? 시퀀스는 오류 메시지를 지정하는 데 사용됩니다. $?의 뒤에서부터 at 기호(@), 백분율 기호(%), $N, $M, $Q, $C, $T 또는 $?의 앞 부분에 있는 텍스트는 다시 쓰기의 결과가 임의의 채널과 일치하는 데 실패할 경우 인쇄될 오류 메시지의 텍스트로 간주됩니다. 오류 메시지의 설정은 "고정적"이며 다시 쓰기 프로세스 동안 계속 적용됩니다.

$?를 포함하는 규칙은 다른 규칙과 마찬가지로 작동합니다. $?만 포함하는 특수한 규칙의 경우 다른 방식으로 처리됩니다. 즉, 주소의 메일함 또는 호스트 부분을 변경하지 않고 다시 쓰기 프로세스가 종료하며 호스트는 채널 테이블에서 있는 그대로 조회됩니다. 이 조회는 실패할 것이며 이에 따라 오류 메시지가 결과로 반환됩니다.

예를 들어, MTA 구성 파일의 최종 다시 쓰기 규칙이 다음과 같다고 가정해 봅니다.

. $?Unrecognized address; contact postmaster@siroe.com

이 예에서 실패할 수 있는 인식되지 않은 호스트 또는 도메인 지정은 실패하는 과정에서 오류 메시지 Unrecognized address; contact postmaster@siroe.com을 생성합니다.