Manpages

名 前

procmailex − procmail 設 定 フ ァ イ ル の 例

書 式

$HOME/.procmailrc の 設 定 例

説 明

設 定 フ ァ イ ル (rcfile) の 書 式 の 説 明 は procmailrc(5) を 参 照 の こ と 。 重 み つ き ス コ ア リ ン グ 手 法 に つ い て は procmailsc(5) に 詳 し い 説 明 が あ る 。 こ の manpage は 、 い ろ い ろ な レ シ ピ の 例 を 示 し た も の で あ る 。 rcfile 全 体 の 例 に つ い て は 、 procmail(1)備 考 の 節 や 、 procmail の ソ ー ス 配 布 に 含 ま れ る rcfile の サ ン プ ル (procmail*/examples/?procmailrc) を 参 照 し て ほ し い 。

scuba−dive メ ー リ ン グ リ ス ト か ら の メ ー ル を す べ て 選 び 出 し て scubafile と い う メ ー ル フ ォ ル ダ に 入 れ る (ロ ッ ク フ ァ イ ル と し て scubafile.lock を 使 用 す る )。 : 0: * ^TOscuba scubafile

peter か ら の メ ー ル で 、 Subject に compilers が 入 っ て い る も の を す べ て william に 転 送 す る (か つ メ ー ル の コ ピ ー を petcompil に 保 存 す る )。 : 0
* ^From.*peter
* ^Subject:.*compilers
{ :
0 c

! william [AT] somewhere.edu :
0
petcompil } 上 記 と 同 じ こ と を 実 現 す る 別 の 方 法 : :0 c * ^From.*peter * ^Subject:.*compilers ! william [AT] somewhere.edu :
0 A
petcompil 同 じ こ と を 実 現 で き る が 、 上 記 の 方 法 よ り 少 し 動 作 が 遅 い 方 法 : :0 c * ^From.*peter * ^Subject:.*compilers ! william [AT] somewhere.edu :
0 * ^From.*peter * ^Subject:.*compilers petcompil

procmail を 使 う の が ほ と ん ど 初 め て で 、 ち ょ っ と だ け 試 し て み た い 場 合 は 、 何 ら か の セ ー フ テ ィ ネ ッ ト を 設 け て お く と 助 か る こ と が 多 い 。 以 下 の 2 つ の レ シ ピ を 、 他 の ど の レ シ ピ よ り 前 に 入 れ て お く と 、 到 着 し た メ ー ル の う ち 常 に 最 新 の 32 通 を 保 存 す る こ と が で き る 。 こ の 機 能 を 働 か せ る た め に は 、 こ れ ら 2 つ の レ シ ピ を 追 加 す る 前 に $MAILDIR に ’backup’ と い う 名 前 の デ ィ レ ク ト リ を 作 っ て お か な け れ ば な ら な い 。 : 0 c backup :
0 ic | cd backup && rm −f dummy ’ls −t msg.* | sed −e 1,32d’ 使 っ て い る メ ー ル シ ス テ ム が 、 各 メ ー ル の 先 頭 の ’From ’ 行 を 生 成 し な か っ た り 、 間 違 っ た ’From ’ 行 を 生 成 し た り す る 場 合 は 、 procmail を −f− オ プ シ ョ ン を つ け て 呼 び 出 す こ と で こ の 問 題 を 修 正 す る (す な わ ち 、 正 し い ’From ’ 行 を つ け る ) こ と が で き る 。 こ の 問 題 を 解 決 す る 別 の 方 法 と し て は 、 以 下 の レ シ ピ を rcfile の 中 で 一 番 最 初 の レ シ ピ と し て 入 れ る 方 法 も あ る 。 こ う す る と 、 全 て の メ ー ル の ヘ ッ ダ は formail に よ り フ ィ ル タ リ ン グ さ れ る 。 formail は 、 メ ー ル の 先 頭 に あ る ’From ’ 行 を 取 り 除 い た 上 で 、 さ ら に ’From ’ 行 を 自 動 生 成 す る 。 : 0 fhw | formail −I "From " −a "From " 管 理 者 (postmaster) 以 外 か ら 来 た 全 て の メ ー ル の ヘ ッ ダ を 、 (統 計 を と っ た り 、 メ ー ル の デ バ ッ グ の た め に ) 自 分 だ け の ヘ ッ ダ コ レ ク シ ョ ン に 追 加 す る に は 、 次 の よ う に 設 定 す る 。 書 き こ み 時 の ロ ッ ク フ ァ イ ル と し て ’headc.lock’ を 使 用 す る 。 パ イ プ 処 理 が 完 了 す る 前 に ロ ッ ク フ ァ イ ル が 削 除 さ れ る こ と が な い よ う に 、 ’w’ オ プ シ ョ ン を 指 定 し な け れ ば い け な い 。 指 定 し な か っ た 場 合 、 パ イ プ が 処 理 対 象 の メ ー ル を 受 け 付 け る と す ぐ に ロ ッ ク フ ァ イ ル は 削 除 さ れ て し ま う 。 : 0 hwc: * !^FROM_MAILER | uncompress headc.Z; cat >>headc; compress
headc 上 記 の レ シ ピ で compress の 代 わ り に 、 も っ と 圧 縮 率 が 良 い gzip を 使 用 す る に は 以 下 の よ う に す れ ば よ い 。 : 0 hwc: * !^FROM_MAILER | gzip >>headc.gz

