※ ChatGPTを利用し、要約された質問です(原文:PHPで拒否型を許可型に変更したい)
PHPで拒否型を許可型に変更したい
このQ&Aのポイント
PHPの写メールBBSで、拒否型を許可型に変更したいです。
現在のPHPでは特定のメールアドレスに届いたメールのみ書き込めるようになっていますが、全てのメールを書き込めないようにしたいです。
許可アドレスを設定し、許可アドレス以外のメールは書き込みを拒否したいです。
写メールBBSというPHPがあります。
http://php.s3.to/bbs/bbs7.php
これは、特定のメールアドレスに届いたメールについて、「PHP上のボータンをクリックすると、メールサーバーからメールをダウンロードし、data.cgiに書き込む」というものです。このPHPでは、不正メールや広告メールを書き込まないように、拒否アドレスを設定できるようになっています。
******************************************
【config.php】
//拒否アドレス
$deny_from = array('yahoo.co.jp');
【pop.php】
// 送信者アドレスの抽出
if (preg_match("/\nFrom:[ \t]*([^\r\n]+)/i", $head, $freg)) {
$from = addr_search($freg[1]);
} elseif (preg_match("/\nReply-To:[ \t]*([^\r\n]+)/i", $head, $freg)) {
$from = addr_search($freg[1]);
} elseif (preg_match("/\nReturn-Path:[ \t]*([^\r\n]+)/i", $head, $freg)) {
$from = addr_search($freg[1]);
}
// 拒否アドレス
foreach ($deny_from as $dfrom) {
if (stristr($from, $dfrom)) $write = false;
}
******************************************
やりたいこと。
拒否アドレスを設定するのではなく、許可アドレス型とし、特定メールアドレス以外は全て書き込まないようにしたいと考えています。
そこで下記のように修正しましたが、全てのメールで書き込めてしまいます。
ご指導いただけましたら幸いです。
よろしくお願いいたします。
******************************************
【config.php】
//許可アドレス
$allow_from = array('hoge.co.jp');
【pop.php】
// 送信者アドレスの抽出
if (preg_match("/\nFrom:[ \t]*([^\r\n]+)/i", $head, $freg)) {
$from = addr_search($freg[1]);
} elseif (preg_match("/\nReply-To:[ \t]*([^\r\n]+)/i", $head, $freg)) {
$from = addr_search($freg[1]);
} elseif (preg_match("/\nReturn-Path:[ \t]*([^\r\n]+)/i", $head, $freg)) {
$from = addr_search($freg[1]);
}
// 許可アドレス
foreach ($allow_from as $afrom) {
if (stristr($from, $afrom)) { $write = true;
} else { $write = false; }
}
結果、許可アドレス以外の書き込みが出来てしまう。
お礼
ありがとうございます。 ダンプで試したところ、まさに意図しない値が $from に入ってました。 送信元であるへきなのに送信先が入ってました。 当方の送信方法のミスであり、ソースに間違いはありませんでした。 ありがとうございました!! 大変助かりました。 深く御礼申し上げます。