忙しい現代人の腰&肩のお悩み対策!

Xserverで空メールを実装しようとしています。
しかしうまく動作しません。

マニュアルを参考に「メールの振り分け設定」より
条件:あて先が ○○○○○@△△△△ を一致する
処理方法:| /○○○○/□□□□/sippai.php へ 転送する
としました。

しかし、携帯電話より○○○○○@△△△△へメール送信しても、
差出人:MAILER-DAEMON@△△△.xserver.jp
件名:Undelivered Mail Returned to Sender
と返信されてしまいます。

サーバー側の設定が何か必要なのでしょうか?

スクリプトを以下に記載します。
使用スクリプト;PHP5、ライブラリ;PEAR
<?php

//PEAR::MailCu
require_once '/aaaaaa/bbbb/cccc/ddddd/eeeee/fff/Mail.php';

//PEAR::Mail_mimeCu
require_once '//aaaaaa/bbbb/cccc/ddddd/eeeee/ggg/mimeDecode.php';

//メールソースを読み込む
$source = file_get_contents("php://stdin");
if(!$source){
exit();
}

//メールを解析する
$decoder = new Mail_mimeDecode($source);
$structure = $decoder->decode($params);

//送信元を取得する
$from = $structure -> headers['from'];
$from = mb_decode_mimeheader($from);
$from = mb_convert_encoding($from, mb_internal_encoding(),'auto');
if(preg_match( '/<(.*?)>$/' , $from , $match)){
$from = $match[1];
}
$from = trim($from);
$from = strtolower($from);

//送信データを設定する
$recipients = $from;
$new_from = '○○○○○@△△△△';
$subject = 'empty mail ok!';
$body = 'http://fmob.jp';

//メールを送信する
$headers = array();
$headers['From'] = $new_from;
$headers['To'] = $recipients;
$headers['Subject'] = $subject;
$headers['Sender'] = $new_from;

$mail = Mail::factory('sendmail');
$result = $mail->send($recipients, $headers, $body);

ini_set('log_errors', '1');
ini_set('error_log', 'エラーログのパス');
?>

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (7件)

エラーログを採るにあたっては、php.iniで以下を設定すればよいです。



error_reporting = (任意の値)
log_errors = On
error_log = "(ログファイルのパス)"

サーバの環境がよくわかりませんが、ログファイルは予め書き込み可能なファイルとして作成しておく方が無難です。

ブラウザにエラーメッセージが表示されないということですが、まずはphp.iniの設定が正しく反映されているかphpinfo()で確認してみてください(確認済みでしたらすいません)。
うっかりコメントアウトしたままだったとかないですかね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
解決しました!

php.iniの設定が正しく反映されているかについて
/○○○○/□□□□/sippai.phpに正しく反映されていませんでした。
php.iniファイルを作成し、配置していたのですが、配置先が誤っていたため、
反映されていませんでした。
こちらで配置できる一番上の階層にphp.iniを配置することで、エラーログをブラウザで確認することができました。

/○○○○/□□□□/sippai.phpのエラーログを確認できるようになったことで、PEARライブラリの呼び出しに失敗していることがわかりました。
原因は恥ずかしいですがスクリプトの記述ミスでした。

UmJammerさんのご指摘がなければ、気づくことができず解決はできなかったと思います。
PHPに触れるようになって1ヶ月程ですが、とても勉強になりました。

本当にありがとうございました。

お礼日時:2009/07/03 20:05

返送されるメールの内容は前とは異なってますよね、ということは一応前進してると思いますよ。


メッセージの内容は書かれたものがすべてですか?
それだけだとちょっと原因の特定が難しい気もするので、その場合はPHPのエラーログを採ってみてください。

あとは方法自体が正しいかどうかを確認するには、もっと簡単なスクリプトを実行させることです。
たとえばログファイルに適当なメッセージを書き込むものとか簡単です。

この回答への補足

回答ありがとうございます

>PHPのエラーログを採ってみてください。
エラーログの採り方で調べてみましたが、php.iniの設定で
error_reporting=E_ALL & ~E_NOTICE
display_errors=On
display_startup_errors=On
log_errors=On
のようにすれば良いということでしょうか?
php.iniの設定を行うことはxserverではできますが、もし
php.iniの設定が行えない場合は、PHPファイルに
ini_set('display_errors',0);
ini_set('log_errors',1);
のようにすれば良いということでしょうか?。

