メール受信時にプログラムを起動しようと思い、いろいろ調べたところSendmailよりもPostfixの方が情報が多かったため、SendmailからPostfixに変更しました。いくつか設定に関する注意点がありましたので書きたいと思います。
◆MTAの変更
まず、SendmailからPostfixに変更するのにPostfixをインストールすれば終わりだと思っていましたが、明示的にMTAを変更する必要がありました。下記のコマンドでMTAを変更します。
# update-alternatives --config mta
画面に下記のメッセージが表示されますので、変更したいMTAの番号を入力します。今回は2を入力することになります。
There are 2 programs which provide 'mta'. Selection Command ----------------------------------------------- * 1 /usr/sbin/sendmail.sendmail + 2 /usr/sbin/sendmail.postfix Enter to keep the current selection[+], or type selection number: 2
これでデフォルトのMTAがPostfixに変更されました。
◆hashのデータベース作成方法
rpmでインストールしたPostfixで「fatal: unsupported dictionary type: pcre」というメッセージが表示されていました。pcreがサポートされていませんということですので、hashを使うことにしました。
/etc/postfix/main.cfで下記のようにhash:と指定します。
virtual_alias_maps = hash:/etc/postfix/virtual transport_maps = hash:/etc/postfix/transport_maps
上記の設定の場合はpostmapでデータベースを作成する必要があります。下記のコマンドでvirtual.db、transport_maps.dbが作成されます。
# postmap /etc/postfix/virtual # postmap /etc/postfix/transport_maps
設定ファイルを読みこませるためpostfix reloadを実行します。
◆ポートの設定
メール受信というとPOP3というイメージがあり、受信用に110番ポートを開けました。外部のクライアントからメールを送信しないため、25番ポートは閉じてiptablesを設定しましたが、何度外部からメールを送信してもPostfixで受信してくれません。
メールサーバの仕組みをもう一度調べ直しました。メール受信は25番ポート(SMTP)で行ない、保存されているメールをクライアントPCやWebメールで受信するときのポートがPOP3(110番ポート)やIMAP(143番ポート)等ということですので、メールを受信する場合は25番ポートを開ける必要がありました。
今までメールサーバを構築するときは、クライアントのメーラーで送受信できるような設定をしていたため、25番と110番の両方を開けていました。内部からのシステムメールを送信する場合はポートを開ける必要はありません。しかし、今回のように外部のクライアントから送信しない、外部のクライアントで受信しない、内部からのメールを送信する、外部からのメールを受信するというメールサーバを考えて、初めてメールサーバの仕組みがわかりました。
ピンバック:pear install Mail_MimeでmimeDecode.phpがインストールされない | 菊地崇仁ブログ「ポイ探社長のブログ」
ピンバック:Postfix + Postfix Admin + MySQLでメールを管理する | 菊地崇仁ブログ「ポイ探社長のブログ」
ピンバック:Postfixでメール受信後にPHPプログラムで処理を行う(1/3) | 菊地崇仁ブログ「ポイ探社長のブログ」