以下が実装できるようであれば、契約したいと思うのですが、
無料のお試し期間では、メールアドレスを作成できないもので、
ご存知の方、教えてください。
1.X SERVERでメールアドレスを作成します。
例えば、ok@xxx.xserver.jp
2.メールを受信すると、PHPプログラム(ok.php)が動きます。
3.メールアドレスに何か変数を付け、ok.phpに変数を渡したいのです。
例えば、ok.123@xxx.xserver.jpというメールを受信したら、
ok.phpが、123という値を使ってプログラム(DBに書き込む、など)を動かしたい。
1.2まではできそうなのですが、3ができるかどうかです。
1. に関しては、X-Serverではキャッチオールは利用できませんので、Googleを利用するといいです。
http://q.hatena.ne.jp/1280468213#c183191
http://thai-po.blogspot.com/2009/09/blog-post_25.html
※2. にも関係ある事が記述されています。
2. に関しては、コントロールパネルでの設定、あるいは「.mailfilter」を編集する事で可能なようです。
http://trash-area.com/archives/182
http://designers-style.seesaa.net/category/6258579-2.html
PHPのパスはバージョンによって異なります。
http://www.xserver.ne.jp/man_program_soft.php
PHP4.3.9 /usr/bin/php
PHP5.1.6 /usr/bin/php5
PHP5.2.17 /usr/bin/php5.2
PHP5.3.3 /usr/bin/php5.3
3. に関してですが、ok.phpで次のようにすればメールアドレスのアカウントの一部(「ok.123@xxx.xserver.jp」の「123」)を変数として、そのまま続けて処理する事が可能です。
(2. の方法でメールをプログラムに渡して起動すると、ヘッダも本文もすべてok.phpに渡されるので、再度取得しに行く必要はありません。)
require_once 'Mail/mimeDecode.php'; // メールデータ取得 $params['include_bodies'] = true; $params['decode_bodies'] = true; $params['decode_headers'] = true; $params['input'] = file_get_contents("php://stdin"); $params['crlf'] = "\r\n"; $structure = Mail_mimeDecode::decode($params); //宛先メールアドレスを抽出 $mail = $structure->headers['to']; preg_match('/\.([0-9]+)@[\w\d.-]+(>)?$/', $mail, $arg); //preg_match('/\.([^\s]+)@[\w\d.-]+(>)?$/', $mail, $arg); // .以降に数字以外が含まれる場合 // 「$arg[1]」に入りますから、行いたい処理を続けてください。
PEARのライブラリ「Mail_MimeDecode」の使用方法は、以下のコードを使用させていただきました。
http://www.abe-tatsuya.com/web_prog/php/mail2php.php
【コード訂正済み】
差出人メールアドレスではなく、宛先メールアドレスで判定しなければならなかったので、次の部分「from」を
$mail = $structure->headers['from'];
次のように「to」に変更しました。
$mail = $structure->headers['to'];
【追記】
Gmailではアカウント名の途中の.を無視しますが、アカウント名.任意の文字列宛てのメールは受け取る事が出来ないので、アカウント名+任意の文字列宛てにしてください。
記事の「アカウント"."名@gmail.com」を勘違いして解釈してました。
※「ok+u.123@xxx.example.jp」のように「アカウント名+任意の文字列1.任意の文字列2」宛てに送信する事は可能です。(「任意の文字列2」の部分を取得できればいい場合は、上記のコードのままで大丈夫です。)
「アカウント名+任意の文字列」のメールアドレスで利用する場合は、コードを次のように変更してください。
preg_match('/\+([0-9]+)@[\w\d.-]+(>)?$/', $mail, $arg); //preg_match('/\+([^\s]+)@[\w\d.-]+(>)?$/', $mail, $arg); // .以降に数字以外が含まれる場
Gmailでの転送設定が必要です。
https://support.google.com/mail/bin/answer.py?hl=ja&answer=10957
※Google Appsを利用して独自ドメインでGmailを利用する場合でも、一つだけアカウントを作成して、そのメールアドレスへのメールをX-Serverへ転送する場合は、キャッチオールの設定は必要ありません。
mailディレクトリの内容を参照すればできます。
http://www.xserver.ne.jp/man_ftp_setting.php
上記の123は変数で、いろんな値が考えられます。
ディレクトリだと固定になってしまいます。
ok.123@xxx.xsrv.jpにメールが届くと、
ok.phpの中で、
123を受け取りたいです。
ok+123@xxx.xsrv.jpでも何でもいいんですが、
メールアドレスの@の前に、英数字を与え、
それをPHPで扱いたいのです。
ホスティング契約であれば出来ません。
ハウジング、もしくはVPS 等を検討された方がよいかと思います。
用途が分からないので断言しにくいのですが、.forward や .procmailrc を使った方がいろいろと楽に使うことが出来ます。
1. に関しては、X-Serverではキャッチオールは利用できませんので、Googleを利用するといいです。
http://q.hatena.ne.jp/1280468213#c183191
http://thai-po.blogspot.com/2009/09/blog-post_25.html
※2. にも関係ある事が記述されています。
2. に関しては、コントロールパネルでの設定、あるいは「.mailfilter」を編集する事で可能なようです。
http://trash-area.com/archives/182
http://designers-style.seesaa.net/category/6258579-2.html
PHPのパスはバージョンによって異なります。
http://www.xserver.ne.jp/man_program_soft.php
PHP4.3.9 /usr/bin/php
PHP5.1.6 /usr/bin/php5
PHP5.2.17 /usr/bin/php5.2
PHP5.3.3 /usr/bin/php5.3
3. に関してですが、ok.phpで次のようにすればメールアドレスのアカウントの一部(「ok.123@xxx.xserver.jp」の「123」)を変数として、そのまま続けて処理する事が可能です。
(2. の方法でメールをプログラムに渡して起動すると、ヘッダも本文もすべてok.phpに渡されるので、再度取得しに行く必要はありません。)
require_once 'Mail/mimeDecode.php'; // メールデータ取得 $params['include_bodies'] = true; $params['decode_bodies'] = true; $params['decode_headers'] = true; $params['input'] = file_get_contents("php://stdin"); $params['crlf'] = "\r\n"; $structure = Mail_mimeDecode::decode($params); //宛先メールアドレスを抽出 $mail = $structure->headers['to']; preg_match('/\.([0-9]+)@[\w\d.-]+(>)?$/', $mail, $arg); //preg_match('/\.([^\s]+)@[\w\d.-]+(>)?$/', $mail, $arg); // .以降に数字以外が含まれる場合 // 「$arg[1]」に入りますから、行いたい処理を続けてください。
PEARのライブラリ「Mail_MimeDecode」の使用方法は、以下のコードを使用させていただきました。
http://www.abe-tatsuya.com/web_prog/php/mail2php.php
【コード訂正済み】
差出人メールアドレスではなく、宛先メールアドレスで判定しなければならなかったので、次の部分「from」を
$mail = $structure->headers['from'];
次のように「to」に変更しました。
$mail = $structure->headers['to'];
【追記】
Gmailではアカウント名の途中の.を無視しますが、アカウント名.任意の文字列宛てのメールは受け取る事が出来ないので、アカウント名+任意の文字列宛てにしてください。
記事の「アカウント"."名@gmail.com」を勘違いして解釈してました。
※「ok+u.123@xxx.example.jp」のように「アカウント名+任意の文字列1.任意の文字列2」宛てに送信する事は可能です。(「任意の文字列2」の部分を取得できればいい場合は、上記のコードのままで大丈夫です。)
「アカウント名+任意の文字列」のメールアドレスで利用する場合は、コードを次のように変更してください。
preg_match('/\+([0-9]+)@[\w\d.-]+(>)?$/', $mail, $arg); //preg_match('/\+([^\s]+)@[\w\d.-]+(>)?$/', $mail, $arg); // .以降に数字以外が含まれる場
Gmailでの転送設定が必要です。
https://support.google.com/mail/bin/answer.py?hl=ja&answer=10957
※Google Appsを利用して独自ドメインでGmailを利用する場合でも、一つだけアカウントを作成して、そのメールアドレスへのメールをX-Serverへ転送する場合は、キャッチオールの設定は必要ありません。
Gmailで account+hogehoge@gmail.com にメールを受信したら、
全転送機能を使って、ok@xxx.xserver.jpに転送をかけます。
メールフィルタ追加で、
ok@xxx.xserver.jp にメール受信時に、ok.phpが動作するようにしておいて、
転送メールの内容を解析すれば、最初のhogehogeの値がok.phpで受け取れるかもしれませんね。
> Gmailで account+hogehoge@gmail.com にメールを受信したら、
> 全転送機能を使って、ok@xxx.xserver.jpに転送をかけます。
はい、おそらくその方法で大丈夫です。
件名など宛先以外に判別可能な文字列があるのでしたら、フィルタによる転送でも大丈夫です。(※X-Serverでの動作確認は行っていませんが、どちらの場合も問題なくGmailから指定したアドレスに転送されました。)
※Gmailでのフィルタによる転送の場合ですが、To欄には「account@gmail.com」あるいは「account」と指定する必要があります。
キャッチオールに対応したレンタルサーバーは少ないようですから、GmailあるいはGoogle Appsを利用する事でどのサーバーでも対応できると思います。
あとはメール受信によるプログラムの起動ですが、X-Serverは対応しているので問題ありません。
Gmailで account+hogehoge@gmail.com にメールを受信したら、
2011/12/10 18:48:24全転送機能を使って、ok@xxx.xserver.jpに転送をかけます。
メールフィルタ追加で、
ok@xxx.xserver.jp にメール受信時に、ok.phpが動作するようにしておいて、
転送メールの内容を解析すれば、最初のhogehogeの値がok.phpで受け取れるかもしれませんね。
> Gmailで account+hogehoge@gmail.com にメールを受信したら、
2011/12/11 01:04:30> 全転送機能を使って、ok@xxx.xserver.jpに転送をかけます。
はい、おそらくその方法で大丈夫です。
件名など宛先以外に判別可能な文字列があるのでしたら、フィルタによる転送でも大丈夫です。(※X-Serverでの動作確認は行っていませんが、どちらの場合も問題なくGmailから指定したアドレスに転送されました。)
※Gmailでのフィルタによる転送の場合ですが、To欄には「account@gmail.com」あるいは「account」と指定する必要があります。
キャッチオールに対応したレンタルサーバーは少ないようですから、GmailあるいはGoogle Appsを利用する事でどのサーバーでも対応できると思います。
あとはメール受信によるプログラムの起動ですが、X-Serverは対応しているので問題ありません。