Topic: メール送信で文字化けする件について報告するスレ  (Read 14423 times)

Pages: [1] 2  All   Go Down

#1: 18-Dec-2007, 03:00 AM


MEGU
Posts: 890

WWW
みなさまこんにちは。

先日より、snippetを利用してメール送信した際に受け取ったメールが
文字化けしているという報告があがっています。
---*---*---*---*---*---
2008.02.06 現在

Jotのメール通知が文字化けする...未決 解決策あり...解決策はこちらに記載しました

Newsletter スニペットで送信内容などが文字化け ... 2007.12.20 解決策あり(リンク先に記載)
ご助言ありがとうございました Cheesy

管理画面へのログイン画面にあるパスワード忘れたメールのタイトルが化ける...解決策こちら
 それと、htmlメールになってたみたいなので、textで送られるようにしてみました。

・WEBユーザからのパスワード変更リクエストに対して送信されるメールが化ける...調査中

---*---*---*---*---*---

私は、これまでのMODxのいきさつのことが実は良くわかっていないので、
yamaさんに確認しましたところ、メール送信に関しては、まだ日本語の環境で上手く送信できるような
手段についてこちらのフォーラムでもあがっていないよう...です。したがって、今後の課題として
なんとかクリアしたいと考え、このようなスレッドを立てました。

こちらで、tkmfさんも少しふれてらっしゃいますが、
http://modxcms.com/forums/index.php/topic,20922.msg129374.html#msg129374
何かワンクッションなりツークッションなりかますことで、日本語の環境でもメール送信が
上手く動作するようにならないでしょうか。

スニペットごとに対応するということより、できれば、コアのどこかになにかくわえるなりして、
おおかたのメール送信が正常に動作するようになることが望ましいと考えるのですが、
どんなものなのでしょうか。。自分ではプログラムがわからないので、なんともしようがありません。。

具体的にここのところをこうしたら...?みたいなのがまとまれば、コアチームに申し出てみたいと
考えているのですが。。みなさまどうぞご協力をお願い致します。。

それと、現在わかっているメール送信に関する不具合(特に文字化け関係)がありましたら、
こちらに報告して頂けるとうれしいです。あわせてよろしくお願い致します。
« Last Edit: 9-Feb-2008, 11:58 PM by MEGU »

#2: 18-Dec-2007, 07:48 AM


ZeRo
Posts: 428

WWW
JotもNewsletterも使ってないんですが、ほかのスレを見ると単にmail関数を使っているのでマルチバイト対応のメールが送れないということですね。
できれば、phpMailerとかクラスを使ってもらえばえとりあえずUTF-8ならUTF-8メールでいけるのでOKになるかと思います。
どうせなら、eFormのMODxmailerみたいにphpMailerを被せてもらうとありがたいんですが、日本語圏だけの問題でもあるので難しいかもです。
とりあえず、現状のスニペットの場合は・・・・
mail関数をmb_send_mailに置き換えてはどうでしょう??
mb_language("japanese");
mb_send_mail(引数はmail関数と同じ)

これでダメだとmb_send_mailの前にmb_internal_encoding($modx->config['modx_charset'])とか付けてみるとか・・。
さらにそれでもダメなときは、個々にphpMailer(MODxmailer)のクラスを使う方法で手直しかなぁ
WebSignupもmail関数ではなかったでしたっけ?? 管理画面のも?? 
使ってない部分にかなり疎かったりしますが・・・。 Cry

#3: 18-Dec-2007, 08:21 AM


MEGU
Posts: 890

WWW
ZeRoさん。どうもありがとうございます。

方向性としては、スニペットごとに日本で独自に対応した方が良い...のでしょうか。
管理画面から送ってくるメールも自分では、日本語の文章で試したことないので試してみます。

Quote
どうせなら、eFormのMODxmailerみたいにphpMailerを被せてもらうとありがたいんですが、日本語圏だけの問題でもあるので難しいかもです。

eFormは、オリジナルからそのような処理がしてあるということなんですね。。
すみません。確認なのですが。。
これは、マルチバイト言語圏ということでなく、日本語圏に限られる問題?なのでしょうか。。

#4: 18-Dec-2007, 09:14 AM


ZeRo
Posts: 428

WWW
MODxMailerは一応ほかの言語も意識はしているんですけど、日本みたいに変わったコードの使い分けをしてない場合は実際にはphpmailerにスルーです。
一応英語でもそのまま動くようにはなっています。

0.9.7のMODxmailerのクラスとは違いますが、あれにeFormの日本語部分を追加修正すれば使えるかなぁと思います。

いずれにしろ、ISO-2022-JP版は日本独自の修正じゃないかと思っているので(ほかの国の事情は詳しくはないですが、多分・・・)、個々に対応かなと思います。

