symfonyでの日本語メール送信


いろいろ試した結果とりあえずこんな感じでおkっぽい。

<?php

class jpMail extends sfMail
{

  public function initialize()
  {
    parent::initialize();
    parent::setCharset('ISO-2022-JP');
    parent::setEncoding('7bit');
    mb_language("Ja");
    mb_internal_encoding('UTF-8');
  }
  
  public function setBody ($body)
  {
    parent::setBody(mb_convert_encoding($body, "ISO-2022-JP", "UTF-8"));
  }

  public function setSubject($subject)
  {
    parent::setSubject(mb_encode_mimeheader($subject, 'ISO-2022-JP', 'B'));
  }
  
  public function setFrom ($mail, $from = null)
  {
    parent::setFrom($mail, mb_encode_mimeheader(mb_convert_encoding($from,'ISO-2022-JP','UTF-8'),'ISO-2022-JP','B'));
  }
}

調べてたらmb_convert_encodingでやってるのが多いけどSubjectとFromはヘッダなのでmb_encode_mimeheaderじゃなきゃだめ。
一応親親のPHPMailクラスでヘッダのエンコードしてるけど、マルチバイト対応してないっぽいので環境によっては文字化けする。