こんな話が出てきても 困るのだが あるメール配信エージェント を 使用す る時に いくつかの ヘッダーを メールメッセージに 追記(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
このような ユーザーの 場合は 当然 表示 されないことに なるようです
これは 通常 必須 ですが これを 必要としない 配信エージェントを 作成可 能なように ”?flag?”を つけて 作成しておくほうが 良いようです つまり
H?D?Date: $a /* $a というのは RFC822 形式の メール メッセージの発信日 */
”$a”は sendmail の内部で 設定される そうです 今回の test27.cf の F= には F=mDFMuXa の 形ですの で ”H?D?Date: $a”を 追記すれば それで 条件は 揃うことに なります。
メールメッセージを一意的に 識別するのに使用されます 形式は このように なるとの事です まず 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 作成