1000 バ イ ト 未 満 の メ ー ル を す べ て 自 宅 の ア ド レ ス に 転 送 す る (こ の レ シ ピ の 場 合 、 ロ ッ ク フ ァ イ ル は 必 要 な い )。 : 0 * < 1000 ! myname@home

surfing メ ー リ ン グ リ ス ト の ま と め 送 り の メ ー ル を 個 々 の メ ッ セ ー ジ に 分 割 し て 、 メ ー ル フ ォ ル ダ surfing に 格 納 す る 。 ロ ッ ク フ ァ イ ル と し て surfing.lock を 使 用 す る 。 : 0: * ^Subject:.*surfing.*Digest | formail +1 −ds >>surfing

postmaster や mailer−daemon か ら 来 た 全 て の メ ー ル (エ ラ ー で 戻 っ て き た メ ー ル な ど ) を postm フ ァ イ ル に 格 納 す る 。 ロ ッ ク フ ァ イ ル と し て postm.lock を 使 用 す る 。 : 0: * ^FROM_MAILER postm 簡 単 な 自 動 返 信 用 の レ シ ピ 。 こ の レ シ ピ は 、 デ ー モ ン か ら の メ ー ル (戻 っ て き た メ ー ル や メ ー リ ン グ リ ス ト か ら の メ ー ル な ど ) や 自 分 自 身 か ら の 自 動 返 信 の メ ー ル に は 自 動 返 信 し な い こ と を 保 証 し て い る 。 も し こ の よ う な 注 意 を 怠 っ た な ら ば 、 (メ ー ル ル ー プ な ど ) 大 変 な こ と が 起 こ り 得 る 。 こ の レ シ ピ を 用 い て 、 受 信 し た す べ て の メ ー ル に 対 し て 自 動 応 答 を 行 う た め に は 、 言 う ま で も な い が 、 rcfile の 他 の 全 て の レ シ ピ よ り 前 に こ れ を 置 く 必 要 が あ る 。 実 際 に は 、 講 読 し て い る メ ー リ ン グ リ ス ト か ら の メ ー ル を 処 理 す る レ シ ピ の 後 ろ に こ の レ シ ピ を 置 く こ と を 推 奨 す る 。 一 般 的 に は 、 メ ー リ ン グ リ ス ト に 対 し て 自 動 返 信 を 行 う の は よ い 考 え で は な い 。 (確 か に 、 正 規 表 現 !^FROM_DAEMON に よ っ て そ の よ う な メ ー ル は す で に 捕 ま え ら れ て い る は ず だ が 、 メ ー リ ン グ リ ス ト が 一 般 的 な 慣 習 に 従 っ て い な い 場 合 は 、 こ れ だ け で は 不 十 分 だ か ら で あ る 。 ) : 0 h c
* !^FROM_DAEMON
* !^X−Loop: your [AT] own.address
| (formail −r −I"Precedence: junk" \

−A"X−Loop: your [AT] own.address" ; \
echo "Mail received.") | $SENDMAIL −t 以 下 は も っ と 複 雑 な 自 動 返 信 の レ シ ピ の 例 で 、 有 名 な vacation(1) プ ロ グ ラ ム と 同 じ 機 能 を 実 現 す る も の で あ る 。 こ の レ シ ピ は (メ ー ル ル ー プ を 防 ぐ な ど の ) 直 前 の レ シ ピ と 同 じ 方 針 で 作 ら れ て い る 。 さ ら に 、 こ の レ シ ピ で は 送 信 者 の 名 前 を 抽 出 し て vacation デ ー タ ベ ー ス を 作 っ て お り 、 名 前 が 新 し い も の だ っ た と き に は vacation.cache フ ァ イ ル に そ の 名 前 が 追 加 さ れ る (vacation.cache フ ァ イ ル は formail に よ り 管 理 さ れ て お り 、 常 に 最 近 の 送 信 者 名 が 格 納 さ れ 、 フ ァ イ ル の サ イ ズ の 上 限 が 約 8192 バ イ ト に な る こ と が formail に よ り 保 証 さ れ る )。 新 し い 送 信 者 名 だ っ た 場 合 は 、 自 動 応 答 メ ッ セ ー ジ が 送 信 さ れ る 。 見 て 分 か る よ う に 、 以 下 の レ シ ピ で は 条 件 の 「 間 」 に コ メ ン ト が 入 っ て い る 。 こ の よ う な コ メ ン ト の 入 れ 方 は 認 め ら れ て い る 。 し か し 、 条 件 と 同 じ 行 に コ メ ン ト を 入 れ て は 「 い け な い 」 。