0.9.7でMODxmailerクラスを利用するようにスニペットさんも置き換われば、手直しはこのMODxmailerだけになるんですけどね。

#5: 18-Dec-2007, 12:27 PM

Cassiopeia
Posts: 11

こんにちは。
ZoRoさんもおっしゃっていますが、mail関数そのまま使うと日本語を含むメールは文字化けしてしまいますね。
スニペット内でmail関数つかっているものだと、個別に対応しないといけなくなってしまいますし・・・

スニペットで動作確認したわけではありませんが、phpでメールを送る際に私は下のコードのようにすることが多いです。

Code:
mb_language('ja');
mb_internal_encoding("UTF-8");
$enc_header = "From: ". mb_encode_mimeheader("問い合わせメール","JIS", "B")." <info@xxxx.com>";
//ヘッダーに追加するものがあれば $enc_header .= "...\r\n" で足していく
mb_send_mail($to, $subject, $message, $enc_header );

headerの内容によっては$enc_headerは変更が必要かもしれません。

Newsletterのスニペットの場合だと、326行の 'iso-8859-1' を 'iso-2022-jp'に変更して、384行と391行のmail関数を下のものに置き換えればいける、かも。動作未確認です Grin
Code:
mb_language('ja');
mb_internal_encoding("UTF-8");
mb_send_mail($toemail[$i], $subject, $content, $headers);

間違いが含まれているかもしてませんが、参考になれば Smiley

#コードに余計なものが含まれていたので修正
« Last Edit: 18-Dec-2007, 12:44 PM by Cassiopeia »

#6: 18-Dec-2007, 10:01 PM

yamakatsu
Posts: 12

みんさん、こんにちわー。

やはり一筋縄ではいかないみたいですね。
色々、対応ありがとうございます。

Cassiopeiaさんありがとうございます!、ご提案のあった書き換えですが今やってみました。
…が、書き換えた場合メッセージの配信自体が行われなくなりました。

#7: 18-Dec-2007, 10:49 PM

tkfm
Posts: 911

WWW
こんにちは~
0.9.7のMODxmailerのクラスとは違いますが、あれにeFormの日本語部分を追加修正すれば使えるかなぁと思います。
バグトラックを漁っていたのですが、こんなのを見つけました。

この一番下のJason(OpenGeek)氏のコメント(2007/11/21付け)ですが... 超訳 Tongueすると...

0.9.7向けに開発している(メール送信の)やり方って、0.9.6.2に実装しようと思えばできるよね~
0.9.7の実装を開始したら、もっと詳細について書き込むよ。


と言っているように思います。

この開発の内容が具体的になったら、その中で日本語(ISO-2022-JP)への対応要望を上げていくと良いのでは?

#8: 19-Dec-2007, 08:49 PM


MEGU
Posts: 890

WWW
みなさま。ありがとうございます。

>tkfmさん。情報ありがとうございます。
そうですね。。0962時点で、ZeRoさんがおっしゃっているMODxmailerが
実装される気配ありですね。早い時期に各スニペットの作者さんが、切り替えに
踏み切って下さると嬉しいですね。。

#9: 21-Dec-2007, 02:58 AM


MEGU
Posts: 890

WWW
参考スレッド:
標準スニペットのContactFormから送ったメールが文字化けしてしまいます。
(これは日本語フォーラムができる前のスレでしょうか...)
WebSignupでのユーザー登録 で送信されるメールが化けている...解決策あり?要確認
« Last Edit: 21-Dec-2007, 03:02 AM by MEGU »

#10: 21-Dec-2007, 03:38 AM


MEGU
Posts: 890

WWW
Jotのメール送信で文字化けする件解決しました Cheesy >...ちょっとウソです。サブスクリプションが上手くできていません。

※2007.12.21 お騒がせして済みません。上手くできました。

jot.class.inc.php の以下を変更しました。

Code:
// Notifications

function doNotifySubscribers($commentid=0) {
global $modx;
if ($this->config["subscription"]["enabled"]) {
mb_language('ja'); // 挿入
mb_internal_encoding($modx->config['modx_charset']); // 挿入

... 中略...

$message = $tpl->Render();
mb_send_mail($user["email"], $this->config["subject"]["subscribe"], $message, "From: ".$modx->config['emailsender']."\r\n"."X-Mailer: Content Manager - PHP/".phpversion()); // mb_send_mail に変更
}
}
}
}

// Moderator Notification

