特定アドレスに空メールを受信し、それを契機に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

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:2007/06/23 04:25:07
  • 終了:2007/06/25 10:02:40

ベストアンサー

id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402007/06/24 09:08:19

ポイント30pt

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

よくない。

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


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

特に必要ありません。


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

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

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

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

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

condredirect(1)

id:ost3

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

「.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.

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

2007/06/24 15:16:46

その他の回答(2件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402007/06/23 08:43:38

ポイント30pt

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

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

となるはずです。


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

qmail-command(8)

id:ost3

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

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

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

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

while(!feof($stdin)) {

$str .= fgets($stdin);

}

fclose($stdin);

$decoder = new Mail_mimeDecode($str);

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

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

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

}

?>

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

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

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

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

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

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

2007/06/24 00:42:24
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402007/06/24 09:08:19ここでベストアンサー

ポイント30pt

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

よくない。

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


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

特に必要ありません。


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

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

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

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

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

condredirect(1)

id:ost3

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

「.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.

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

2007/06/24 15:16:46
id:t_shiono No.3

t_shiono回答回数256ベストアンサー獲得回数222007/06/24 15:34:12

ポイント20pt

横から失礼します。

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(ダミー)

  • id:b-wind
    >今回は、HTTP上で表示ではInternal Server Errorとなってしまいました。
    一般に、コマンドから呼び出す類のプログラムは CGI and/or mod_php では使えない。
    CGI 等として動作するプログラムは他のプログラムから呼び出すには適さない。
    だからエラーになるのが普通。
  • id:ost3
    >b-windさん
    いろいろ確認したんですが
    結局CPIでは、メールトリガー機能を使えなくしてるそうです。
    最初の質問で、CPIでメールトリガー使えますかって聞くのが
    正解でしたね^^;

    いろいろ、教えてくださってありがとうございます。

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

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

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

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