SHELL=/bin/sh # for other shells, this might need adjustment :
0 Whc: vacation.lock
# Perform a quick check to see if the mail was addressed to us
* $^To:.*\<$\LOGNAME\>
# Don’t reply to daemons and mailinglists
* !^FROM_DAEMON
# Mail loops are evil
* !^X−Loop: your [AT] own.address
| formail −rD 8192 vacation.cache :
0 ehc # if the name was not in the cache
| (formail −rI"Precedence: junk" \

−A"X−Loop: your [AT] own.address" ; \

echo "I received your mail,"; \

echo "but I won’t be back until Monday."; \

echo "−− "; cat $HOME/.signature \

) | $SENDMAIL −oi −t

TeX に 関 係 す る 全 メ ッ セ ー ジ を 、 texmail と い う デ ィ レ ク ト リ に 、 一 通 毎 に 別 の 、 他 と は 重 複 し な い 名 前 の フ ァ イ ル に 保 存 す る (こ こ で 指 定 す る デ ィ レ ク ト リ は あ ら か じ め 存 在 し な け れ ば な ら な い )。 こ の 場 合 、 ロ ッ ク フ ァ イ ル を 使 用 す る 必 要 が な い の で 、 レ シ ピ で も そ う な っ て い る 。 : 0 * (^TO|^Subject:.*)TeX[^t] texmail 上 と 同 じ だ が 、 メ ー ル を 番 号 が 振 ら れ た フ ァ イ ル (MH 形 式 の フ ォ ル ダ ) に 格 納 す る 点 が 異 な る 。 : 0 * (^TO|^Subject:.*)TeX[^t] texmail/. メ ー ル を 同 時 に 複 数 の デ ィ レ ク ト リ ・ フ ォ ル ダ に 振 り 分 け る こ と も で き る 。 以 下 の レ シ ピ は 、 メ ー ル を 2 つ の MH 形 式 の フ ォ ル ダ と 1 つ の デ ィ レ ク ト リ ・ フ ォ ル ダ に 振 り 分 け る 。 実 際 に は フ ァ イ ル は 1 つ 作 成 さ れ る だ け で 、 追 加 で ハ ー ド リ ン ク が 2 つ 作 成 さ れ る 。 : 0 * (^TO|^Subject:.*)TeX[^t] texmail/. wordprocessing dtp/. 会 議 (meeting) に 関 す る 全 メ ッ セ ー ジ を 月 毎 に 異 な る デ ィ レ ク ト リ に 保 存 す る 。 例 え ば 、 1994 年 1 月 だ っ た と す る と 、 フ ォ ル ダ 名 は ’94−01/meeting’ と い う 名 前 と な り 、 ロ ー カ ル ロ ッ ク フ ァ イ ル は ’94−01/meeting.lock’ に な る 。 : 0: * meeting ’date +%y−%m’/meeting 上 と 同 じ だ が 、 ’94−01’ デ ィ レ ク ト リ が 存 在 し な か っ た 場 合 、 自 動 的 に 作 成 さ れ る 。

