読者です 読者をやめる 読者になる 読者になる

マネー報道 MoneyReport

マネーにまつわる報道を取り上げ、自分の切り口で切り取り、噛み砕いてお伝えします。

CRON使って自動でメール送信!PHPのmb_send_mail関数で簡単♪

スポンサーリンク
あとで読む

CRON

本日もWebサイト開発のお仕事のお話です。

昨夜CRONを初めて使ってみまして、レンタルサーバー上からPHPの実行ファイルを定期実行させる事に成功しました(^-^)v

CRON試してみる!
まずは簡単なPHPファイルのサンプルを作って、CRON上から呼び出してみたいと思います。
いきなりDB更新は怖いので、ファイルを出力するのをやってみようかと。


「sitemap.xml」というファイルを出力するものです。
早速レンタルサーバー上にアップして動作させてみたいと思います!
PHPファイル名は「test_cron01.php」という名前にします。


さぁ、2分経過しました!
FTPでディレクトリを確認すると・・・
「sitemap.xml」ファイルが出力されていました!
無事に動きました!


CRONでPHPファイルを定期実行したい!レンタルサーバー上で動作検証! - マネー報道 MoneyReport

という感じでechoやprintで何かを出力してもCRONだとブラウザ上に何か表示される訳じゃないので、テキストファイルを出力してみました。
案外簡単に動いてくれたので良かったです(^-^)v

複数のphpファイル

昨日調べた中では、参考にしたサイトの中で「複数のphpファイルが、相対パスでincludeやrequire_onceとかされている場合、エラーで動かない。」という記載があったので紹介していたのですが、
最近はそんな事はないというブコメを頂きました(^-^;

id:photoblgさん
外部から読み込んでも落ちたことはないですね。それ以外の問題じゃないですか?

CRONで外部のphpファイルをincludeしたりrequire_onceしたりしても特段問題ないんですね~(^-^)v

私の使っているレンタルサーバーは、Webサイト公開用ディレクトリとCRON動作用ディレクトリが全く別の階層に置く様に指定されていたので、Webサイト公開側のphpファイルをincludeしたりするのはやめて、1PHPファイルで完結する様に処理を記載して実行する様にして作りました。
なので、上記の件に関しては自分自身で試していなかったので、非常に参考になりました(^-^)/

最近のCRONで動かすPHPファイルでは相対パス表記でincludeやrequire_onceをしても問題ないそうです。

メール送信

CRONを使った定期実行でもう1つ行いたかったのは「メール送信」になります。

Webサイトのデータ更新後に通知をメールで送りたかったので、それをCRONで定時実行してメール送信したいのです。

しかし以前、PHPでメール送信周りを実装した時には「PEAR」をインストールしたりと結構面倒なことをしたので気が重い状態で作業を始めました(-_-;

以前PEARを使った時の話(サブブログに掲載)が下記。

「うーん、どうかな~」

と思いながらPHPの参考書である「PHP逆引きレシピ 第2版」を開いて探していたら・・・

PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)

PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)

611ページの「7.8 メール処理」という章があるじゃないですか!!!

・・・(読み込み中)・・・

ふむふむ。
「メールを送るにはmb_send_mail()関数を使用します。」
とのこと!

「あれ?PEAR使わなくて良いの!?」

との事で、関数1つで簡単にメール送信ができるようです!

なんだ~、それなら簡単に実装出来るじゃないですか!

mb_send_mail関数

本のソースコードを参考に組んだソースが下記。

<?php
	mb_language("Japanese");
	mb_internal_encoding("UTF-8");

	$to      = 'to@hoge.ne.jp';
	$subject = 'テストメール';
	$message = 'これはテストです。';
	$headers = 'From: hoge@hoge.com'."\r\n";

	if (mb_send_mail($to, $subject, $message, $headers))
	{
	    echo "メールが送信されました。";
	}
	else
	{
	    echo "メールの送信に失敗しました。";
	}
?>

で、試しにWebサイトに仮置きして実行してみると・・・

f:id:MoneyReport:20160911162012j:plain

無事にメールが届きました(^-^)/

ただ、このメール送信怖いですね。
Fromのメールアドレスって適当に指定しても、メールサーバーとか通さずに送れちゃったんですよ(-_-;

こんな簡単にメール送信できるなら、そりゃあスパムメールもなくならない訳ですね。
簡単にメアド偽装ができちゃいますもんね、これって。
まぁ色々とレンタルサーバーとかでも対策は練られているんでしょうけど、大量のメール送信が実行されたらスパムメールとして送信できなくする、など。

いずれにしても、これでCRONでPHP実行ファイルから簡単にメール送信できる事がわたっかので収穫でした(^-^)v