メール送信時のSubject文字化け
投稿者: typista | 投稿日時: 2005-10-28 19:50 | 閲覧: 57328回
お世話なります。
XOOPSのメール送信で、Subjectが文字化けします。
どなたか対処法をご存知の方、ご教授ください。
設定文字列:[XOOPS]承認が完了しました
文字化け :[XOOPS]承認が完了しま$ 靴?
コードは、次のように記述し、EUC保存しており、本文(body)は文字化けしません。
---
$xoopsMailer =& getMailer();
$subject = ”[XOOPS]承認が完了しました”;
$xoopsMailer->setSubject( $subject );
$xoopsMailer->send();
---
※以下の文字コード変換もNG(化け方は違います)でした。
上記の文字化けはmb_convertしてない例です。
$subject = mb_convert_encoding( $subject, "SJIS", "EUC-JP" );
$subject = mb_convert_encoding( $subject, "EUC-JP", "SJIS" );
---
XOOPS 2.0.9.2
PHP Version 4.4.0
です。
XOOPSのメール送信で、Subjectが文字化けします。
どなたか対処法をご存知の方、ご教授ください。
設定文字列:[XOOPS]承認が完了しました
文字化け :[XOOPS]承認が完了しま$ 靴?
コードは、次のように記述し、EUC保存しており、本文(body)は文字化けしません。
---
$xoopsMailer =& getMailer();
$subject = ”[XOOPS]承認が完了しました”;
$xoopsMailer->setSubject( $subject );
$xoopsMailer->send();
---
※以下の文字コード変換もNG(化け方は違います)でした。
上記の文字化けはmb_convertしてない例です。
$subject = mb_convert_encoding( $subject, "SJIS", "EUC-JP" );
$subject = mb_convert_encoding( $subject, "EUC-JP", "SJIS" );
---
XOOPS 2.0.9.2
PHP Version 4.4.0
です。
コメント(57)
新しいものから |
古いものから |
ネスト表示 |
Re: メール送信時のSubject文字化け
Re: メール送信時のSubject文字化け
Re: メール送信時のSubject文字化け
投稿者: okuhiki | 投稿日時: 2005-10-29 1:47
\xoops-2.0.13a-JP\html\language\japanese\xoopsmailerlocal.php Line130として、4.4.0なら先頭に改行を入れて試たところ化けなくなりました。
なぜ化けなくなったのか、また他の問題が発生する可能性なども不明です。
$encoded = mb_convert_encoding((phpversion() == "4.4.0" ? "\n" : "").$str, _CHARSET, mb_detect_encoding($str));なぜ化けなくなったのか、また他の問題が発生する可能性なども不明です。
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
投稿者: nobunobu | 投稿日時: 2005-11-5 20:36
PHP4.4.0における、メールヘッダの文字化けについて調査したところ、PHP4.4.0以降でmb_encode_mimeheader()が想定外の動作を行う事が判りました。
次リリースにて対応版をリリースする前提で、ここで暫定修正版を公開させて頂きます。
一応、PHP4.3.11 4.4.1 4.4.2-dev(XREA.COMの最新環境)にて動作確認をさせて頂いておりますが、環境によって所定の動作が行われない場合には、当スレッドにレスを下さい。
[暫定修正版入手先]
xoopsmailerlocal.php
上記リンクよりファイルをダウンロードして、language/japanese/xoopsmailerlocal.php と置き換えて下さい。
現状の正式版との差分については、[差分]にてご覧いただけます。
次リリースにて対応版をリリースする前提で、ここで暫定修正版を公開させて頂きます。
一応、PHP4.3.11 4.4.1 4.4.2-dev(XREA.COMの最新環境)にて動作確認をさせて頂いておりますが、環境によって所定の動作が行われない場合には、当スレッドにレスを下さい。
[暫定修正版入手先]
xoopsmailerlocal.php
上記リンクよりファイルをダウンロードして、language/japanese/xoopsmailerlocal.php と置き換えて下さい。
現状の正式版との差分については、[差分]にてご覧いただけます。
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
投稿者: nobunobu | 投稿日時: 2005-11-7 11:38
引用:
XREAということは、サーバにより若干の違いはあるかもしれませんが小生のサイトと同じで、PHP Version 4.4.2-dev ですね。
先ほど、念のため自サイトにて「ユーザ宛メール送信」を試しましたが、うまく配信されています。
あと数点質問させて下さい。
1.「ユーザ宛メール送信」を実行した場合に、
引用:
の様な完了画面は表示されますか?
それともその他のメッセージなど表示されるのでしょうか?
2.「管理者メニュー」の「システム管理」-「一般設定」-「メール設定」画面にて、「メール送信方法」は、
[PHP mail()]
[sendmail]
[SMTP]
[SMTPAuth]
のいずれに設定されていますか?
selaさんは書きました:
使っているXOOPSバージョンは2.0.13a-JPです。
サーバーはXREAです。
よろしくお願いします。
XREAということは、サーバにより若干の違いはあるかもしれませんが小生のサイトと同じで、PHP Version 4.4.2-dev ですね。
先ほど、念のため自サイトにて「ユーザ宛メール送信」を試しましたが、うまく配信されています。
あと数点質問させて下さい。
1.「ユーザ宛メール送信」を実行した場合に、
引用:
XXXXXさん宛にメールを送信しました
メッセージの送信を完了しました
の様な完了画面は表示されますか?
それともその他のメッセージなど表示されるのでしょうか?
2.「管理者メニュー」の「システム管理」-「一般設定」-「メール設定」画面にて、「メール送信方法」は、
[PHP mail()]
[sendmail]
[SMTP]
[SMTPAuth]
のいずれに設定されていますか?
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
投稿者: nobunobu | 投稿日時: 2005-11-7 22:17
引用:
ってのが、大きな助けになりました。
やはり、特定の文字列長にて無限ループになっておりました
ということで、
引用:
を修正版に差し替えました。
再度ダウンロードしていただけませんでしょうか。
漢字7文字+カタカナ9文字
ってのが、大きな助けになりました。
やはり、特定の文字列長にて無限ループになっておりました