function doNotifyModerators($commentid=0) {
global $modx;
if ($this->config["moderation"]["notify"]) {
mb_language('ja'); // 挿入
mb_internal_encoding($modx->config['modx_charset']); // 挿入

... 中略...

$message = $tpl->Render();
mb_send_mail($user["email"], $this->config["subject"]["moderate"], $message, "From: ".$modx->config['emailsender']."\r\n"."X-Mailer: Content Manager - PHP/".phpversion()); // mb_send_mail に変更
}
}
}
プログラム全くと言っていいほどわかってません。前回のNewsletter での修正を参考にさせて頂きました。
愚かなことをしておりましたら、どうぞご指摘下さい。。

---*---*---*---*---*---
サブスクリプションの方がうまくいってません。。なぜでしょう...??
« Last Edit: 19-Feb-2009, 08:05 AM by MEGU »

#11: 6-Feb-2008, 02:52 AM


MEGU
Posts: 890

WWW
管理画面へのログイン画面で、パスワード忘れたリンクがありますが、
そこから送信されるメールのヘッダが文字化けしていたりしたので、直してみました。

それと、content-type がtext/html だったので text/plain にしました。
(text/htmlのままにしました 2008.2.7)。

うちはメーラーがOEなのですが、これで文字化けせずに上手い具合に送信されてきます。
でも、他のメーラーの場合は、もしかしてうまくいかないのかな。。
いちお、携帯でも受信確認しました。

修正するのは、Forgot Manager Login プラグインです。

でも、これってインストーラが自動でインストールするんですよね。
もし、対応してもらう場合は、インストーラーに組み込んでもらわないと
いけないですね。

あと、これのFromをサイト名にしたい場合は、どうしたらいいのでしょうか。。

---*---*---*---*---*---
エラーが出ていたので、修正しました。2008.2.7
ZeRoさんが修正版を作って下さいましたので、そちらをご利用下さい。2008.2.9
 http://modxcms.com/forums/index.php/topic,20954.msg139373.html#msg139373
« Last Edit: 9-Feb-2008, 11:56 PM by MEGU »

#12: 9-Feb-2008, 08:58 AM


MEGU
Posts: 890

WWW
管理画面へのログイン画面で、パスワード忘れたリンクから送信されるメールが
文字化けする件ですが、ZeRoさんが作って下さったので、そちらをアップいたします。
(私が作ったのは、微妙にアヤシイです...)。

尚、こちらのプラグインは、オリジナルが「Content-type: text/html」になっています。
修正後のContentTypeもtext/html のままとなっています。ので、「text/plain」が良い場合は、
適時、コードを修正してください。

またその際は、以下の部分から
Quote
$body = <<<EOD
<p>{$_lang['forgot_password_email_intro']} <a href="{$modx->config['site_url']}manager/processors/login.processor.php?username={$user['username']}&hash={$user['hash']}">{$_lang['forgot_password_email_link']}</a></p>

<p>{$_lang['forgot_password_email_instructions']}</p>

<p><small>{$_lang['forgot_password_email_fine_print']}</small></p>
EOD;
htmlタグを削除しないと、メーラーによっては、読み取りに問題が出るかも知れません。


* plugin.forget.tpl (6.16 KB - downloaded 235 times.)

#13: 27-May-2008, 02:10 AM

yajima
Posts: 26

なんだか、質問が微妙なんですが。

ThunderbirdでeFormからのメールを受信した時に、メール一覧ペイン、メールプレビューペイン、メッセージウィンドウの3つの場合で、メールプレビューの時だけメールの件名が文字化けしてしまいます。

メール一覧では問題なく読めているので、普段はあまり気にしないのですが。。
クライアントに納品するには、ここの部分は不具合だと思うので、なんとか解決したいと思っています。

メールのソースを見た時に、

Quote
Subject: =?ISO-2022-JP?B?PT9p***************************RPz0xQiRC?=
 =?ISO-2022-JP?B?IVo9MUIoQk1FR*************MnElYSE8JWshWjBlTHRJ?=
 =?ISO-2022-JP?B?SiFbP*******KEI/PQ==?=

といった風に、Subjectのところが複数行になっているので、これが原因なのかなと思っています。
しかしながら、解決する方法が。。

#14: 27-May-2008, 04:44 AM


ZeRo
Posts: 428

WWW
そのeFormはISO-2022-JP版でしょうか?

サブジェクトが長い場合は、74文字ぐらいで折り返して複数行になるんですが、phpMailerのロジックの部分で
それが悪さしているのか・・・それか、TBの問題か・・・ちょっと判別は付かないんですが、Subjectをもうちょい短くして上の3行が2行になった場合はどうなりますでしょうか?
« Last Edit: 27-May-2008, 08:44 AM by ZeRo »

#15: 28-May-2008, 09:56 PM

yajima
Posts: 26

ISO-2022-JP版を使っています。

74文字くらいで折り返し。
2バイト文字で、37文字くらいで折り返すという事ですよね。

例えば「その他のお問い合わせ」という10文字の件名でもメールソースのSubjectでは、2行に渡って送信されています。

