Postfixでメールを受信できるように設定してメール受信と同時にプログラムを起動

postfix既存システムを移行するときに、メール受信と同時にPHPプログラムを実行していたので、移行先でも同じように設定したときの覚書。

環境: CentOS 6.6, postfix 2.6.6

 

目次

  1. postfixをインストール
  2. ファイヤーウォールの設定
  3. メールアカウント作成
  4. メール送信テスト
  5. 不正中継されないかチェック
  6. メール到着と同時にPHPプログラムを起動
  7. メールアドレスを正規表現で指定する

 


1.postfixをインストール

YUM経由でインストールして設定ファイルを編集。
# yum install postfix
# vi /etc/postfix/main.cf

mydomain = hoge.com
myhostname = hoge.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
relay_domains = $mydestination
home_mailbox = Maildir/

postfixを起動。自動起動するようにしておく。
# /etc/rc.d/init.d/postfix start
# chkconfig postfix on

 


2.ファイヤーウォールの設定

メール受信するために25番ポートを開ける。
# vi /etc/sysconfig/iptables

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
COMMIT

 


3.メールアカウント作成

※他のメールアドレスに転送したり、プログラムを起動するだけならアカウントを追加する必要ない。/etc/aliasesに編集するだけでいい。main.cfに「local_recipient_maps=」を指定する必要がある。

 

受信するメールアカウントを作成。Maildirはメール到着したら自動で作成される。
# useradd -s /sbin/nologin info

「info」はデフォルトで転送される設定になっているので、設定ファイルを編集。
# vi /etc/aliases

#info:          postmaste

postfix再起動
# /etc/rc.d/init.d/postfix restart

 


4.メール送信テスト

まずはローカルで配送されるか。
# mail info

外部からもメール送って配送されるか確認する。

infoに届いたメールを確認
# mail -f /home/info/Maildir/

「mail」コマンドは「& help」でヘルプを参照。

<よく使うmailコマンド>
リスト:
& h

転送:転送したいメールを表示してから転送先を入力
& 1
& forward
hoge@gmail.com

全削除:
& d *

保存して終了:
& q

 


5.不正中継されないかチェック

下記サイトでチェックできる。

 


6.メール到着と同時にPHPプログラムを起動

特定のメールアカウントを作って、そのアカウントへメールが来た時にはPHPプログラムで自動返信する。参考サイトは下記

まずはアカウント作成。
# useradd -s /sbin/nologin auto_reply

あとで気付いたけど、プログラムを起動するだけなら、アカウントを作成する必要はない。/etc/aliasesを編集するだけでいい。main.cfに「local_recipient_maps=」を指定する必要がある。

/etc/aliasesを編集
# vi /etc/aliases

#
# Customize
#
auto_reply: "| /usr/bin/php /pass/to/file.php"

再読み込み
# /etc/rc.d/init.d/postfix restart

ちゃんとログ出力する処理を書かないとデバッグが大変。

 


7.メールアドレスを正規表現で指定する(2015/05/15追記)

/etc/aliasesのメールアドレスを正規表現でも指定してプログラムを起動するための設定。下記サイトを参考に。

# vi /etc/postfix/main.cf

local_recipient_maps =
virtual_alias_maps = regexp:/etc/postfix/virtual_maps

「auto_reply」で始まるメールアドレスは全部auto_replyとして処理
# vi /etc/postfix/virtual_maps

/^auto_reply.*(@.*)?$/ auto_reply

設定再読み込み
# /etc/rc.d/init.d/postfix reload

 

< Related Posts >