MONTHFOLDER=’date +%y−%m’ :
0 Wic * ? test ! −d $MONTHFOLDER | mkdir $MONTHFOLDER :
0: * meeting ${MONTHFOLDER}/meeting 上 と 同 じ だ が 、 少 し だ け 違 う 方 法 :

MONTHFOLDER=’date +%y−%m’ DUMMY=’test −d $MONTHFOLDER || mkdir $MONTHFOLDER’ :
0: * meeting ${MONTHFOLDER}/meeting 複 数 の メ ー リ ン グ リ ス ト を 講 読 し て い て 、 そ の メ ー リ ン グ リ ス ト の い く つ か に ク ロ ス ポ ス ト す る 人 が い る 場 合 、 同 じ メ ッ セ ー ジ を 何 回 か 受 け 取 る こ と が よ く あ る(各 メ ー リ ン グ リ ス ト か ら は 一 通 だ が )。 以 下 の 簡 単 な レ シ ピ を 使 う と 、 重 複 し た メ ー ル を 除 去 す る こ と が で き る 。 こ の レ シ ピ で は 、 formail を 通 じ て 最 近 受 信 し た メ ー ル の Message−ID を 格 納 す る 8KB の キ ャ ッ シ ュ ・ フ ァ イ ル を 作 っ て い る 。 Message−ID は 新 着 メ ー ル 毎 に 一 意 で あ る こ と が 保 証 さ れ て い る の で 、 Message−ID を 使 う の は 重 複 す る メ ー ル を 除 く の に ま さ に ぴ っ た り の 方 法 で あ る 。 こ の レ シ ピ を rcfile の 一 番 最 初 に 置 く だ け で 、 重 複 す る メ ー ル は こ の レ シ ピ を 通 過 で き な く な る 。 : 0 Wh: msgid.lock | formail −D 8192 msgid.cache 注 意 す べ き こ と と し て 、 こ れ よ り 後 の レ シ ピ で 配 信 に 問 題 が あ る と procmail は そ の メ ー ル を キ ュ ー に も う 一 度 入 れ よ う と す る 。 そ う す る と 、 次 回 の キ ュ ー 処 理 の 際 に こ の メ ー ル は 重 複 し て い る と み な さ れ 、 な く な っ て し ま う 。 自 分 の ス ク リ プ ト 作 成 技 術 に あ ま り 自 信 が な い 場 合 は 、 代 わ り に 以 下 の レ シ ピ を 使 う こ と が で き る 。 こ の レ シ ピ は 、 重 複 す る メ ー ル を ど こ か 捨 て て し ま う の で は な く 、 別 の フ ォ ル ダ に 入 れ る 。 も ち ろ ん 、 定 期 的 に こ の フ ォ ル ダ を 空 に す る の は 、 自 分 で や ら な い と い け な い 。 : 0 Whc: msgid.lock | formail −D 8192 msgid.cache :
0 a: duplicates

