PHPを用いて指定日時にメール送信
こんにちは。ガラパゴス社 web-teamの[twitter:@yamaD_426]です。
前回はメール送信のMercuryによるサーバー設定について書きましたが、今回はphp.iniの設定と実際のソースコードについて書きたいと思います。
php.iniの設定
まずは、php.iniの[mail function]について以下の部分のコメントアウトを外した後、
と設定します。
このように設定することによって、587番ポートを経由して local→プロバイダ→yahooSMTPサーバー という一連の流れを確立することができます。
次に、指定時間にメール送信するために指定時間をタイムスタンプで取得するため、[Date]について
date.timezone = Asia/Tokyo
と設定しておきましょう。
php.iniについては以上です!
FireFoxプラグイン
指定時間に送信するには、cronを書くことが一般的であるそうですが、今回はFireFoxのreload everyというプラグインを用いて、
PHPファイルを10秒ごとに自動更新することによって指定時間送信を目指します。
サーバー側では常にmail.phpを開いていると仮定しました。
実際のメール送信PHPコード
以下に、実際に書いたソースコードを記載します。
よく見ると何も難しいことはしていないのですが、初めてのPHPに悪戦苦闘...
E_NOTICEは見えないことにしましたw
<?php #関数名を短くするために指定 function escape($a) { return mysql_real_escape_string($a); } #エラーからE_NOTICEを削除 error_reporting(E_ERROR | E_WARNING | E_PARSE); #文字化け防止 mb_language("ja"); mb_internal_encoding("UTF-8"); #データベースと接続したりなど session_name('KADAI'); session_start(); $db=mysql_connect('localhost','root','') or die ('DB接続に失敗しました'); mysql_select_db('kadai',$db) or die ('Table接続に失敗しました'); $result = mysql_query( 'set character set utf8' ) or die(mysql_error()); #とりあえずひたすらSQLと連想配列で値をとってくる $id=mysql_query("select user_id from sessions where session_id='".escape(session_id())."'",$db); $user_id=mysql_fetch_assoc($id); $maila=mysql_query("select mail_address from users where id='".escape($user_id["user_id"])."'",$db); $mail=mysql_fetch_assoc($maila); $namea=mysql_query("select name from users where id='".escape($user_id["user_id"])."'",$db); $nameb=mysql_fetch_assoc($namea); $result=mysql_query("select time from medicines where user_id='".escape($user_id["user_id"])."' order by time",$db); #複数時間指定に対応 while ($time=mysql_fetch_assoc($result)) { #時間をタイムスタンプでとってくる $drinktime=$time["time"]; $sabun=strtotime($drinktime) - time(); #時間差が60秒を切った場合に if ($sabun<60 and $sabun>0){ $mailto = $mail["mail_address"]; $subject = "ガラパゴス課題"; $name=$nameb["name"]; $site_name = "ガラパゴス課題"; $support_mail = "yamad_426@yahoo.co.jp"; $article = " $name 様 $site_name へのアクセスありがとうございます。 登録メールアドレス:$mailto 何かあったら $support_mail まで ご連絡いただきますよう、よろしくお願いします。 "; $message = wordwrap($article, 64,"<br />\n"); $headers = "From: $support_mail \r\n" ; #メール送信 mb_send_mail($mailto, $subject, $message, $headers); } } ?>
研修課題では以上のようなソースコードを書いてみたのでした。
webプログラミングは今回が初だったので、冗長になりながらもなんとかメール送信機能が完成したのでした^^
MercuryやPHPの超簡単な設定に延々と悩まされたのもいい思い出です。
今後もPHPで何かやってみたいなーと思います。
以上、yamad_426でした!