PHPを用いて指定日時にメール送信

こんにちは。ガラパゴス社 web-teamの[twitter:@yamaD_426]です。
前回はメール送信のMercuryによるサーバー設定について書きましたが、今回はphp.iniの設定と実際のソースコードについて書きたいと思います。

php.iniの設定

まずは、php.iniの[mail function]について以下の部分のコメントアウトを外した後、

For Win32 only.
SMTP = localhost
smtp_port = 587

と設定します。
このように設定することによって、587番ポートを経由して local→プロバイダ→yahooSMTPサーバー という一連の流れを確立することができます。

次に、指定時間にメール送信するために指定時間をタイムスタンプで取得するため、[Date]について

date.timezone = Asia/Tokyo

と設定しておきましょう。

php.iniについては以上です!

FireFoxプラグイン

指定時間に送信するには、cronを書くことが一般的であるそうですが、今回はFireFoxreload 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でした!