HOME  WebAp  メール配信時のPHPスクリプト起動(Sendmail編)

概要
メールがサーバに配信(受信)された時にPHPスクリプトを起動しメールを自動で処理する方法を紹介します。
動作環境
RedHat Linux 8.0, sendmail, PHP CLI 版を使用しました。
設定例1 (運用環境用)
  1. PHPスクリプトを用意する

    FTPなどでスクリプトを転送し /home/someone/php/mailreply.php に用意する。
    ※スクリプトの先頭行に #!/usr/local/bin/php を1行加えてください。
     
  2. sendmail から起動できるように smrsh へ PHPスクリプトをシステム責任者(root)で登録する
    cd /etc/smrsh
    cp /home/someone/php/mailreply.php ./
    chmod 755 mailreply.php

    * smrsh (SendMail Restricted Shell) sendmail用に制限されたシェル

  3. PHPスクリプトへのメール転送をシステム責任者(root)で設定する
    vi /etc/aliases
    join:       "| mailreply.php"
    someone:    someone,"| mailreply.php"
    
    newaliases

    メール転送のみを行うメール宛先 join は useradd コマンドでユーザ登録されている必要はありません。

設定例2 (開発環境用)
  1. sendmail から起動できるように smrsh へ PHP CLI 版をシステム責任者(root)で登録する
    cd /etc/smrsh
    ln -s /usr/local/bin/php
  2. PHPスクリプトへのメール転送をユーザ(someone)で設定する
    cd ~/
    vi .forward
    someone,"| php /home/someone/php/mailreply.php"
    chmod 644 .forward
  3. PHPスクリプトをユーザ(someone)で設置する

    FTPなどでスクリプトを /home/someone/php/mailreply.php にコピーする
動作確認
宛先の join@ooo.jp や someone@ooo.jp にメールを送って処理されれば設定OKです。
補足
  1. コマンドラインで単体テスト

    PHPスクリプトにメールソースを標準入力で渡して動作確認ができます。
    メールソースはMS-Outlook Express などから「名前を付けて保存(*.eml)」しFTPでアップロードします。
    cat mail.eml | php mailreply.php

    また、スクリプト内で echo, print を使うと標準出力されますのでコマンドラインでもちょっとしたデバッグができます。

△PageTop