procmail は MH 形 式 の フ ォ ル ダ に 直 接 メ ッ セ ー ジ を 配 信 す る こ と が で き る が 、 本 物 の MH が 管 理 し て い る 未 読 番 号 (unseen sequence) の 更 新 は 行 わ な い 。 procmail に も 未 読 番 号 の 更 新 を 行 わ せ た い 場 合 は 、 以 下 の よ う な レ シ ピ を 使 う と よ い 。 こ の 例 で は 、 本 文 に spam と い う 言 葉 を 含 む 全 て の メ ー ル を spamfold と い う MH フ ォ ル ダ に 入 れ て い る 。 ロ ー カ ル ロ ッ ク フ ァ イ ル が 必 要 な 点 に 注 意 す る こ と 。 な ぜ な ら 、 MH の プ ロ グ ラ ム 群 は 番 号 フ ァ イ ル (sequences file) の ロ ッ ク を 行 わ な い か ら で あ る 。 し た が っ て 、 番 号 フ ァ イ ル を 変 更 す る MH の プ ロ グ ラ ム が 非 同 期 で 複 数 実 行 さ れ る と 、 内 容 が お か し く な っ た り 、 い つ の 間 に か 変 更 が 失 わ れ る 可 能 性 が あ る 。 残 念 な が ら 、 ロ ッ ク フ ァ イ ル を 使 っ て も こ の 問 題 を 完 全 に 解 決 す る こ と は で き な い 。 ’show’、 ’mark’ や 他 の MH プ ロ グ ラ ム の 実 行 中 に rcvstore が 起 動 さ れ る こ と が あ り 得 る か ら で あ る 。 こ の 問 題 が MH の 将 来 の バ ー ジ ョ ン で 修 正 さ れ る こ と を 期 待 し て い る が 、 そ れ ま で は 、 番 号 が 失 な わ れ た り お か し く な っ た り す る 危 険 と 、 未 読 番 号 を 使 う 利 点 を 、 天 秤 に か け た 上 で 使 わ な け ら ば な ら な い だ ろ う 。 : 0 :spamfold/$LOCKEXT * B ?? spam | rcvstore +spamfold

emacs の メ ー ル フ ォ ル ダ (RMAIL や VM と い っ た emacs 上 で 動 作 す る メ ー ル ・ パ ッ ケ ー ジ で 管 理 さ れ て い る メ ー ル フ ォ ル ダ ) に 直 接 配 信 す る 場 合 、 emacs と 同 じ ロ ッ ク フ ァ イ ル を 使 用 す べ き で あ る 。 emacs の メ ー ラ ー は こ の 点 で 少 し お か し な と こ ろ が あ り 、 す で に emacs の 内 部 バ ッ フ ァ に 読 み 込 ま れ て い る メ ー ル フ ォ ル ダ に 第 三 者 が メ ー ル を 配 信 す る と 、 非 常 に 混 乱 し て し ま う 。 以 下 の レ シ ピ は $HOME の 値 が /home/john の 場 合 の 例 で あ る 。

MAILDIR=Mail :
0:/usr/local/lib/emacs/lock/!home!john!Mail!mailbox * ^Subject:.*whatever
mailbox 別 の 方 法 と し て は 、 procmail 専 用 の メ ー ル ボ ッ ク ス を 設 け 、 procmail は そ こ に メ ー ル を 配 信 す る よ う に し て 、 定 期 的 に movemail を 使 っ て メ ー ル ボ ッ ク ス を 空 に し 、 内 容 を emacs メ ー ラ ー の フ ァ イ ル に コ ピ ー す る こ と も で き る 。 movemail は メ ー ル ボ ッ ク ス 単 位 の ロ ー カ ル ロ ッ ク フ ァ イ ル mailbox.lock を 使 用 す る 。 実 の と こ ろ 、 procmail と 一 緒 に 使 う 場 合 、 こ の 方 法 を 使 う 方 が 望 ま し い 。 メ ー ル か ら 特 定 の ヘ ッ ダ を 抽 出 し て 環 境 変 数 に 設 定 す る に は 、 以 下 の い ず れ か の 方 法 も 使 用 す る こ と が で き る 。

