空メールと自動返信(1)
今回は、ファミリーレストランの会員登録などで行われているいわゆる「空メール」を携帯から送ってもらい即座にメールを返信して会員登録してもらう手順について説明します。
やはり一番の疑問は、「空メール」を送ってもらった後に瞬時にメールを返信する方法ではないでしょうか?
よく見かけるのですが、どのような仕組みでメールが返信されてい来るのか分からないという方も多いと思います。
「空メール」を送信すれば深夜でも早朝でも、すぐにメールが返信されてきますので、手作業でやっているわけではないことは想像がつくと思います。
「そんなことは百も承知」という方も多いと思いますが、真剣に人が作業していると思っている方もいるのです。
メーラーのような何か専用のソフトウェアを利用してメールを返信していると思っている方もいますが、結論から申しますと、サーバーがすべて自動的に処理しているのです。
つまり、「空メール」が送られてくるとメールを受信して、自動的にメールを返信しているので、人の手が介在していることはありません。
サーバーが正常に動作していれば、瞬時にメールが自動返信されるのです。
なぜ「空メール」なのか
ところで、なぜ「空メール」を送信して自動返信を受信するような手間のかかることをしているのかという疑問はないでしょうか?
QRコードを読みとってアクセスしたときに登録フォームなら簡単に登録できそうです。
でも、実際そのようになっていないのは、ちゃんとした理由があります。
まず、メールアドレスの取得です。
「空メール」のヘッダーには、送信者のメールアドレス情報がありますが、フォームから送信されたメールのヘッダーにあるのは、送信者のメールアドレス情報ではありません。
そのため、「空メール」を使わずにフォームから直接登録してもらう場合は、氏名などの項目とともにメールアドレスも手入力してもらう必要があり、間違えが発生する可能性があるのです。
メールアドレスの間違えば致命的ですからそれを防ぐためには、「空メール」でのワンクッションがどうしても必要なのです。
そしてもうひとつは、不正登録の防止です。
「空メール」を使わないで直接登録フォームに入力する方法だと、他人のメールアドレスを知っていれば勝手に登録することができてしまうので、本人の知らないところで勝手に会員登録されてしまい、とつぜんメルマガなどが届くようなことがおきてしまうのです。また、架空の情報での登録を防ぐ意味もあります。
「空メール」の自動返信
こうしたことから、「空メール」が活用されているわけですが、話を戻しましょう。
空メールの自動返信は多くの場合、ASPのサービスを利用している場合が多いので、何か特別なサーバーが必要な気もします。
ところが、一般的なメールサーバーでもほとんどの場合「空メール」の自動返信は可能です。
しかし、いくつかの条件があります。
レンタルサーバーなどでtelnetまたはsshでの接続できない場合やroot権限がない場合は設定設定は難しくなります。
また、今回紹介する方法では、PHPが使用可能でメールサーバーがpostfixという組合せですのでそれ以外の場合は、若干設定方法等は異なります。
自動返信の方法
具体的な方法ですが、「空メール」の自動返信は、指定したメールアドレスにメールが届いたときに、メールを返信するプログラムが動作するようにサーバーに設定しておくだけです。
まず、postfixで特定のメールアドレスにメールを受信したら、phpをコマンドで起動するように設定します。
今回は、abc@test.comという架空のアドレスが空メールの送信のあて先だとして説明します。
LinuxのCentOSの場合は、/etc/aliasesに以下のような転送設定を追加します。
OSやバージョンによって場所は異なる場合があるので、ご自身の環境に合わせて設定してください。
abc: xyz,"|/usr/bin/php /var/www/html/autoreply/autoreply.php"
abc@test.com宛にきたメールを、そのままabc@test.comに届けてしまうと問題なので別のxyzというユーザ(メールボックス)に配送するようにします。
そして、/var/www/html/autoreply/ディレクトリにあるautoreply.phpを起動するわけです。
次に
$ /usr/sbin/postalias /etc/aliases
を実行してpostfixに反映する。
autoreply.phpは、以下のとおりです。
<?php mb_internal_encoding("UTF-8"); $readdress = "info@test.com"; $from = "自動返信の送信元の名称"; $to = $_ENV['SENDER']; $subject = "自動返信メールの件名"; $bodytext =<<<_EOF_ 自動返信メールの本文の内容をここに記載します。 _EOF_; $header = "From: " . mb_encode_mimeheader($from, "UTF-8") . "<" . $readdress . ">" . "\n"; $header .= "MIME-Version: 1.0\n" . "Content-transfer-encoding: base64\n" . "Content-type: text/plain; charset=UTF-8\n"; mb_send_mail($to, $subject, $body, $header, " -f " . $readdress ); ?>
info@test.comは、自動返信の送信元のメールアドレスです。
文字コードは、UFT-8で作成してください。
お使いの環境に合わせてパスを書き換える必要がありますので、あらかじめご了承ください。