Zend_MailのsetSubjectが僕をいじめる
Zend_MailとSmartyを組み合わせた、メール送信のクラスを作ってみたのですが、
どうも長いタイトルのメールを送ると、タイトルの途中に「?」が入るからソースを見てみたら。
-
public function setSubject($subject)
-
{
-
if ($this->_subject === null) {
-
$this->_subject = $this->_encodeHeader($subject);
-
$this->_storeHeader(‘Subject’, $this->_subject);
-
} else {
-
throw new Zend_Mail_Exception(‘Subject set twice’);
-
}
-
return $this;
-
}
って、おい。
そりゃ「?」になるよ。
ググったら、ふらっとさんのページやいしなお!さんのページに同じことが書かれてました。
_encodeHeaderメソッドとかを見るとやりたいことはわからないではないが、
いずれにしても日本語(に限らないようだけど)送るときに困っちゃいます。
RFCでいうとこの辺か。
RFC 2822 (Internet Message Format)
RFC 2047 (MIME Part Three:Message Header Extensions for Non-ASCII Text)
とりあえず、RFC 2822の「SHOULD be no more than 78 characters」この辺の、”・・べき”は、
見なかったことにして、かつ長すぎる(符号化後の半角換算998文字)タイトルは考慮しないってことで、
いしなお!さんのとこのように、改行は削除する仕様にしちゃいました。





1.7.5で対応されたっぽいです。
(RFC準拠か不明です)
情報ありがとうございます。
記事は確か、1.4.xの時のものです。