SUBJECT=’formail −xSubject:’ # 通 常 の フ ィ ー ル ド FROM=’formail −rt −xTo:’ # 特 殊 な 例 :
0 h # 他 の 方 法 KEYWORDS=| formail −xKeywords:

procmailrc フ ァ イ ル 内 で 一 時 フ ァ イ ル を 使 っ て い て 、 procmail 終 了 直 前 に 一 時 フ ァ イ ル が 確 実 に 削 除 さ れ る よ う に す る に は 、 以 下 の よ う に す れ ば よ い 。

TEMPORARY=$HOME/tmp/pmail.$$ TRAP="/bin/rm −f $TEMPORARY" キ ー ワ ー ド TRAP は procmail の 終 了 コ ー ド を 変 更 す る た め に 使 う こ と も で き る 。 つ ま り 、 通 常 の 終 了 コ ー ド の 代 わ り に 終 了 コ ー ド ’1’ を procmail が 返 す よ う に し た い 場 合 、 以 下 の よ う に す れ ば よ い :

EXITCODE=""
TRAP="exit 1;" # 最 後 の セ ミ コ ロ ン は 大 事 で あ る 。 exit は 独 立 し た
# コ マ ン ド で は な く シ ェ ル の コ マ ン ド だ か ら で あ る 。 終 了 コ ー ド に TRAP か ら 起 動 さ れ た プ ロ グ ラ ム の 結 果 を 反 映 さ せ る 必 要 が な い 場 合 は 、 以 下 の よ う に 書 く だ け で も よ い 。

