メール受信をトリガーにしたPHPスクリプトの作成と基本的な処理方法
作成日:2009.04.03
PHPを用いて、メール受信をトリガーに自動処理を行うスクリプトの作成手順を解説します。PEARのMail_mimeDecodeパッケージを活用し、メールの解析と必要なデータの抽出を行う方法をご紹介します。
error この記事は最終更新日から17年以上が経過しています。
以前、メール受信時に perl スクリプトを起動して自動処理させる方法という記事を書きましたが、それのPHP版です。
上記のエントリでも書いていますが、メール受信時に何らかの処理を行なうプログラムを作る場合、
- 特定のメールアカウントにメールが届いた際に、何らかのプログラムが起動するように設定する
- そのプログラムを書く
という2つのステップが必要ですが、そのうち1番目のステップに関しては、perl だろうが PHP だろうが、全く関係ありません。
なので、1ステップ目のメールサーバー側の設定に関しては、メール受信時に perl スクリプトを起動して自動処理させる方法を参照してください。
メールを処理する PHP スクリプトの書き方
PHP というと、Webアプリケーションに特化した言語、というイメージがありますが、もちろん perl と同じように、シェル的な使い方もできます。
メールを受け取った PHP スクリプトで、標準入力の内容を読めば、メール受信時の処理を行なえます。
ちなみに PHP の場合、PEAR の Mail_Mime というパッケージを使うと、メール受信時の処理が非常に簡単になります。
PEAR については、さくらのレンタルサーバーに PEAR をインストールするも参考にどうぞ。
#-- PEAR の Mail/mimeDecode.php を読み込む
require_once 'Mail/mimeDecode.php';
#-- メールデータ取得
$params['include_bodies'] = true;
$params['decode_bodies'] = true;
$params['decode_headers'] = true;
$params['input'] = file_get_contents("php://stdin"); // 標準入力
$params['crlf'] = "\r\n";
$mail_data = Mail_mimeDecode::decode($params);
#-- From フィールドの取得
$FromAddress = $mail_data->headers['from'];
#-- To フィールドの取得
$ToAddress = $mail_data->headers['to'];
#-- Subject フィールドの取得
$Subject = $mail_data->headers['subject'];
$Subject = mb_convert_encoding($Subject,"UTF-8","JIS");
#-- 本文の取得
$MailBody = $mail_data->body;
$MailBody = mb_convert_encoding($MailBody,"UTF-8","JIS");
後は、取得したデータを元に、色々処理すれば良いです。
なお、添付ファイルつきのメールの場合、本文を上記の方法で取得できないと思います。あくまでテキストメールの場合の例ですので悪しからず。
メール受信時の自動処理やシステム連携でお困りの方へ
本記事で紹介したメール受信時にPHPスクリプトを起動する方法をはじめ、自動処理の設計や実装のご相談を承っております。
メール解析やデータベース連携など、お気軽にご相談ください。
奈良市を拠点に、27年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。
これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。
【制作会社・企業様向けサポート】
Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。
ぜひ、プロフィールやWeb制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。
XAMPPのPHP更新時にphp.iniをどう移行する? 引き継ぐ設定と確認方法
2026.11.12
XAMPPでPHPを更新する際のphp.iniの移行方法を解説します。旧設定と新しい設定例を比較し、引き継ぐ項目や変更が必要な項目を整理。拡張・パス・エラー出力・アップロード・セッションなどの注意点と、CLI・Apacheそれぞれで設定の反映を確認する方法を紹介します。
PHPでフリガナ欄の入力を検証する:全角ハイフン・長音・カタカナの扱い
2026.11.11
住所のフリガナ欄で、全角ハイフンを入力したつもりなのにエラーになることがあります。見た目が似たハイフンや長音の違いを確認し、PHPでカナや英数字を変換してから検証する方法を紹介します。入力を保持したエラー表示や、変換後の値を確認する方法も解説します。
ChatGPTからPHP製MCPへOAuth接続する:Auth0・XServerでつまずいた点と対処法
2026.11.10
PHP製MCPにAuth0のOAuth認証を追加し、ChatGPTから接続した際の記録です。OAuth設定の検出、APIへの権限付与、ログイン後のツール検出失敗を順に切り分け、最後に原因となったAuthorizationヘッダーの伝達問題と対処法を紹介します。
mPDFでPDFが開けない・出力できないときの確認方法:BOM・空白・警告を切り分ける
2026.11.07
mPDFで出力済みエラーが出たり、PDFが開けなかったりするときに、生成処理とHTTPでの返却を分けて原因を調べる方法を紹介します。BOM・空白・デバッグ出力・PHP警告の混入を比較し、出力バッファーやdebug設定による違い、ログで出力元を特定する手順を解説します。