postfixでメールアプリケーションを扱うときの注意事項
いいめものように、メールを受け取ってアレコレするメールアプリケーションを書くことはよくあるかと思います。
メールサーバとしてpostfixを使うと、こんな具合で実現できます。
#cat /etc/aliases : test:"|/var/mailApp/test.rb"test@example.comでメールを受け取ったら/var/mailApp/test.rbを起動する、という具合です。
それはいいのですけど、この状態でtest.rbでエラーが起きると、メール送信者宛にバウンスメッセージというのが送付されます。
This is the Postfix program at host snares.example.com.
:
The Postfix program
>test@example.com< : Command died with
status 1: "/var/MailApp/mailserver/test.rb". Command output:
/usr/lib/ruby/1.8/logger.rb:518:in `initialize': Permission denied -
/var/MailApp/mailserver/../log/MailServer.log (Errno::EACCES)
from /usr/lib/ruby/1.8/logger.rb:518:in `open' from
/usr/lib/ruby/1.8/logger.rb:518:in `open_logfile' from
/usr/lib/ruby/1.8/logger.rb:487:in `initialize' from
/usr/lib/ruby/1.8/logger.rb:263:in `new' from
/usr/lib/ruby/1.8/logger.rb:263:in `initialize' from
/var/MailApp/mailserver/../common.rb:42:in `new' from
/var/MailApp/mailserver/../common.rb:42 from
!!!エンジニアにとっては背筋の凍り付くような内容です。メールアプリケーションのファイル構成から使っているモジュール、自分がどんなミスをしたかまで送信者に筒抜けになってしまいます。
とりあえず、test.rbの内容をこうしましょう。
begin 元のコード rescue => e exit(-1) end
これで、test.rbがエラーを外にはくことはなくなるので、バウンスメールの内容も、ずいぶん穏当なものになります。
>test@example.com< : Command died with status 255: "/var/MailApp/mailserver/test.rb" Action: failed Status: 5.0.0 Diagnostic-Code: X-Postfix; Command died with status 255: "/var/MailApp/mailserver/test.rb"
ちなみに、posfix 2.3から、バウンスメールの内容をカスタマイズできるようになるらしいです。
Postfix manual - bounce(8)
メールサーバのバージョンアップが待ち遠しいなんて、久しく味わっていない感覚です。
カテゴリ:
技術メモ
トラックバック(0)
このブログ記事を参照しているブログ一覧: postfixでメールアプリケーションを扱うときの注意事項
このブログ記事に対するトラックバックURL: http://mogya.com/mt/mt-tb.cgi/561
すっごいいまさらですけど、もっといい方法を教えていただきました。
エラーを抑制するとか | 眠る開発屋blog
test:”|/var/mailApp/test.rb 1>/dev/null 2>&1″
そういわれて見りゃそうですよね。