メール受信をトリガーにしてPHPを起動させる方法<kagoya版>

メール受信をトリガーにして稼働させるスクリプトをPHPで組みました。kagoyaの専用サーバープランの情報が少ないため、シェアしますね。

こんにちは、カグア!です。PHPやJavaScriptでコードを組んで、自作ツールをいろいろと作ってます。

以下、kagoyaの専用サーバープランでの環境になります。

>>よくある質問 – KAGOYA Internet Routing サポートサイト – 届いたメールをウェブサーバーのプログラムで処理したい

メール受信をトリガーにする、とは

最初は、メール転送をさせるときの、本文に修正を加えて、転送できないかなと調べていました。

しかし、調べていきますと、メール受信をトリガーにして、本文を取り出して加工して送信するPHPプログラムを起動させる、という流れがわかりやすいということなので、早速作ってみました。

メール本文を操作することでハマったこと

メールトリガーで発火させること自体は、前述のkagoyaのヘルプに書いてあるとおりです。ハマったのは契約自体のアカウント名を記述であり、メール受信起動させるメールアカウントではない、という点。

2015年8月1日:kagoya専用サーバープランでの流れです。

1.転送用メールアカウントを作る

2.サーバー情報を調べる
kagoyaのサーバー情報を調べる

3.転送先をサーバー情報のサーバー由来のメールアドレスにする
転送設定1kagoya

4.public_htmlフォルダの外に、.forward ファイルに起動コマンドを書いておく
(起動させたいphpプログラムのパスなど)

という流れです。ヘルプには、mailprocも書くとありますが、.forwardだけでも大丈夫です。

.forwardの記述例

.forwardファイルはテキストエディタなどで書くテキストファイルです。通常はメール転送に関することを書きますが、ここに、起動させるプログラムと、起動のためのデータをどう受け渡すか、という記述をしておきます。

"|/usr/local/bin/php -q /home/*****/hogehoge.php"
/dev/null

*****はアカウント名を記述してください。これで、hogehoge.phpがメール受信をトリガーにして、起動します。

>>メール到着で自動的にCGIを実行 – 山崎はるかのメモ

パイプをつけておきますと、データを受け渡してくれます。

kagoyaではPEARは標準的なものだけ

カゴヤ

専用サーバープランでは、コントロールパネルから利用可能なPEARライブラリがわかります。

phpinfo()

などで見てみますと、PEARのインクルードパスもわかります。php.ini に記述できないため、phpソースコードに以下のように書いても大丈夫です。

ini_set('include_path', '.:/usr/local/php5.4/pear');

kagoyaでPEARを使う方法

前述で調べた基本のPEARライブラリでしたら、すぐに使えます。ライブラリまでのパスがとおっていますので、PHPソース内に、以下のように書けばすぐに使えます。

require_once("Mail.php");

ただし、ネット上の記事にあるように、追加ライブラリをコマンドラインから気軽にインストールする、ということはできないため、各自で工夫しないといけません。

メール転送で内容をいじって転送するコード

//とりあえず、要点のみ記述します。
//このままでは稼働しませんので、実装時にカスタムしてくださいね。

//メール内容を取得
$html = file_get_contents('php://stdin');

//ヘッダ情報をデコードして取得
$subject = mb_decode_mimeheader($html);

//必要文字列を抽出。タイトルを取得できます。
preg_match("/(.*)(Subject:)(.*)/is",$html,$body);

$to="xxx@hoge.com";

//preg_matchで抽出したタイトルの配列を指定
$title = $body[3];

//ヘッダを指定
$header_info="From: hoge@hoge.com"."
Content-Type: text/html;charset=ISO-2022-JP-MS
X-Mailer: PHP/";
mb_internal_encoding('UTF-8');
mb_language('japanese');

//メール送信、いちおうエラー処理も。
if(!mb_send_mail($to,$title,$body,$header_info)){
 echo "Send Error...";
}

とりあえず、そのままでは動きませんが、ポイントとなる関数がわかるだけでも有用かと思いますので、ご参考になれば幸いです。

まとめ

メールは文字コードの処理など、面倒な手順が多く、テスト環境構築も面倒ですよね。

ただ、完成しますと、メールという身近なツールをUIにできますので、いろいろと使い勝手は良いかと思います。

Macでの情報がほんと多いんですよねえ。Windows開発マンは、なんかキツクなってきますね。というかスキル不足なのだからでしょうけど。

完成までがんばるぞ!

大人の語彙力ノート 誰からも「できる! 」と思われる | 齋藤 孝

・ ・ ・ ・ ・

>>安っ!アマゾンで半額以下になっている食品タイムセール
セール特設ページを見る

↓↓↓無料のニュースレターを配信中です

PHPは楽しいね!