• 締切済み

Procmailによる存在しないアカウントの処理

存在しないアカウントにメールが来た時に特定の処理を行うことはできますか。 procmailを使用し、存在するアカウント(root)にメールが来た時に特定の処理を行うことはできました。 存在しないアカウントで実験すると、procmailの処理は行われず、 The error that the other server returned was: 553 553 5.3.0 <XXXXXXXX@XXXXX.com>... No such user here (state 14). となりました。 存在しない特定のアカウント(正規表現でprocmailに記述)にメールが来た時に、「ユーザ存在しません」とエラー処理させず、procmailに記述した処理を行うことはできるでしょうか。 メール受信のみのために大量のアカウントを作成するのを避けたいのが理由です。 必ずしもprocmailを使う必要はありません。エラーを返さずにスクリプトを起動させたいです。 どうぞよろしくお願いいたします。

みんなの回答

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 自ドメイン宛の存在しないメールアカウントに対してどういう振る舞いをするのかはprocmailではなくMDAが責任を負う作業だ。procmailはMDAじゃないのかと言われたら言い返せないが、今はそういう話ではあるまい。  PostfixというMTA&MDAを例に説明すると、Postfixがメールを受け取ると、エイリアスやバーチャルマップ、/etc/passwdなどを見て自分が最終受け取り先であるか判断する。で、自分が受け取るものだと判断されたあかつきには誰宛なのかを探す(passwdに登録されている/home/anmochi/Maildirに投げれば良いのか、virtualに登録されている/var/vmailbox/shigeo@examples.com/Maildirに置けば良いのか)。  ところで、存在しないメールアドレス宛のメールはuser unknownでバウンスされるべきであり、受け取りたいアドレスはきちんと全て登録しておくべきだ。  と言いつつなんだが、存在しないメールアカウントをバウンスせずに他の場所に転送する事は大抵のMTAでできるし少なくともPostfixではできる(see also: luser_relay, local_recipient_maps)。なのでこの機能を使っても良いだろう。  質問者の言う正規表現で表現される特定の大量のメールアカウントというのが機械的に生成できるようなアカウント(例えばmailbox0000@examples.com~mailbox9999@examples.com)である時には、/etc/postfix/aliasesにずんどこ追加して受け取りたい一つのメールボックスに全部転送してやれば良い。この場合もエンベロープが変わるだけでメールの中に書かれているTo:ヘッダーは変わらないので正しく受け取り先のprocmailで処理できる。

関連するQ&A