EXITCODE=1 以 下 の レ シ ピ は 、 受 信 し た メ ー ル の う ち postscript フ ァ イ ル と 思 わ れ る メ ー ル を 全 部 印 刷 す る 。 : 0 Bb * ^^%! | lpr 次 の レ シ ピ は 同 じ 動 作 を す る が 、 も う 少 し 選 択 条 件 が 厳 し く な っ て い る 。 print−server か ら 来 た postscript フ ァ イ ル だ け を 印 刷 す る 。 最 初 の 条 件 は 、 ヘ ッ ダ 内 に 指 定 パ タ ン が 見 つ か っ た 場 合 の み マ ッ チ す る 。 二 番 目 の 条 件 は 、 メ ー ル 本 文 の 先 頭 で の み マ ッ チ す る 。 : 0 b * ^From[ :].*print−server * B ?? ^^%! | lpr 上 と 同 じ だ が 、 少 し だ け 違 う 方 法 : :0
* ^From[ :].*print−server
{ :
0 B b
* ^^%!
| lpr } こ れ も 同 様 : :0 HB b * ^^(.+$)*From[ :].*print−server * ^^(.+$)*^%! | lpr メ ー ル ア カ ウ ン ト を 2つ 持 っ て い る と し よ う 。 ど ち ら も 常 時 使 用 し て い る が 、 と て も 離 れ た 場 所 に あ る と す る (つ ま り 、 い ず れ か 一 方 の ア カ ウ ン ト に 届 い た メ ー ル し か 読 む こ と が で き な い と す る )。 ア カ ウ ン ト 1 に 届 い た メ ー ル を ア カ ウ ン ト 2 に 転 送 し 、 反 対 向 き も 行 い た い と い う 状 況 を 考 え る 。 ま ず 思 い つ く の は 、 両 方 の サ イ ト で .forward フ ァ イ ル を 使 う 方 法 だ が 、 も ち ろ ん う ま く 動 か な い 。 メ ー ル の ル ー プ が 起 こ っ て し ま う か ら だ 。 こ の メ ー ル の ル ー プ は 、 両 方 の サ イ ト の $HOME/.procmailrc フ ァ イ ル の 先 頭 に 以 下 の レ シ ピ を 入 れ て お く こ と で 避 け る こ と が で き る 。 両 方 の サ イ ト で 同 じ X−Loop: フ ィ ー ル ド を 追 加 す る よ う に し て お け ば 、 メ ー ル は ど ち ら の ア カ ウ ン ト か ら で も 安 全 に も う 一 方 の ア カ ウ ン ト に 転 送 す る こ と が で き る よ う に な る 。 : 0 c
* !^X−Loop: yourname [AT] your.address
| formail −A "X−Loop: yourname [AT] your.address" | \
$SENDMAIL −oi yourname [AT] the.account 誰 か が 件 名 に ’retrieve’ と い う キ ー ワ ー ド を 入 れ た メ ー ル を 送 っ て く る と 、 以 下 の レ シ ピ は 自 動 的 に info_file の 内 容 を 送 信 者 に 送 り 返 す 。 メ ー ル を 送 信 す る レ シ ピ で は い つ も そ う で あ る が 、 メ ー ル の ル ー プ が 起 こ ら な い よ う に 気 を 付 け る こ と 。 : 0 * !^From +YOUR_USERNAME * !^Subject:.*Re: * !^FROM_DAEMON *
^Subject:.*retrieve | (formail −r ; cat info_file) | $SENDMAIL −oi −t 今 度 は 、 メ ー ル で ア ク セ ス 可 能 な 非 常 に 簡 単 な フ ァ イ ル サ ー バ の 例 で あ る 。 も っ と 高 度 な 機 能 が 必 要 な 場 合 に は 、 SmartList を 調 べ て み る こ と を お 薦 め す る (SmartList は procmail の 配 布 場 所 と 同 じ 場 所 で 入 手 で き る )。 以 下 の リ ス ト に あ る よ う に 、 こ の フ ァ イ ル サ ー バ は 一 つ の リ ク エ ス ト に 対 し 最 大 で も 一 つ の フ ァ イ ル し か 送 り 返 さ な い 。 ま た 、 受 信 し た メ ー ル の 本 文 は 無 視 さ れ 、 Subject: 行 は 「 Subject: send file the_file_you_want」 (空 白 に は 意 味 が あ る ) と い う 形 式 に な っ て い な け れ ば な ら な い 。 フ ァ イ ル ネ ー ム が ド ッ ト (.) で 始 ま る フ ァ イ ル は 送 り 返 さ な い し 、 フ ァ イ ル サ ー バ の デ ィ レ ク ト リ ・ ツ リ ー の 外 部 に あ る フ ァ イ ル を 取 り 出 す こ と も で き な い よ う に な っ て い る (こ の 例 に 手 を 入 れ る 場 合 は 、 こ の 最 後 の 制 限 項 目 を 不 注 意 で 緩 め る こ と が な い よ う に 気 を つ け る こ と )。 : 0
* ^Subject: send file [0−9a−z]
* !^X−Loop: yourname [AT] your.address
* !^Subject:.*Re:
* !^FROM_DAEMON
* !^Subject: send file .*[/.]\.
{
MAILDIR=$HOME/fileserver # フ ァ イ ル サ ー バ の デ ィ レ ク ト リ に 移 動 :
0 fhw # 返 信 用 ヘ ッ ダ 作 成 と フ ァ イ ル 名 抽 出
* ^Subject: send file \/[^ ]*
| formail −rA "X−Loop: yourname [AT] your.address"

FILE="$MATCH" # 要 求 の あ っ た フ ァ イ ル 名 :
0 ah
| cat − ./$FILE 2>&1 | $SENDMAIL −oi −t } 以 下 の 例 は 、 特 定 の MIME 形 式 で エ ン コ ー ド さ れ て 届 い た plain−text の メ ー ル を 、 よ り コ ン パ ク ト な 8 ビ ッ ト 形 式 に 前 も っ て 変 換 す る 。 こ う す る こ と で 、 多 く の プ ロ グ ラ ム で 簡 単 に 使 用 し た り 表 示 し た り で き る よ う に な る 。 mimencode(1) プ ロ グ ラ ム は Nathaniel Borenstein の metamail パ ッ ケ ー ジ に 含 ま れ て い る 。 : 0
* ^Content−Type: *text/plain
{ :
0 fbw
* ^Content−Transfer−Encoding: *quoted−printable
| mimencode −u −q :
0 Afhw
| formail −I "Content−Transfer−Encoding: 8bit" :
0 fbw
* ^Content−Transfer−Encoding: *base64
| mimencode −u −b :
0 Afhw
| formail −I "Content−Transfer−Encoding: 8bit" } 以 下 の 例 は あ ま り 見 か け な い も の だ が 、 こ ん な 機 能 も こ と も で き る と い う 紹 介 で あ る 。 HOME デ ィ レ ク ト リ に ".urgent" と い う 名 前 の フ ァ イ ル が あ り 、 そ の フ ァ イ ル に (一 人 の ) 人 の 名 前 が 書 か れ て い て 、 そ の 人 か ら メ ー ル が 来 た 場 合 、 通 常 の メ ー ル フ ォ ル ダ に 入 れ る 代 わ り に $MAILDIR/urgent に 格 納 し た い と す る 。 こ の レ シ ピ で そ れ が で き る 。 (気 を 付 け る べ き 点 と し て 、 $HOME/.urgent の フ ァ イ ル サ イ ズ は $LINEBUF よ り 小 さ く す べ き で あ る 。 必 要 な ら LINEBUF の 値 を 増 や す こ と 。 )

