レンタルサーバーX SERVERの契約を検討しています。


以下が実装できるようであれば、契約したいと思うのですが、
無料のお試し期間では、メールアドレスを作成できないもので、
ご存知の方、教えてください。

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人5回まで
  • 13歳以上
  • 登録:2011/12/09 23:54:34
  • 終了:2011/12/11 01:13:06

ベストアンサー

id:rouge_2008 No.3

rouge_2008回答回数594ベストアンサー獲得回数3512011/12/10 06:14:07

ポイント200pt

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へ転送する場合は、キャッチオールの設定は必要ありません。

id:eroshigin

Gmailで account+hogehoge@gmail.com にメールを受信したら、
全転送機能を使って、ok@xxx.xserver.jpに転送をかけます。

メールフィルタ追加で、
ok@xxx.xserver.jp にメール受信時に、ok.phpが動作するようにしておいて、

転送メールの内容を解析すれば、最初のhogehogeの値がok.phpで受け取れるかもしれませんね。

2011/12/10 18:48:24
id:rouge_2008

> Gmailで account+hogehoge@gmail.com にメールを受信したら、
> 全転送機能を使って、ok@xxx.xserver.jpに転送をかけます。

はい、おそらくその方法で大丈夫です。
件名など宛先以外に判別可能な文字列があるのでしたら、フィルタによる転送でも大丈夫です。(※X-Serverでの動作確認は行っていませんが、どちらの場合も問題なくGmailから指定したアドレスに転送されました。)
※Gmailでのフィルタによる転送の場合ですが、To欄には「account@gmail.com」あるいは「account」と指定する必要があります。

キャッチオールに対応したレンタルサーバーは少ないようですから、GmailあるいはGoogle Appsを利用する事でどのサーバーでも対応できると思います。
あとはメール受信によるプログラムの起動ですが、X-Serverは対応しているので問題ありません。

2011/12/11 01:04:30

その他の回答(2件)

id:kodairabase No.1

kodairabase回答回数661ベストアンサー獲得回数802011/12/10 01:39:04

mailディレクトリの内容を参照すればできます。
http://www.xserver.ne.jp/man_ftp_setting.php

id:eroshigin

上記の123は変数で、いろんな値が考えられます。
ディレクトリだと固定になってしまいます。
ok.123@xxx.xsrv.jpにメールが届くと、
ok.phpの中で、
123を受け取りたいです。

ok+123@xxx.xsrv.jpでも何でもいいんですが、
メールアドレスの@の前に、英数字を与え、
それをPHPで扱いたいのです。

2011/12/10 02:03:08
id:satoxu No.2

satoxu回答回数94ベストアンサー獲得回数142011/12/10 05:46:41

ホスティング契約であれば出来ません。

ハウジング、もしくはVPS 等を検討された方がよいかと思います。

用途が分からないので断言しにくいのですが、.forward や .procmailrc を使った方がいろいろと楽に使うことが出来ます。

id:rouge_2008 No.3

rouge_2008回答回数594ベストアンサー獲得回数3512011/12/10 06:14:07ここでベストアンサー

ポイント200pt

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へ転送する場合は、キャッチオールの設定は必要ありません。

id:eroshigin

Gmailで account+hogehoge@gmail.com にメールを受信したら、
全転送機能を使って、ok@xxx.xserver.jpに転送をかけます。

メールフィルタ追加で、
ok@xxx.xserver.jp にメール受信時に、ok.phpが動作するようにしておいて、

転送メールの内容を解析すれば、最初のhogehogeの値がok.phpで受け取れるかもしれませんね。

2011/12/10 18:48:24
id:rouge_2008

> Gmailで account+hogehoge@gmail.com にメールを受信したら、
> 全転送機能を使って、ok@xxx.xserver.jpに転送をかけます。

はい、おそらくその方法で大丈夫です。
件名など宛先以外に判別可能な文字列があるのでしたら、フィルタによる転送でも大丈夫です。(※X-Serverでの動作確認は行っていませんが、どちらの場合も問題なくGmailから指定したアドレスに転送されました。)
※Gmailでのフィルタによる転送の場合ですが、To欄には「account@gmail.com」あるいは「account」と指定する必要があります。

キャッチオールに対応したレンタルサーバーは少ないようですから、GmailあるいはGoogle Appsを利用する事でどのサーバーでも対応できると思います。
あとはメール受信によるプログラムの起動ですが、X-Serverは対応しているので問題ありません。

2011/12/11 01:04:30

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません