SimpleNews翻訳しました

  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • warning: Creating default object from empty value in /home/groups/d/dr/drupal-jp/htdocs/main/sites/all/modules/spam/spam.module on line 548.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.
  • : Function ereg() is deprecated in /home/groups/d/dr/drupal-jp/htdocs/main/includes/file.inc on line 649.

SimpleNewsモジュール
http://drupal.org/project/simplenews
を翻訳しました。
必要な方はコメントください。

で、送信者名を設定できる仕様になっているのですが、
メールにはメールアドレスしか表示されないバグがあります。

どなたか解決策がお分かりの方がいらっしゃったらコメントください。
よろしくお願いします。

この記事のトラックバックURL:

http://drupal-jp.osdn.jp/main/trackback/107

コメント

typoのようです。

もしやjBoxモジュールのメールラッパーの不具合じゃなかろうか、とドキドキしたのですが違いました。

simplenews.moduleの1281行目の$from_emailを$fromに変えると送信者名も出ると思います。

ありがとうございます!

simplenews.moduleの1281行目の$from_emailを$fromに変えると送信者名が出ました。
ありがとうございます。
で、本家にパッチを上げとこうと思うのですが、書き方がわかりませんorz..
お手すきの時で結構ですので教えていただければ幸いです。

翻訳はどこに置きましょうか?Drupal-jBoxの方に上げときましょうか?

パッチの作り方

diffコマンドを使います。
diff -u 元のファイル 新しいファイル > パッチファイル
で出来ます。

翻訳はそうですね、Drupal-jBoxの方に上げて頂けますか。

diffコマンド…

diffコマンド、と言われても…スンマセン、わかりません。

翻訳はDrupal-jBoxに上げておきます。

あたた。。

送信者を日本語にすると、Yahoo!メールのようなUTF8ダメのウェブメールだと文字化けしますね。
うーん。。。

ソースを見た感じだと

ヘッダの処理の部分でMIMEエンコードされていないので
駄目っぽいですね。

とりあえずの対応であれば、
simplenews/simplenews.moduleの1218行目を

//$from = isset($mail->from_name) ? '"'. addslashes($mail->from_name).'" <'. $from_email .'>' : $from_email;
$from = isset($mail->from_name) ? '"'. mime_header_encode($mail->from_name).'" <'. $from_email .'>' : $from_email;

このように書き換えれば大丈夫だと思います。

また、他のところでもこのようなソースがあるのでしたら
jbox内のdrupal_mail_wrapperを見直す必要があるかもしれません。
mb_send_mailの第4引数はMIMEエンコードされないらしいので、
自前で処理してやる必要がありそうです。
結構大変そうなので諦めました・・・・

#多言語対応ということで、モジュール側での対応でよいと思うのですが、
#どうなんでしょうか?

あれ?

jBoxのメールラッパーはヘッダをISO-2022-JPでエンコードしています。
jBox使ってます? > ryoさん

勘違いだったらすみません。

drupal_mail_wrapper内
mb_send_mailがある場合には、ヘッダのエンコードは行っていないですよね?
(mb_send_mail任せになっている)
その場合、第4引数で渡す拡張ヘッダはMIMEエンコードされないらしいです。
これは私の環境でも再現しました。(PHP 5.1.6)

次に、mb_send_mailが無い場合でも
foreach (array_merge($headers, $ct) as $name => $value) {
$ha[] = $name .': '. _jbox_mime_header($value, $encoding, strlen($name) + 2);
}
このようにエンコードされていますが、これだと
$headers[from] = '"日本語名"<name@host>';
の場合には、この値("日本語名"<name@host>)がすべてMIMEエンコードされてしまうために、
やはり不具合になってしまうと思うのですがどうでしょう?
# こちらもif (function_exists('mb_send_mail') && 0)とコードを書き換えて
# テストしてみたところ、Fromヘッダ全文がエンコードされてしまいおかしくなってました。

##検討違いだったらすみません・・・

ありゃりゃ

本当ですねぇ。直しますね。

結局のところ

