Zend_Mailで日本語のFrom情報を扱う

以前の記事で、Fromの名前の部分が化けてしまうということを書きましたが、

解決方法がわかったので、ここに残しておきます。


参考になったのは http://iandeth.dyndns.org/mt/ian/archives/000628.html です。

ここに、日本語のヘッダーを扱うためには、ISO-2022-JPに文字コードを変換して、

さらにbase64でエンコードして、さらに “=?ISO-2022-JP?B?”と”?=”で囲む必要があると。

今まで、mb_encode_mimeheaderを何も考えずに使っていましたが、

内部では上記のbase64エンコード以降のことをやってくれていたんですね。


ここまでを踏まえて、Zend_Mailのソースを見たところ、メールヘッダーはすべて、

base64ではなく、printableでエンコードされていました。

文字化けの原因はここでした。日本語に対応した処理でなかったとうことです。


しかし、printableでエンコードしている部分( _encodeHeaderメソッド)を、

base64でエンコードするようにしてしまうと、送信日時等の日本語が入ることがない

ヘッダーが受信側で正確にデコードされなくなってしまいます。


base64でエンコードしないとおかしくなるのは、Fromです。(場合によっては、Subjectも)

なので、setFromメソッドで、_encodeHeaderメソッドを呼び出している部分を、

mb_encode_mimeheaderを使ってエンコードするように変更したらOKです。


$this->_encodeHeader(‘”‘.$name.'”‘)


  ↓


mb_encode_mimeheader(‘”‘.$name.'”‘, ‘ISO-2022-JP’)


mb_encode_mimeheaderについては、下記をご参照ください。

http://phpspot.net/php/man/php/function.mb-encode-mimeheader.html


プログラムを設置しているサーバからZend_Mailだけを使って送信する場合は、

必ず文字化けするようなので、この対応は必須です。

メールサーバにSMTP認証して送信する場合(Zend_Mail_Transport_Smtp利用)は、

上記対応をしなくても、文字化けしていない場合もありました。

メールサーバ側で、うまいことやってくれているのかもしれません。

  • Zend_Mailで日本語のFrom情報を扱う はコメントを受け付けていません。
コメントは閉じられています。

return top

%d人のブロガーが「いいね」をつけました。