URGMATCH=’cat $HOME/.urgent’ :
0: * $^From.*${URGMATCH} urgent

procmail の 全 く 別 の 使 い 方 と し て 、 特 定 の (外 に 出 て い く ) テ キ ス ト や メ ー ル に 条 件 に 応 じ て フ ィ ル タ を 適 用 す る と い っ た 方 法 が あ る 。 代 表 的 な 例 と し て は 、 外 に 出 て い く 全 て の メ ー ル を 通 す フ ィ ル タ で 、 必 要 な 場 合 の み MIME エ ン コ ー ド さ れ る よ う に す る も の が あ る 。 こ の 場 合 に は 、 パ イ プ の 中 段 と し て procmail を 起 動 す る こ と に な る 。

cat newtext | procmail ./mimeconvert | mail chris [AT] where.ever

mimeconvert rcfile に は 、 以 下 の よ う な ル ー ル が 入 る こ と だ ろ う (=0x80= や =0xff= に は 実 際 の 8 ビ ッ ト 文 字 を 入 れ る こ と ):

DEFAULT=| # い つ も の よ う に メ ー ル を 配 信 す る の で は な く
# 標 準 出 力 に パ イ プ す る :
0 Bfbw
* [=0x80=−=0xff=]
| mimencode −q :
0 Afhw
| formail −I ’MIME−Version: 1.0’ \
−I ’Content−Type: text/plain; charset=ISO−8859−1’ \
−I ’Content−Transfer−Encoding: quoted−printable’

関 連 項 目

procmail(1), procmailrc(5), procmailsc(5), sh(1), csh(1), mail(1), mailx(1), binmail(1), uucp(1), aliases(5), sendmail(8), egrep(1), grep(1), biff(1), comsat(8), mimencode(1), lockfile(1), formail(1)

著 者

Stephen R. van den Berg

<srb [AT] cuci.nl>

Philip A. Guenther

<guenther [AT] sendmail.com>