戻る

3209:Headers select condition

Headers ある条件での 追加 するもの

概要

こんな話が出てきても 困るのだが あるメール配信エージェント を 使用す る時に いくつかの ヘッダーを メールメッセージに 追記(inserted )する事 が あると云う事です とすれば 送り手 というか ある条件で 配信エージェント が選ばれるということです その内容は預りしらぬ 事です そういえば

$ /usr/sbin/sendmail -C/etc/mail/sendmail.cf -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> =M
mailer 0 (prog): P=/bin/sh S=EnvFromL/HdrFromL R=EnvToL/HdrToL M=0 U=0:0
F=9DFMeloqsu L=0 E=\n T=X-Unix/X-Unix/X-Unix r=100 A=sh -c $u

mailer 1 (*file*): P=[FILE] S=parse/parse R=parse/parse M=0 U=0:0 
F=9DEFMPloqsu L=0 E=\n T=X-Unix/X-Unix/X-Unix r=100 A=FILE $u

mailer 2 (*include*): P=/dev/null S=parse/parse R=parse/parse M=0 U=0:0 
F=su L=0 E=\n T=<undefined>/<undefined>/<undefined> r=100 A=INCLUDE $u

mailer 3 (local): P=/usr/bin/procmail S=EnvFromL/HdrFromL R=EnvToL/HdrToL M=0 U=0:0
F=/59:@ADFMPSfhlnqsw| L=0 E=\n T=DNS/RFC822/X-Unix r=100 A=procmail -Y -a $h -d $u

mailer 4 (smtp): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=EnvToSMTP/EnvToSMTP M=0 U=0:0 
F=DFMXmu L=990 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h

mailer 5 (esmtp): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=EnvToSMTP/EnvToSMTP M=0 U=0:0 
F=DFMXamu L=990 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h

mailer 6 (smtp8): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=EnvToSMTP/EnvToSMTP M=0 U=0:0 
F=8DFMXmu L=990 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h

mailer 7 (dsmtp): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=EnvToSMTP/EnvToSMTP M=0 U=0:0 
F=%DFMXamu L=990 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h 

mailer 8 (relay): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=MasqSMTP/MasqSMTP M=0 U=0:0 
F=8DFMXamu L=2040 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h
> /quit
$ /usr/sbin/sendmail -Ctest27.cf -bt
Mhub: Warning: first argument in [IPC] mailer must be TCP or FILE
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> =M
mailer 0 (prog): P=/bin/sh S=0/0 R=0/0 M=0 U=0:0 
F=9Dloqsu L=0 E=\n T=X-Unix/X-Unix/X-Unix r=100 A=sh -c $u

mailer 1 (*file*): P=[FILE] S=0/0 R=0/0 M=0 U=0:0 
F=9DEFMPloqsu L=0 E=\n T=X-Unix/X-Unix/X-Unix r=100 A=FILE $u

mailer 2 (*include*): P=/dev/null S=0/0 R=0/0 M=0 U=0:0 
F=su L=0 E=\n T=<undefined>/<undefined>/<undefined> r=100 A=INCLUDE $u

mailer 3 (hub): P=[IPC] S=Hubset/Hubset R=0/0 M=0 U=0:0 
F=DFMXamu L=0 E=\r\n T=DNS/RFC822/SMTP r=100 A=IPC $h

mailer 4 (local): P=/bin/mail S=0/0 R=0/0 M=0 U=0:0 
F=/5:@ADFMlmnrsw| L=0 E=\n T=<undefined>/<undefined>/<undefined> r=100 A=mail -d $u
> /quit

良くわからないが 沢山あるのでしょう(適当に改行を入れてある)つまり ある条件に より 配信エージェントが 選ばれる と云う事が あるようです 今現 在の テスト cf では ローカルのものは 実際の 動作は しないが (ルール は 無し に している )配信エージェント としては 存在している。

条件

選択方法

まず test27.cf の 一部分を 見てみよう

Mhub,   P=[IPC], S=Hubset, R=0, F=mDFMuXa, T=DNS/RFC822/SMTP, A=IPC $h
Mlocal, P=/bin/mail, F=lsDFMAw5:/|@rmn, S=0, R=0, A=mail -d $u 

