Zend_Mail で半角カナを送信する方法

携帯電話向けに、どうしても件名と本文に半角カナを入れる必要があり、数時間格闘したら、ようやく Zend_Mail で半角カナを送信することができました。

ドコモ、auソフトバンクで文字化けしないことを確認しました。Zend Framework のバージョンは、1.7.5 です。

sub send_mail($params = array()) {
    // subject
    $subject = mb_convert_encoding($params['subject'], 'JIS', 'SJIS');

    // body
    $body = mb_convert_encoding($params['body'], 'JIS', 'SJIS');

    // from_name
    if ( isset($params['from_name']) ) {
        $params['from_name'] = mb_encode_mimeheader(
            mb_convert_encoding($params['from_name'], 'ISO-2022-JP', 'SJIS'),
            'ISO-2022-JP'
        );
    } else {
        $params['from_name'] = null;
    }

    // to_name
    if ( isset($params['to_name']) ) {
        $params['to_name'] = mb_encode_mimeheader(
            mb_convert_encoding($params['to_name'], 'ISO-2022-JP', 'SJIS'),
            'ISO-2022-JP'
        );
    } else {
        $params['to_name'] = null;
    }

    // send!!
    $mail = new Zend_Mail( 'ISO-2022-JP' );
    $mail->setBodyText( $body, 'ISO-2022-JP', Zend_Mime::ENCODING_BASE64 );
    $mail->setFrom( $params['from'], $params['from_name'] );
    $mail->addTo( $params['to'], $params['to_name'] );
    $mail->setSubject( $subject );
    $mail->send();
}

Zend_Mail で日本語を使うためには、かなりバッドノウハウの塊なところがあるので、どこかで情報を共有したいですね。