確認したい動作は、PHPで作ったメール送信プログラムが、決められた時間に自動実行することである。これについて、動作を分解して次のように確認する。
実はこれを発展させて、メールの自動着信処理をしようかと考えている。本来 、メール着信をトリガーとしてプログラムを起動できればよいのだが、利用している XREA サーバーではできないようだ。なので、cron を利用した時間スケジュールでプログラムを起動して処理する、という方法の確認だ。
1.サーバー上でPHPスクリプトの実行
先ずは、SSH でログオンしてコマンドを実行できるか? である。XREA は幸い、[管理メニュー]-[ホスト情報登録]で[SSH登録]を実行すれば、そのPCから TeraTerm の SSH でコンソール接続できる。
<?php echo "Language: " . mb_language() . "\n"; echo "Encoding: " . mb_internal_encoding() . "\n"; ?>
のような PHP プログラムをサーバーにアップロードし、動作を確認する。
xxx@sxxx:/public_html> php mblang.php
と実行すると、
Content-type: text/html Language: Japanese Encoding: EUC-JP
と表示された。ここで、「Content-type: text/html」の表示抑止は「-q」パラメータを追加すればよい。
2.PHPスクリプトでメールを送信する
レンタルサーバーによるのだろうが、メール送信ではまることが多いので、この部分だけ取り出して実験してみる。PHP のプログラムは次の通り。
<?php mb_internal_encoding('UTF-8'); $mailto = "xxx@xxx.xxx.com; $subject = "メール送信テスト"; $message = "メールの送信時間:\n" . date("Y-m-d H:i:s") . "\n\n受信OK?"; $headers = "From: " . mb_encoding_mimeheader("オレオレ、オレだよ") . "<xxx@xxx.net> \n"; $headers .= "Reply-To: " . mb_encoding_mimeheader("オレオレ、オレだよ") . "<xxx@xxx.net> \n"; $result = mb_send_mail($mailto, $subject, $message, $headers); ?>
スクリプトの実行を試してみる。
xxx@sxxx:/public_html> php -q tstml.php
メーラーで確認すると、無事受信できていることが確認できた。
3.決められた時間に自動送信する
上の PHP プログラムをシェルスクリプトで実行できるようにする。テキストエディタで次のファイルを作成する。
#!/bin/sh # cronml.sh /usr/local/bin/php -q /virtual/xxx/public_html/cronml.sh
このファイルをアップロードしたら、「chmod +x cronml.sh」として実行可能フラグをセットする。
後は、XREAの[管理メニュー]-[CRONジョブ]を設定してお終い。めでたし、めでたし。
ところで、phpの起動時に「-q」パラメータを渡さないと、「Content-Type: text/html」がメールで送信されるのでご注意を。