とあるメールを携帯に転送する必要があって色々やっていたが、サーバに.forwardでそのまま携帯のアドレスを書いてしまうとFrom:行が発信元のアドレスのままになり、携帯のドメイン制限にひっかかってしまう可能性がある。また転送するメールの選別も行いたかったのでprocmailをいじってみた。

 procmailを通す方法は既にあちこちで紹介されているので省略して、肝心のフィルターは、

:0 H
*p1* ^Subject:.*\/.*
*p2* ? echo "$MATCH" | nkf -mw | sed 's/:space://g' | egrep -i 'ほにゃらら'

~/mforward

という感じで。やっていることは、条件文の1行目でヘッダーのSubject:行からsubjectだけを抜き出して変数MATCHに保存し、2行目でMIMEデコードした上で不要なスペースを取り除いてからegrepで特定の文字列を検索し、見つかったならmforwardというスクリプトにメール(ヘッダも含め)を流し込んでいるだけ。
 スクリプトのほうでは、

#!/bin/bash
add='携帯のメアド'
cat > mtemp
title=`grep "^Subject: " mtemp | cut -d " " -f 2-200 | nkf -mw`
grep -A 99999 "^$" mtemp | mail -s "$title" $add

受け取ったメールからもう一度Subjectを抜き出してMIMEデコード。本文だけを携帯にsubject付きで送りなおし。この時点でFrom:行はこのサーバのアカウントになるので、携帯のドメイン指定でこのサーバだけを指定しておけばいい。
 送りなおすだけならprocmailrc内でも出来るが、本文から必要な情報だけを切り出すとか将来のことも考えてスクリプト化。MIMEデコードはUTF-8に変換するのがミソ。