人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

レンタルサーバー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ができるかどうかです。

●質問者: eroshigin
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kodairabase
●0ポイント

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


eroshiginさんのコメント
上記の123は変数で、いろんな値が考えられます。 ディレクトリだと固定になってしまいます。 ok.123@xxx.xsrv.jpにメールが届くと、 ok.phpの中で、 123を受け取りたいです。 ok+123@xxx.xsrv.jpでも何でもいいんですが、 メールアドレスの@の前に、英数字を与え、 それをPHPで扱いたいのです。

2 ● satoxu
●0ポイント

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

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

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


3 ● rouge_2008
●200ポイント ベストアンサー

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


eroshiginさんのコメント
Gmailで account+hogehoge@gmail.com にメールを受信したら、 全転送機能を使って、ok@xxx.xserver.jpに転送をかけます。 メールフィルタ追加で、 ok@xxx.xserver.jp にメール受信時に、ok.phpが動作するようにしておいて、 転送メールの内容を解析すれば、最初のhogehogeの値がok.phpで受け取れるかもしれませんね。

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は対応しているので問題ありません。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