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

特定アドレスに空メールを受信し、それを契機にPHP上で登録パスワードなどを自動返信し、
データベース上で会員登録を行うシステムを作ろうと思っています。

現在の状況は・・・
/usr/home/アカウント/html/.qmail(rw-- --- ---)

↑↑上↑↑のファイルに↓↓以下↓↓の記述をしましたが

/usr/bin/php -q /usr/home/アカウント/html/mail/test.php

メール受信時にPHPを起動できませんでした。

「.qmail」を使用するのが初めてで質問させていただきました。
データベースへの接続などは、cronやHTTP上では正常に動いています。
空メールを受信してメール受信時にPHPが起動できるようにしたいのですが・・・

※実際にqmailを使用し、下記サーバ環境での話でお願いします。m(_ _;)m

レンタルサーバ CPIサーバ環境
http://www.cpi.ad.jp/service/server/plan/shared/g10.html

httpドキュメントルート /usr/home/アカウント/html
httpsドキュメントルート /usr/home/アカウント/secure

●質問者: ost3
●カテゴリ:ウェブ制作
✍キーワード:CPI HOME HTML HTTP HTTPS
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● b-wind
●30ポイント

そのスクリプトの内容が正しいかがまず問題になるような気もしますが、少なくとも記述方法は、

|/usr/bin/php -q /usr/home/アカウント/html/mail/test.php

となるはずです。


また、そのスクリプトは以下の環境で実行されますのでそれに対応した形で作成する必要があります。

qmail-command(8)

◎質問者からの返答

お返事遅くなりまして申し訳ありません、

.qmailの記述は、良かったんですね・・・

ちなみにスクリプト側では、以下のようになってます。

if(($stdin=fopen("php://stdin","r"))==true) {

while(!feof($stdin)) {

$str .= fgets($stdin);

}

fclose($stdin);

$decoder = new Mail_mimeDecode($str);

--------------略------------

エンコード処理→文字格納→DB登録

--------------略------------

}

?>

っと簡単なスクリプトで試してみたんですがだめでした。

「.qmail」の他に「他にも隠しファイル作らないといけないのかな・・・」

なんていろいろ考え込んじゃってる状態です。

ちなみに上の例は標準入力から呼び出しなのかなと思ったんですが、

スクリプトで何か良いサンプルがあるなら教えてください・・・

誰か同じ会社(CPI)のサーバ使ってる方でやり方知ってる方教えてください><;


2 ● b-wind
●30ポイント ベストアンサー

.qmailの記述は、良かったんですね・・・

よくない。

先頭に「|」が要ります。


「.qmail」の他に「他にも隠しファイル作らないといけないのかな・・・」

特に必要ありません。


CPI のサーバーは FreeBSD & qmail である点以外は特に注意する事はありません。

今回の場合は FreeBSD である事もあまり関係ないでしょう。

エンコード処理→文字格納→DB登録

この略されている部分が重要な気がします。

DBの接続等はやめてもっと簡単なサンプルから試してみてはどうですか?

condredirect(1)

◎質問者からの返答

何度もご回答ありがとうございます。

「.qmail」の修正と使用しているサンプルをほぼそのまま使用してみましたが、やはり動作していないようです。

また、今回は受け取ったメールをそのまま送信者に返信するものを用意してやってみました。

以下がそのソースになります

// メールヘッダ解析用です

require_once('./mimeDecode.php');

// メールヘッダの取得開始をします

// メールヘッダの取得開始をします

if(($stdin=fopen("php://stdin","r"))==true) {

while(!feof($stdin)) {

$str .= fgets($stdin, 4096);

}

fclose($stdin);

$decoder = new Mail_mimeDecode($str);

$params['include_bodies'] = false;

$params['decode_bodies'] = false;

$params['decode_headers'] = true;

$structure = $decoder->decode($params);

$item['subject'] = mb_convert_encoding(mb_decode_mimeheader($structure->headers['subject']), mb_internal_encoding(), "auto");

$item['to'] = mb_convert_encoding(mb_decode_mimeheader($structure->headers['from']), mb_internal_encoding(), "auto");

$item['from'] = mb_convert_encoding(mb_decode_mimeheader($structure->headers['to']), mb_internal_encoding(), "auto");

//ユーザーへ

mb_language("Ja");

$mailto = $item['to'];

$subject = "テストメール タイトル";

$body = "テスト本文";

$mailfrom="From:" .mb_encode_mimeheader("テストメール") ."<test@ドメイン.xxx>";

mb_send_mail($mailto,$subject,$body,$mailfrom);

}

?>

今回は、HTTP上で表示ではInternal Server Errorとなってしまいました。

メッセージは以下のようになります。

The server encountered an internal error or misconfiguration and was unable to complete your request.

もうあきらめたほうがいいのでしょうか・・・


3 ● t_shiono
●20ポイント

横から失礼します。

b-windさんがおっしゃっているように、もっと簡単なサンプルから動かさないと原因の特定は難しいと思います。

例えば、

・スクリプトが実行されているかどうかの確認

適当なファイルに固定文字列の出力するなど

・スクリプトが実行されていて、メールデータを正しく受信できているかの確認

メールデータをそのまま適当なファイルに出力など

・スクリプトが実行されていて、メールデータも正しく受信できた際に必要データの抽出がうまく機能しているかの確認

メールデータからメールアドレスなどを抽出して、適当なファイルに出力

・スクリプトが実行されていて、メールデータも正しく受信できた際に必要データの抽出された際に、メールを正しく返信できているかの確認

メールデータからメールアドレスを抽出して、そのメールアドレスに、固定の内容のメールを送信など

・最終的な機能の確認

メールデータからメールアドレスを取得し、何か処理(パスワードの発行など)をし、その内容でメールを送信


という順序で確認してはいかがでしょうか?

あと、気になるのが、

今回は、HTTP上で表示ではInternal Server Errorとなってしまいました。

メッセージは以下のようになります。

The server encountered an internal error or misconfiguration and was unable to complete your request.

なのですが、今回のPHPのプログラムでなぜHTTPが関わるのでしょうか?

http://q.hatena.ne.jp/answer(ダミー)

関連質問


●質問をもっと探す●



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