こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

メール転送でPHPの正規表現です。

sakuraサーバーで、mailfilterを使用して、パイプでメール転送しようという魂胆です。
http://ameblo.jp/topepe/entry-10325428465.html
※PHPにて正規表現を使って整形してメール転送しようと思っています。

#!/usr/local/php/5.2.17/bin/php-cgi

<?php
$content = null;

$fp=fopen("php://stdin",'r') or die('File Open Error');

while( !feof($fp) ){
$content .= fgets( $fp ,1024);
}
mb_language("japanese");
mb_internal_encoding("UTF-8");
mb_send_mail("xxx@example.com","subject",$content);
?>

のような簡単な転送では成功しています。
そこでpreg_replaceでメールヘッダーを削ったり、本文中の日本語句を削除してから転送しようとしているのですが、preg_replaceをかけるとすべて消えてしまいます。
◎英数字だけの正規表現(/\A(.*?).jp/sなど)の場合はうまく動きます。
×日本語が入ると駄目です。(/\A(.*?).受信者/usなど)

sakuraの場合、パイプで動かすPHPファイルはEUC+LFでないと動きません。
なので

$content_utf8 = mb_convert_encoding($content,"UTF-8","EUC-JP");
$patturn_utf8 = mb_convert_encoding("/\A(.*?)受信者/us","UTF-8","EUC-JP");
$c = preg_replace($patturn_utf8,"",$content_utf8);
mb_send_mail("xxx@example.com","subject",$c);

などとしていますが、駄目です。
preg_matchだとメールすら転送されません。

※ヘッダーを削るだけならPEARもありだと思いますが、本文のもろもろを削るので、
PEARがあろうが、preg_replaceを使いたいことには変わりありません。
できればPEARはインストールしないでただの正規表現で行きたい、という段階です。

なにかヒントはありますでしょうか。


sakuraサーバー
php/5.2.17 php-cgi
PHPファイルはEUC+LF

投稿日時 - 2012-06-11 21:45:08

QNo.7527975

すぐに回答ほしいです

質問者が選んだベストアンサー

> sakuraの場合、パイプで動かすPHPファイルはEUC+LFでないと動きません。
> なので
>
> $content_utf8 = mb_convert_encoding($content,"UTF-8","EUC-JP");


PHPファイルがEUCだからといって、
stdinから取り込んだ文字列がEUCに自動変換されている訳ではありません。

$c= mb_detect_encoding($content);
mb_send_mail("xxx@example.com","subject",$c);

して確認してみてはどうでしょう。

投稿日時 - 2012-06-12 10:35:18

お礼

mb_detect_encodingが当たりました!!!
ありがとうございます。
プロセスは回答いただいた通りなので特記しません。

その後、メールの整形で文字コードの変換をしまくってpreg_replaceを多様したら思い通りになりました。

とても助かりました。ありがとうございます。

投稿日時 - 2012-06-12 21:36:56

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

他人から送られてくるメールのエンコードは何か指定できません
仕方ないので、まずはメールヘッダ内の
Content_Transfer_Encoding
を抽出して、その値でmv_convert_encodingしてみてください

投稿日時 - 2012-06-12 11:23:33

お礼

なるほど!
確かにメールの文字コードまで考えていませんでした、、、
ありがとうございます。かなりの大大ヒントになりました!!!

※参照にきた方へ:文中のmv_convert_encodingはmb_convert_encodingっすね。

投稿日時 - 2012-06-12 21:34:27

あなたにオススメの質問