あと気がついたのですが、eFormから送ったメールのSubjectの1行目がいずれも同じ文字列になっているんです。


Subject: =?ISO-2022-JP?B?PT9pc28tMjAyMi1qcD9RPz0xQiRC?=


設置したeFormでは、コンボボックスで件名を選んで、送信するようにしているのですが。
いずれの件名を選んでも上記のSubjectの1行目が入り、2行目から本当の件名が始まっている感じなんですね。
この1行目の文字列は、意味の無い文字列なんでしょうか。


* subjectmojibake.gif (43.97 KB, 600x460 - viewed 303 times.)
« Last Edit: 28-May-2008, 10:00 PM by yajima »

#16: 29-May-2008, 01:46 AM


ZeRo
Posts: 428

WWW
「その他お問い合わせ」ぐらいの長さだと2行になることはないはずなので、何かが混入しちゃってるような気がします。
試しに、コンボボックスから普通のテキスト入力に変えてみてテストしてみてください。
これでOKだとsるうと、SELECTされたものが正しく取得できないってことかも知れませんねぇ。
となるとeForm本体の部分になっちゃうんだけど Huh

#17: 29-May-2008, 04:02 AM

yajima
Posts: 26

提案いただいたように、コンボボックスをテキスト入力にしてみました。

結果、変わらず。
同じ文字化けの症状です。

メールソフトの仕様なんでしょうか?
GMailで受信した場合は、文字化けはないみたいです。

かといって、ユーザーがどのメールソフトを使うかわかりませんし。
「当サイトからのメールはGMailに最適化されています」とか注意書きするのも変な話ですね。

どこか設定に’抜け’があるのかもしれません、一からソースを読み直してみます。


* subjectmojibake2.gif (48.07 KB, 763x418 - viewed 289 times.)

#18: 29-May-2008, 05:18 AM


ZeRo
Posts: 428

WWW
メールソフトではないと思います。
明らかに、Subjectが2行になっているのがおかしいですねぇ。
どこかでSubjectの部分が付け加えられてるような・・・。
試しに、現状のフォームでのSubjectの変数を変えてもらって、eFormの呼び出しパラメタにSubjectを固定でつけてみてやってみてください。
これでも2行で出てくるとするとeFormのスニペットかIncludeしているどこかでSubjectの文字列に対して何かやってるような気がします。
逆にパラメタで出ない場合は、eFormで使っているフォームのチャンクの中身?かも。

ちなみに、お問い合わせ をSubjectにしてやってみたんですが
Subject: =?iso-2022-jp?Q?=1B$B$*Ld$$9g$o$;=1B(B?=

こんな感じです。
« Last Edit: 29-May-2008, 05:37 AM by ZeRo »

#19: 29-May-2008, 05:58 AM

tkfm
Posts: 911

WWW
私もZeRoさんのISO-2022-JP版で試してみました。
eFormのフォームに
Code:
<input name="subject" type="hidden" value="その他お問い合わせ" />
として送信しましたが、Thunderbird(2.0.0.14)で受信したメールのサブジェクトは正しく「その他お問い合わせ」と表示されました。
ちなみに、エンコードされた文字列は
Code:
Subject: =?iso-2022-jp?Q?=1B$B$=3D$NB>$*Ld$$9g$o$;=1B(B?=
となっていました。

yajimaさんが書かれた
Code:
Subject: =?ISO-2022-JP?B?PT9pc28tMjAyMi1qcD9RPz0xQiRC?=
ですが、デコードしてみると
Code:
=?iso-2022-jp?Q?=1B$B
となっていて、上記の正しいエンコード文字列の先頭の部分と同じになっています。
何かヒントになるでしょうか?

#20: 29-May-2008, 06:31 AM

yajima
Posts: 26

tkfmさんのが、ヒントかもしれませんね。

Quote
yajimaさんが書かれた
Code:

Subject: =?ISO-2022-JP?B?PT9pc28tMjAyMi1qcD9RPz0xQiRC?=

ですが、デコードしてみると
Code:

=?iso-2022-jp?Q?=1B$B

となっていて、上記の正しいエンコード文字列の先頭の部分と同じになっています。
何かヒントになるでしょうか?

これって、エンコード済みのテキストに対して、’もう一度’エンコードをしているって事ですよね。(きっと)
たぶんどこかで、エンコードをループしているのかも知れませんね。

さっき、正しく送信できているMODxサイトのeForm関連ファイルを上書きしてみたんですが、現象変わらずだったので、作成したドキュメント、チャンク、スニペットのどこかで間違っているんでしょうね。


なんだか、解決方法が見えてきたみたいなので、実験と結果報告にまた来ますね。
Pages: [1] 2  All   Go Up
0 Members and 1 Guest are viewing this topic.