サーバー

PHPでメールの自動送信を試してみる

確認したい動作は、PHPで作ったメール送信プログラムが、決められた時間に自動実行することである。これについて、動作を分解して次のように確認する。

  • サーバー上でPHPスクリプトを実行する
  • 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」がメールで送信されるのでご注意を。