ショボ短歌会

PHPでも聞いてみたのですが、考えてみるとPHPと言うよりもLinuxのほうかもしれないということでお願いいたします

空メールの内容をPHPに渡したいと言うことで、いろいろ試してみましたが、なかなかうまくいきません
Webminを使ってサーバの管理をしています
MTAはsendmailを使っています

sendmailの/etc/aliases にはこのように記述しました
hoge: "|/usr/bin/procmail"

/etc/procmailrc にはこのように記述しています
PATH=/usr/bin:/bin:/usr/local/bin
MAILDIR=/var/spool/mail
LOGFILE=/var/www/html/****/procmail.log
LOCKFILE=/var/www/html/****/procmail.lock
:0
|/var/www/html/****/empty_mail_regist.php

私の考えでは
hoge@hoge.comにメールが来る
     ↓
sendmailが/usr/bin/procmailの起動
     ↓
procmailが/etc/procmailrc を読み込んでプログラム実行

となると思っているのですが間違うでしょうか?

/etc/aliases に
hoge: "|/var/www/html/***/empty_mail_regist.php"
と記述した場合、PHPのエラー(#!/usr/bin/php -q が抜けているなど)の場合はエラーメールが帰ってきます

PHPにアクセスはしているが実行できていない理由がわかりません
プログラム的なものだと思い、きめうちでメールを送るスクリプトを書きましたがダメでした
もちろん、コマンドラインで実行するとメールの送信はできます

スクリプトの所有者とメールアドレスのユーザは別なのでどれがダメなのかと思い、chownでhogeに変更してみましたが変わりはありませんでした

参考にしたサイトはこちらです
メール配信時のPHPスクリプト起動(Sendmail編)http://www.dolphy.gr.jp/webap/topic/smrsh.html

A 回答 (2件)

メールを受け取ってからの処理は私はこんな感じにしてます。



function getStdin(){
$stdin = fopen("php://stdin", "r");
if (!$stdin) exit();
while ($line = fgets($stdin)) {
$line = trim($line);
$lines.=$line."\n";
}
return $lines;
}

フローによって行ごとに配列でうけてもいいかもしれません。

なお挙動がつかみたいときは
テストのメールデータをつくっておいてまさにパイプしてやれば
よいでしょう。

cat mail.dat |/var/​www/html/***/empty_mail_regist.php
    • good
    • 0

fオプションでどうでしょ?



#!/パス/php -f

この回答への補足

ありがとうございます
#!/usr/bin/php -f に変更し少し前進したような気がします

The original message was received at Tue, 15 May 2007 18:18:51 +0900
from mail.hogehoge.jp [***.***.***.240]

----- The following addresses had permanent fatal errors -----
|/var/www/html/***/empty_mail_regist.php
(reason: 1)
(expanded from: <hoge@hoge.jp>)

----- Transcript of session follows -----
Could not open input file:
554 5.3.0 unknown mailer error 1

こちらがソースの先頭部分です
//メールソースを標準入力から読み込み
$source = file_get_contents("php://stdin");
if(!$source)
{
echo "fail!\n";
exit();
}

標準ストリームでメールが渡されていないのでしょうか…

補足日時:2007/05/15 18:39
    • good
    • 0
この回答へのお礼

解決しました!

sendmailの/etc/aliases の記述に問題があったようです
hoge: |/var/www/html/***/empty_mail_regist.php
↑これから↓コレに変更すると動き出しました
hoge: "|/usr/bin/php /var/www/html/***/empty_mail_regist.php"


smrshにPHPのシンボリックリンクを張っていたので、大丈夫だと思っていたのですが大きな勘違いですね…

どうもありがとうございました

お礼日時:2007/05/16 14:16

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