結局のところ、この件はどうなっているのでしたっけ?スミマセン、原理的なことがわかっていないもので。
Simple News にだいぶ以前に上げたIssue
"From name" doesn't show up in the mail.
に対して、
http://drupal.org/node/222530#comment-913882
といったコメントがついて、Fixした新バージョンが出たのでこれで解決したのかと思ったのですが、依然として
/admin/content/newsletters/settings
に記載した「日本語の送信者名」は送られてくるメールには反映されていません。
コアのメール送信(個人コンタクトフォームなど)が日本語環境でどうなっているかを知りたいとか言われているのですが、
J-boxモジュールを入れているので純然たるコアの環境でもないし、
個人コンタクトフォームの送信者名はユーザー登録メールアドレスの@以前の部分で勝手も違うのであまり意味ないかと思うのですが。。。

JBoxの改良は途中です(^^;;

メールに反映されないのは多分SimpleNews側の問題です。これは昨日付けのパッチで直ってます?

JBox側の問題としては、日本語名が反映されたメールヘッダがおかしくなります。
この改良は9割方できているのですがそこで止まってます。関連RFCの解釈が微妙でメーラソフトのソースを解析したりしているうちにねを上げてしまいました。orz
近々何とかしますね。

あ、返信ありがとうございます

http://drupal-jp.sourceforge.jp/main/node/122
での書き方がちょっと舌足らずでした。スミマセン。
昨日7/17付けのパッチ
http://drupal.org/node/222530#comment-925495
で直ってます。

それにしても
//'From' => $from,

//
を取るだけとは・・・。

改定版の公式リリースはまだですが、
同日付のDev版 simplenews 5.x-1.x-dev
http://drupal.org/node/104298
が、この件の修正を反映したものになってます。

追記
ということで受信メールでの「送信者名」はちゃんと表示されるようになりましたので、私としてはjBoxのほうはゆっくりで全然OKです。

フォローありがとうございます

zoracさん、ktakagiさん、フォローありがとうございます。

jBoxモジュールはもちろん、使わせてもらってます。>zoracさん

わからないなりちょっと気になったのですが、HTMLメールを送りたい場合やニュースレターメールにファイルを添付したい場合は
Mime Mailモジュールというのを導入しないといけないらしいです。
http://drupal.org/project/simplenews
Newsletters can be sent as plain text or HTML. HTML newsletters require the Mime Mail module.
私は導入していないのですが、このモジュールを導入すると、また話が変わってきたりするのでしょうか?

それと、結局、
simplenews.moduleの1281行目の$from_emailを$fromに変える
というのは元に戻したほうがいいのでしょうか?

Mime Mailは

Mime Mailを入れるとそちらでメール送信を行うので少し話は変わってきます。が、そもそもDrupalコアのメールヘッダのエンコードがRFC違反なので問題解決にはならないと思います。

一番正しいのは、

  • DrupalコアのエンコードをRFC準拠にする。
  • メールラッパー(jBox含む)をコアに合わせてRFC準拠にする。
という順序でしょうか。ただコアにコミットするのは面倒というかコード書かなきゃ話が進まないので、jBoxのラッパーをRFC準拠(と云っても簡易なものになりそうですが)にしようかと思っています。
それが出来れば今回の問題は解決しますし、他の解決方法は無いかと思います。

そういう意味では、現時点では$from_emailに戻した方がいいんじゃないでしょうか。

ありゃ、コア批判になっちゃったかな?

DrupalコアがRFCに違反しているのは確かなのですが、それもまぁ故がないことではないので一応フォローしておきます。

メールヘッダには"From"の様に構造を持ったものもありますので、本来はその構造に従ってエンコードを行わなければなりません。ただ、既にべたテキストになってしまっているヘッダの場合は、構造解析を行わなければならなくなるので面倒です。処理速度にも影響しますし。

で、「Drupalのメール送信でそこまでする必要があるの?」となると、トレードオフを考えれば「必要なし」も妥当な結論かと思います。どうしても必要ならメールラッパを作ればいいわけですし。
ですから、Drupalコアのメール送信機能は「エンコードが必要で構造を持ったヘッダは渡してはならない」が仕様だと解釈できます。その場合は、SimpleNewsがコアの仕様に反しているということになります。

SimpleNewsに関して

SimpleNewsに関して言うと、4.7までは、メールの処理については
activeMailLib.php
とかいうプログラムが同梱されていて、それに頼っていたみたいです(5.xからはなくなってます)。
なので、かつてはコアのメール送信の仕組みとは別物になっていて、4.6のサイトに導入した際、
文字化けのフィックスを頼んだ時とっても大変だった苦い思い出があります。
activeMailLib.phpを使わなくなったとは言え、何かのその名残りがあるのでしょうかね?

追記:あ、翻訳はDrupal-jBoxに上げておきました。