ということで、
引用:
[暫定修正版入手先]
xoopsmailerlocal.php
上記リンクよりファイルをダウンロードして、language/japanese/xoopsmailerlocal.php と置き換えて下さい。
を修正版に差し替えました。
再度ダウンロードしていただけませんでしょうか。
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
投稿者: sela | 投稿日時: 2005-11-7 23:00
早速の対応ありがとうございます! 
通常の「ユーザー宛メール送信」はうまくいきました!
ところが、そもそもの問題だったPopnupBlogから配信されるメールでは文字化けをしてしまいます。PopnupBlogはメール送信の際、Xoops本体のメール関数を使っているようなので、こちらが修正されれば改善されるだろうと期待していました。ただ、現実はそうではないようです。
メールからブログに投稿できるのですが、それは正常に機能します。その後、「投稿されました」という返信メールが送信者に送られるのですが、サイト名が表示されるべきタイトルが白紙で件名も文字化けをしています。
さらに、ブログに投稿されるとメーリスに配信する機能がついているのですが、上書き前のxoopsmailerlocal.phpでは件名などが文字化けしていたもののちゃんと送信されていたのが、修正版では送信すらしてくれないみたいです。
何か、分かることがありましたらご教示ください。
よろしくお願いします。

通常の「ユーザー宛メール送信」はうまくいきました!
ところが、そもそもの問題だったPopnupBlogから配信されるメールでは文字化けをしてしまいます。PopnupBlogはメール送信の際、Xoops本体のメール関数を使っているようなので、こちらが修正されれば改善されるだろうと期待していました。ただ、現実はそうではないようです。
メールからブログに投稿できるのですが、それは正常に機能します。その後、「投稿されました」という返信メールが送信者に送られるのですが、サイト名が表示されるべきタイトルが白紙で件名も文字化けをしています。
さらに、ブログに投稿されるとメーリスに配信する機能がついているのですが、上書き前のxoopsmailerlocal.phpでは件名などが文字化けしていたもののちゃんと送信されていたのが、修正版では送信すらしてくれないみたいです。
何か、分かることがありましたらご教示ください。
よろしくお願いします。
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
投稿者: sela | 投稿日時: 2005-11-8 1:59
調査していただけるだけ、大変感謝しています!
今後の改良の手助けになればと思います。
使っているPopnupBlogのバージョンはv2.21です。
役に立つかわかりませんが、一応メール送信に関する記述があるPopnupBlogUtils.phpの一部を掲載しておきます。
よろしくお願いします。
引用:
今後の改良の手助けになればと思います。
使っているPopnupBlogのバージョンはv2.21です。
役に立つかわかりませんが、一応メール送信に関する記述があるPopnupBlogUtils.phpの一部を掲載しておきます。
よろしくお願いします。
引用:
function send_mailinglist($from,$to,$uname,$subj,$blogname,$blogurl,$message='',$files) {
global $xoopsConfig,$BlogCNF;
$debug = 0;
$xoopsMailer =& getMailer();
$xoopsMailer->useMail();
$xoopsMailer->setTemplateDir($BlogCNF['path']."language/".$xoopsConfig['language']."/mail_template/");
$xoopsMailer->setTemplate("mailinglist.tpl");
$xoopsMailer->setToEmails($to);
$xoopsMailer->assign("POST_TITLE", $subj);
$xoopsMailer->assign("POST_MESSAGE", $message);
$xoopsMailer->assign("BLOG_URL", $blogurl);
$xoopsMailer->assign("SITENAME", $xoopsConfig['sitename']);
$xoopsMailer->assign("SITEURL", $xoopsConfig['xoops_url']."/");
$xoopsMailer->assign("BLOG_UNAME", $uname);
$xoopsMailer->assign("BLOG_MAIL", $from);
$xoopsMailer->setFromEmail($from);
$xoopsMailer->setFromName($uname);
$subj = sprintf(_MD_POPNUPBLOG_MAILINGLIST,$xoopsConfig['sitename'],$blogname);
if ( function_exists('mb_encode_mimeheader') )
$subj = mb_encode_mimeheader( $subj, PopnupBlogUtils::get_mailcode(), "B" );
$xoopsMailer->setSubject($subj);
if ($debug){ echo "Attached files=".count($files)."
"; }
for($i=0;$i if ($debug){ echo "Path=".$files[$i]['path']." File name=".$files[$i]['name']."
"; }
if (preg_match("/\.(gif|jpe?g|png|bmp)$/i",$files[$i]['path'])){
$size = getimagesize($files[$i]['path']);
if ($size[0] // Send Thumbnail or Under Thumbnail size
$xoopsMailer->multimailer->AddAttachment($files[$i]['path'],$files[$i]['name'],"base64",$size['mime']);
}
} else {
// Send Attach file
$xoopsMailer->multimailer->AddAttachment($files[$i]['path'],$files[$i]['name']);
}
}
$xoopsMailer->send();
}
function send_notify($blogid,$blogname,$blogurl,$subj,$message=''){
// RMV-NOTIFY
// Define tags for notification message
$tags = array();
$tags['BLOG_NAME'] = $blogname;
$tags['POST_NAME'] = $subj;
$tags['POST_URL'] = $blogurl;
$tags['POST_CONTENT'] = $message;
$notification_handler =& xoops_gethandler('notification');
$notification_handler->triggerEvent('blog', $blogid, 'new_post', $tags);
$notification_handler->triggerEvent('global', 0, 'new_post', $tags);
$notification_handler->triggerEvent('global', 0, 'new_fullpost', $tags);
// If user checked notification box, subscribe them to the
// appropriate event; if unchecked, then unsubscribe
if (!empty($xoopsUser) && !empty($xoopsModuleConfig['notification_enabled'])) {
$notification_handler->subscribe('blog', $blogid, 'new_post');
}
}
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
投稿者: domifara | 投稿日時: 2005-11-8 8:58
引用:
これは
PopnupBlogの方で、先にメールヘッダーのエンコードをしてしまっているため
xoopsmailerlocal.php
の方で2重に編集されてしまって文字化けしてしまいます。
これが、以前のmb_encode_mimeheaderを使っている
(xoops2.0.13aJP)ものだとなぜそうならないか?
というのが、どうも
mb_encode_mimeheaderは,内部に
すでに変換済かどうかの判定を持っているみたいで
変換済の場合はそのまま出てくる・・みたいな動きをするので
今までは問題でなかったのではないかと思います
テストコード
何回重複してmb_encode_mimeheaderしても、結果はおなじなります
だから、
今回の4.4.x対応のも
mb_encode_mimeheaderの代わりをするところは
すでに、変換済かどうか判定処理しないといけないと思います
line 127
の下
(こんなので判定効くのかな?)
function encode_header ($str, $position = 'text', $force=false) { $encode_charset = $this->CharSet; if (preg_match ( '|' . preg_quote('=?' . $encode_charset . '?'). '.\?|', $str) ) { $encoded = $str ; return $encoded; }
| でなくて / ごめんなさい間違えてました
あたりを入れるとか
訂正
ふにゃ間違えてた
line 128 にいれないといけなかったです
追記、
2重に変換しちゃう問題と
php4.4.xでmb_encode_mimeheader使っているモジュールは?
文字化けしちゃう問題とは別で
両方対応が必要でしたね
selaさんは書きました:
使っているPopnupBlogのバージョンはv2.21です。
役に立つかわかりませんが、一応メール送信に関する記述があるPopnupBlogUtils.phpの一部を掲載しておきます。if ( function_exists('mb_encode_mimeheader') ) $subj = mb_encode_mimeheader( $subj, PopnupBlogUtils::get_mailcode(), "B" ); $xoopsMailer->setSubject($subj);
これは
PopnupBlogの方で、先にメールヘッダーのエンコードをしてしまっているため
xoopsmailerlocal.php
の方で2重に編集されてしまって文字化けしてしまいます。
これが、以前のmb_encode_mimeheaderを使っている
(xoops2.0.13aJP)ものだとなぜそうならないか?
というのが、どうも
mb_encode_mimeheaderは,内部に
すでに変換済かどうかの判定を持っているみたいで
変換済の場合はそのまま出てくる・・みたいな動きをするので
今までは問題でなかったのではないかと思います
テストコード
$subj = "漢字" ;
$subj = mb_encode_mimeheader( $subj , "UTF-8", "B" );
echo $subj ;
echo "<br />" ;
$subj = mb_encode_mimeheader( $subj , "UTF-8", "B" );
echo $subj ;
何回重複してmb_encode_mimeheaderしても、結果はおなじなります
だから、
今回の4.4.x対応のも
mb_encode_mimeheaderの代わりをするところは
すでに、変換済かどうか判定処理しないといけないと思います
line 127
function encode_header ($str, $position = 'text', $force=false) {
$encode_charset = 'ISO-2022-JP';
の下
(こんなので判定効くのかな?)
function encode_header ($str, $position = 'text', $force=false) { $encode_charset = $this->CharSet; if (preg_match ( '|' . preg_quote('=?' . $encode_charset . '?'). '.\?|', $str) ) { $encoded = $str ; return $encoded; }
| でなくて / ごめんなさい間違えてました
function encode_header ($str, $position = 'text', $force=false) {
$encode_charset = $this->CharSet;
if (preg_match ( '/' . preg_quote('=?' . $encode_charset . '?'). '.\?/i', $str) ) {
$encoded = $str ;
return $encoded;
}
あたりを入れるとか
訂正
ふにゃ間違えてた
line 128 にいれないといけなかったです
追記、
2重に変換しちゃう問題と
php4.4.xでmb_encode_mimeheader使っているモジュールは?
文字化けしちゃう問題とは別で
両方対応が必要でしたね
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
投稿者: domifara | 投稿日時: 2005-11-8 9:41
さっきの間違えたので、訂正したのですが
念の為、私の改造テスト中のxoopsmailerlocal.php
こちらに置いておきました
注意:上記余計にものが追加されています
PHP Mailer が 1.7x とかでメソッドの名が微妙に変わっています
encode_header が EncodeHeader
addr_format が AddrFormat
となっいます。xoopsmailerlocal.phpは
コンパチに動くようにしているのです。
念の為、私の改造テスト中のxoopsmailerlocal.php
こちらに置いておきました
注意:上記余計にものが追加されています
PHP Mailer が 1.7x とかでメソッドの名が微妙に変わっています
encode_header が EncodeHeader
addr_format が AddrFormat
となっいます。xoopsmailerlocal.phpは
コンパチに動くようにしているのです。
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
投稿者: domifara | 投稿日時: 2005-11-8 9:54
selaさんへ
のところ
PHP 4.4.xでは
mb_encode_mimeheader
が予期せぬ文字化けを起すということなので
この行を削除するか
コメント // のマークを行の先頭
にいれてみてください
if ( function_exists('mb_encode_mimeheader') )
$subj = mb_encode_mimeheader( $subj, PopnupBlogUtils::get_mailcode(), "B" );
のところ
PHP 4.4.xでは
mb_encode_mimeheader
が予期せぬ文字化けを起すということなので
この行を削除するか
コメント // のマークを行の先頭
// if ( function_exists('mb_encode_mimeheader') )
// $subj = mb_encode_mimeheader( $subj, PopnupBlogUtils::get_mailcode(), "B" );
にいれてみてください
Re: メール送信時のSubject文字化け[PHP 4.4.x用暫定対応版公開]
投稿者: sela | 投稿日時: 2005-11-8 14:06
domifaraさん、ありがとうございます。
一つ確認なんですが、xoopsmailerlocal.phpを上書きして、PopnupBlogの方をコメントアウトするという両方をやるのでいいんですよね?
ためしにやってみました。検証点は以下の3つです。
1.ユーザ宛メール送信ではメール送信ができましたが、送信ボタンを押した後に出るメッセージに引用:なんていうのが出てしまいます。
2.メールからブログへの投稿は問題なくいき、その後サイトから帰ってくる「投稿を受け付けました」の返信メールで件名が件名が文字化けしなくなったのですが、マルチバイト18文字で途切れてしまいます。また、本文の方にメールヘッダーのようなものが入るようになりました。(そこには、以前タイトル部に表示されていた文字化けしたタイトルも一番上にあります)
3.ブログに投稿後にメーリスに配信されるのですが、こちらのほうはほぼ文字化けせずに来ました!今までは件名と本文の一部が文字化けしていたのですが、今回は件名は最初のマルチバイト35字ぐらいは問題なく最後の1文字だけ文字化けしています。本文は今のところ一箇所だけ文字化けしている程度です。まだ長い文章ではためしていませんが。。
以上、ご報告まで。
一つ確認なんですが、xoopsmailerlocal.phpを上書きして、PopnupBlogの方をコメントアウトするという両方をやるのでいいんですよね?
ためしにやってみました。検証点は以下の3つです。
1.ユーザ宛メール送信ではメール送信ができましたが、送信ボタンを押した後に出るメッセージに引用:
xoopsmailerlocal.php100666 000000 000000 16306 10333770636 12621 ustar00rootwebmasterさん宛にメールを送信しました
2.メールからブログへの投稿は問題なくいき、その後サイトから帰ってくる「投稿を受け付けました」の返信メールで件名が件名が文字化けしなくなったのですが、マルチバイト18文字で途切れてしまいます。また、本文の方にメールヘッダーのようなものが入るようになりました。(そこには、以前タイトル部に表示されていた文字化けしたタイトルも一番上にあります)
3.ブログに投稿後にメーリスに配信されるのですが、こちらのほうはほぼ文字化けせずに来ました!今までは件名と本文の一部が文字化けしていたのですが、今回は件名は最初のマルチバイト35字ぐらいは問題なく最後の1文字だけ文字化けしています。本文は今のところ一箇所だけ文字化けしている程度です。まだ長い文章ではためしていませんが。。
以上、ご報告まで。
Powered by Plugg


