空メールを使ったユーザー登録

By nakayama - 08/10/03 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

会員登録制のサイトを作ったが携帯サイトだとこのような事が良く起こります。

  • 携帯アドレスを入力してもらう形にすると長いし間違えやすい!
  • メール配信をしてもユーザーがドメイン解除しておらずメールが届かない!

この2つの問題を解決する為に携帯サイトではよく使われる空メール登録の作り方を紹介します。

まず、空メールの仕組みを作るにはPHPの他にメールサーバー(sendmail, postfix, sendmail etc)の構築が必要になります。

メールサーバーの構築が済んでない方は構築から先に行って下さい。

※初めてサーバーを構築される場合、おそらくPHPの空メールの処理よりもメールサーバーの構築の方が難しいと思います。

メールサーバー構築方法はこの稿の本題ではないので割愛させてもらい、

qmail + vpopmail でメールサーバーを構築した事を前提で進めていきます。

まずは空メール用のメールアカウント(reg@hogehoge.com)を発行

ドメインの発行

/home/vpopmail/bin/vadddomain hogehoge.com

※パスワードの入力が求められますのでパスワードを入力

メールアカウントの発行

/home/vpopmail/bin/vadduser  reg@hogehoge.com

※こちら「もパスワードの入力が求められますのでパスワードを入力

メールアカウントが発行出来たら、次はreg@hogehoge.com で受信したメールの内容をプログラム側に渡す処理(「パイプ」と呼ばれます)を記述します。

/home/vpopmail/domains/hogehoge/reg/のディレクトリにに「.qmail」の名前でファイルを作成

|/usr/local/bin/php -q 処理を渡すプログラムのパス

例えば/home/hogehoge/mail/reg.php のプログラムに処理を渡したければ

|/usr/local/bin/php -q /home/hogehoge/mail/reg.php

と記述保存します。

今度はPHP側でメール内容を受け取る処理ですが、標準入力でデータが渡されてきますので解析・分解する処理が必要です。

メールの分解にはPEARのMail_Mimeが便利ですのでこれを使います。

[root@host]#pear install Mail_Mime

でMail_Mimeをインストール

//PEAR Mail_Mime読み込み
require_once('Mail/mimeDecode.php');

//標準入力で渡されて来たメールの内容を変数に格納
$mailData = file_get_contents("php://stdin");

//パラメータの設定
$params = array(
    'include_bodies' => true,
    'decode_bodies'  => true,
    'decode_headers' => true
);

//Mail_Mime でメールの内容を解析・分解
$decode = new Mail_mimeDecode($mailData);
$mailInfo = $decode->decode($params);

//ヘッダー情報取得(To:やFrom:アドレスなどの情報が入ります)
$headers = $mailInfo->headers;

//本文の内容取得
$body = $mailInfo->body;

後は解析したデータを会員登録処理すれば空メール登録の出来上がりです。

エラーの確認

空メールの場合、処理が間違っていてエラーが出てもエラーメッセージをブラウザでは確認出来ません。
最初はここで結構手間取ることが多いです。

メールログにエラーが出力されるのでメールログを確認するか
またはPHPのソースの中に

ini_set('log_errors', '1');
ini_set('error_log', エラーログのパス);

と記述してエラーを確認出来るようにしてください。