今回質問させていただいた時点からそうだったのですが、Webブラウザ上でエラーが全く表示されない(白紙のページ)という問題にも直面しています。サポートに問い合わせたところ、「display_errors=Onにしてください。」との回答でした。しかし設定は既にdisplay_errors=Onになっていました。再度サポートに問い合わせてみます。
<?php
print("ababa")
print(ababa");
print("ababa;
?>
のエラーメッセージがWebブラウザ上で表示されません;;
アドバイスありましたら、教えてください。よろしくお願いします。
回答を参考に頑張ります。

補足日時:2009/07/03 10:22
    • good
    • 0

たびたびすいません。


#!/usr/bin/php5で改行するようにしてください。

以下のような具合です。

#!/usr/bin/php5
<?PHP

?>

この回答への補足

返事が遅くなりすいません。
#!/usr/bin/php5
<?PHP

?>
といった具合で、修正してみました。が、

This is the Postfix program at host △△△.xserver.jp.
I'm sorry to have to inform you that your message could not
be delivered to one or more reci
添付あり:Mail

と返信されてきてしまいました。
添付されたものはなぜかサーバーとの接続が切れました、と
内容を把握できませんでした。
おまじないが効かなかったのでしょうか?

現在、「メールの振り分け設定」ではなく.mailfilterに書き込むことでエラーがなくならないか等、試行錯誤中です。
他に考えられる原因があるようでしたら、教えていただけませんか?
よろしくお願いします。

補足日時:2009/07/02 20:36
    • good
    • 0

あー、いわゆる「おまじない」を付けとかないとだめでしたかね。



ファイルの先頭(PHPの開始タグより前)に

 #!/usr/bin/php5

と書き足してみてください。
    • good
    • 0

>どのようにして実行権限を付与することができるのかわかりません。


UNIXコマンドの chmod で権限を変更することができます。
XserverはSSHで接続できないようなのでFTPクライアントでこれを行うか、あとはPHPスクリプトからコマンドを実行するという方法もあります。

>>パイプの後にphpへのパスが書かれていないのですが、実際は書かれているのでしょうか。
>書いていません。
Xserverの設定を見てみました。別にphpのパスはなくてもいいようですね。ここはとりあえず気にしないでください。

この回答への補足

実行権限の変更をすることができました!
教えていただいたFTPクライアントで変更できました。
ありがとうございます。

しかし、変更後にメールを送信し、返信内容を確認すると
<○○○○○@△△△△>: Command died with status 2: "/usr/bin/maildrop".
Command output:
/○○○○/□□□□/sippai.php:
line 1: ?php_: No such file or directory
/○○○○/□□□□/sippai.php
line 2: _: command not found
/○○○○/□□□□/sippai.php:
line 3: //PEAR::MailCu_: No such file or directory
/○○○○/□□□□/sippai.php:
line 4: //xserverp_: No such file or directory
/○○○○/□□□□/sippai.php:
line 5: require_once: command not found
/○○○○/□□□□/sippai.php:
line 5: _: command not found
/○○○○/□□□□/sippai.php:
line 6: //[Jp_: No such file or directory
/○○○○/□□□□/sippai.php:
|
|
|
/○○○○/□□□□/sippai.php:
line 18: syntax error near unexpected token `('
/○○○○/□□□□/sippai.php:
line 18: `$source = file_get_contents("php://stdin");_'

と返信されました。
このエラーだらけの原因がわかりません。
http://itunesipod.net/modules/pukiwiki/41.html
こちらのサイトを参考にPEAR、Mail、Mail_mimeDecodeのパッケージをインストールしました。
MailやMail_mimeDecodeを呼び出せていないのでしょうか。
解決する方法を教えていただけないでしょうか。
よろしくお願いします。

補足日時:2009/07/01 22:50
    • good
    • 0

Permission deniedってありますね。


sippai.phpに実行権限を付与する必要があります。

ところで、質問文中の例示ではパイプの後にphpへのパスが書かれていないのですが、実際は書かれているのでしょうか。

この回答への補足

>sippai.phpに実行権限を付与する必要があります。
どのようにして実行権限を付与することができるのかわかりません。

>パイプの後にphpへのパスが書かれていないのですが、実際は書かれているのでしょうか。
書いていません。

1.メールを受信したらPHPプログラムにメールデータを送る
2.データを受け取ってメールの中身解析し 送信元のアドレス取得し、そのアドレスに返信する

1をxserverの「メールの振り分け設定」、2を記載したスクリプトのみ
で行えると思っていました。知識に乏しいため何が必要なのかわかりません。教えていただけないでしょうか。
よろしくお願いします。

補足日時:2009/07/01 13:07
    • good
    • 0

返送されたメールの本文に何かメッセージはありませんか?

この回答への補足

>返送されたメールの本文に何かメッセージはありませんか?

以下のメッセージが返送されました。

--○○○○.□□□□□/△△△.xserver.jp
Content-Description:Notification
Content-Type:text/plain;charset=ISO-2022-JP

This is the Postfix program at host △△△.xserver.jp.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to <postmaster>

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

The Postfix program

<○○○○○@△△△△>: Command died with status 126: "/usr/bin/maildrop".
Command output: sh:
/○○○○/□□□□/sippai.php:
Permission denied

--○○○○.□□□□□/△△△.xserver.jp
Content-Description:Delivery report
Content-Type:message/delivery-status

Reporting-MTA: dns; △△△.xserver.jp
X-Postfix-Queue-ID: □□□□□
X-Postfix-Sender: rfc822; □□□@○○○
Arrival-Date: Tue, 30 Jun 2009 16:52:37 +0900 (JST)

Final-Recipient: rfc822; ○○○○○@△△△△
Action: failed
Status: 5.0.0
Diagnostic-Code: X-Postfix; Command died with status 126: "/usr/bin/maildrop".
Command output: sh:
/○○○○/□□□□/sippai.php:
Permission denied

--○○○○.□□□□□/△△△.xserver.jp
Content-Description:Undelivered Message
Content-Type:message/rfc822

Received: from △△△.xserver.jp (oooo.xserver.jp [127.0.0.1])
by △△△.xserver.jp (Postfix) with ESMTP id ○○○○
for <○○○○○@△△△△>; Tue, 30 Jun 2009 16:52:37 +0900 (JST)
Received: from oooo.xserver.jp (127.0.0.1)
by △△△.xserver.jp (F-Secure/virusgw_smtp/301/△△△.xserver.jp);
Tue, 30 Jun 2009 16:52:37 +0900 (JST)
X-Virus-Status: clean(F-Secure/virusgw_smtp/301/△△△.xserver.jp)
Received: from mmrts040p01c.softbank.ne.jp (mmrts040p01c.softbank.ne.jp [123.108.236.92])
by △△△.xserver.jp (Postfix) with SMTP id 1E22D858121
for <○○○○○@△△△△>; Tue, 30 Jun 2009 16:52:36 +0900 (JST)
Subject: =?ISO-2022-JP?B?GyRCJC0kaSRzGyhC?=
Mime-Version: 1.0
Content-Type:text/plain;charset=ISO-2022-JP
Content-Transfer-Encoding:7bit
Date: Tue, 30 Jun 2009 16:52:43 +0900
Message-ID: <11111111111111.2222222222222>
From: <□□□@○○○>
To: ○○○○○@△△△△
Sender:□□□@○○○
X-Priority: 3

--○○○○.□□□□□/△△△.xserver.jp--

補足日時:2009/07/01 10:39
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPHPで空メールの自動返信を作りたい

携帯サイトを作製中なのですがユーザビリティを考え従来のフォーム形式ではなく
空メール形式で自動返信させようかと考えています。

空メールについて検索した所、多くの参考サイトが見つかりました。

ですがどれを試してみても旨く行かず困っております。

どなたか、「より詳しく書いてある参考サイト」もしくは、「特定の場所を書き換えるだけで実装できるサンプル」など
ありましたらご紹介頂ければと思います。

取り急ぎ以上ですが宜しくお願い致します。

Aベストアンサー

メールサーバは管理権限あるんですよね?
たとえば entry@domain.dom で自動返信したい場合は、
entryというユーザがあるなら /home/entry/.qmail ですが、
設定によって場所が変わります。で
| /usr/local/bin/php /var/www/anatano/entry_script.php
のように書いておくと、メールを受けた時に entry_script.php が実行されます。

Mail_mimeDecode はPEARなので、サーバの共有ライブラリ的な所に入れれるなら、CLから
# pear install mail_mimedecode
でインストールするか、自分のサイトディレクトリに設置するなら
define('PEAR_DIR', '/home/www/anatano/lib');
ini_set('include_path', ini_get('include_path' . PATH_SEPARATOR . PEAR_DIR));
みたいにして、include できるようにする必要があります。

あと Mail_mimeDecode の中で PEAR.php を読み込むのでそれも必要です。
/home/www/anatano/lib/PEAR.php
/home/www/anatano/lib/Mail/mimeDecode.php (?

http://pear.php.net/package/PEAR/download
http://pear.php.net/package/Mail_mimeDecode/download

で、WEBでアクセスしているわけではないので
開発するなら状況をログに書き出したりしないと不便かもしれませぬ。

メールサーバは管理権限あるんですよね?
たとえば entry@domain.dom で自動返信したい場合は、
entryというユーザがあるなら /home/entry/.qmail ですが、
設定によって場所が変わります。で
| /usr/local/bin/php /var/www/anatano/entry_script.php
のように書いておくと、メールを受けた時に entry_script.php が実行されます。

Mail_mimeDecode はPEARなので、サーバの共有ライブラリ的な所に入れれるなら、CLから
# pear install mail_mimedecode
でインストールするか、自分のサイトディレクトリ...続きを読む


人気Q&Aランキング