このような 場所に F= で始まるものが あります これは フラグ といって ある条件を 文字 で 表示 してあるというものです 次に ヘッダー を 考えると

HFrom:  <$g>        /*  通常の表示 方法 例  */
H?flags?name: value /*  条件付き 方法 例  */

例として Full-Name: ヘッダー というものを 扱うとする場合

H?x?Full-Name: $?x$x$.    フルネームが あれば 追記しましょう

これは 条件 ”$?x$x$.”成立するならば ヘッダー 追記する と云う事です が これだけでは まだ 追記されません

Mhub,   P=[IPC], S=Hubset, R=0, F=mDFMuXa, T=DNS/RFC822/SMTP, A=IPC $h

ここの F=mDFMuXa に x が無いので 全体と しては 追記されません そこで 上記の所を

Mhub,   P=[IPC], S=Hubset, R=0, F=xmDFMuXa, T=DNS/RFC822/SMTP, A=IPC $h

の様に x を 追記 しないと いけま せん これで 漸く 準備 完了です が ”$?x$x$.”の 条件というのは あるなら ば ということですから 何処かに 無ければ いけません passwd ファイルの gecos フィールド が 空白 の場合は 当然 準備 していても 表示は されません

$ cat /etc/passwd | grep aruuser
aruuser:x:1234:385:,,,:/home/aruuser:/bin/sh

このような ユーザーの 場合は 当然 表示 されないことに なるようです

Date:ヘッダー

これは 通常 必須 ですが これを 必要としない 配信エージェントを 作成可 能なように ”?flag?”を つけて 作成しておくほうが 良いようです つまり

H?D?Date: $a   /* $a というのは RFC822 形式の メール メッセージの発信日  */

”$a”は sendmail の内部で 設定される そうです 今回の test27.cf の F= には F=mDFMuXa の 形ですの で ”H?D?Date: $a”を 追記すれば それで 条件は 揃うことに なります。

Message-Id:ヘッダー

メールメッセージを一意的に 識別するのに使用されます 形式は このように なるとの事です まず F=mDFMuXa であるので こ れは 変更しないで ヘッダー 項目のみ 追加 すれば 良い事に なります

H?M?Message-ID: < $t.$i@Sj>

わかり難い 説明

$t : 整数で表した現在の日付と時間
$i : キューファイルにおけるそのメッセージのローカルな一意的な ID (キューに 入らない場合でも つく)
Sj : これは 幾度も出てきてます 完全なドメイン形式のホスト名

ある 仮定

”$i”については どうなるの と云う事ですが 参考として sendmail の /var/log/messages に 残る ”Dec 30 14:10:22 server sendmail[19341]: jBU5AHLr019341:”の ようなものが あります これと 同じか 同かは わかりま せんが これの場合は

文字列 59 個を 当てはめる 但し、年の ものは 1900 を 引いて 
それを 60 で 割ってそのあまりを 当てはめる という 方法らしい

 59 /* の 文字列を 数字に 置き換える    */
0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefg hijklmnopqrstuvwx

0123456789A   BCDEFGHIJK   LMNOPQRSTU  VWXYZabcde  fghijklmno  pqrstuvwx

123456789010  12345678920  12345678930 12345678940 12345678950 12345678960

Y           (Year-1900)mod60 = 2006-->2006-1900=106 106/60-->1 46 =>k
M
D
h
m
s
SEQ
では例に当てはめて考えてみよう まず”jBU5AHLr019341”について

jBU5AHLr019341
Y year-2005 ::: 2005-1900=105 105/60=>1 45 ===> j
M Dec ===>(0 1 2 3 4 5 6 7 8 9 A B ) B
D 30 ===> U
h 14 ===> ( +9 14-9=5   ) 5
m 10 ===> A
s 22 ===> 17 ??H-->17 22--->M
Lr0  <== SEQ??
pid=19341

それがどうした といわれても 困るのですが!

戻る

にゃんたろう 拝!
2006年10月11日 (水) 21:21:18 JST 作成

Copyright © 2004.-2007. nyantarou All Rights Reserved.