PHPスクリプトはレッツPHP!様の写メール BBSなのですが、友人のsoftbank携帯の
912SHで送信してもらったところ、件名が入らないようでした。
自分なりにソースを探したところ、正規表現で件名を拾っているようなのですが、
softbankの912SHのメールヘッダーのSubject:の後に\nの改行が入っているためなのか
件名が取れません。。。
この症状などに悩まされております。すみませんが、解決策等ご存知の方おられましたら
お答お願い致します。
以下、レッツPHP!様の写メール BBSの件名抽出の部分の抜粋です。
$head = ereg_replace("\r\n? ", "", $head);
// サブジェクトの抽出
if (eregi("\nSubject:[ \t]*([^\r\n]+)", $head, $subreg)) {
$subject = $subreg[1];
while (eregi("(.*)=\?iso-2022-jp\?B\?([^?]+)\?=(.*)",$subject,$regs)) {//MIME Bデコード
$subject = $regs[1].base64_decode($regs[2]).$regs[3];
}
while (eregi("(.*)=\?iso-2022-jp\?Q\?([^?]+)\?=(.*)",$subject,$regs)) {//MIME Qデコード
$subject = $regs[1].quoted_printable_decode($regs[2]).$regs[3];
}
$subject = htmlspecialchars(convert($subject));
// 拒否件名
foreach ($deny_subj as $dsubj) {
if (stristr($subject, $dsubj)) $write = false;
}
}
メールヘッダーのSubject:の後に\nの改行が入っているためなのか
原因はそれでしょうね。
電子メールのヘッダは、1行に収まらない場合、改行して先頭に空白文字を置くことになっています。
そこで、ご質問のソースの1行目は下記のようにすべきだと思います。
$head = ereg_replace("\r\n? ", "", $head); ↓ $head = ereg_replace("\r\n?|[\r\n]+[\t ]+", "", $head);
ただし、$head に入っている文字コードが処理系の文字コードと同じであることが前提です。
また、2行目以降の処理が正常に行われるかどうかは検証していません。
ありがとうございます!
さっそく試してみます。(^-^