cformsからのメールがSH905iで受信すると文字化けた。その対策

cformsはSubject、Bodyをブログの文字コードで送信する。
通常はデフォルトのUTF-8で送信されるが、一部のメーラや携帯では文字化けしてしまいます。
そこで、メールの文字コードをUTF-8からISO-2022-jpに修正してみました。
(cformsの設定状態によって修正箇所は異なりますので、ご了承ください)

cformsの設定状態

  1. 管理者のみにメール(BCCは空白)
  2. Ajaxは未使用
  3. HTMLメールは付けない

次の1ファイルを修正する

/wp-content/plugins/cforms/lib_nonajax.php

1)371行を書き換える

オリジナル

$fmessage .= 'Content-Type: text/plain; charset="' . 
      get_option('blog_charset') . '"' . $eol . $eol;

修正後(1行追加)

$fmessage .= 'Content-Type: text/plain; charset="iso-2022-jp"' . $eol . $eol ;
$fmessage .= 'Content-transfer-encoding: 7BIT' . $eol . $eol;

2)377行を修正する
オリジナル

$fmessage .= $eol . $formdata . $eol;

修正後

$fmessage .= $eol . mb_convert_encoding($formdata,'iso-2022-jp','utf-8') . $eol;

3)500行を修正する
オリジナル

$sentadmin = @mail($to, encode_header($vsubject), $fmessage.$attached, $headers);

修正後(1行追加)

$vsubject=mb_encode_mimeheader($vsubject,'iso-2022-jp','utf-8');
$sentadmin = @mail($to, mb_convert_encoding($vsubject,
   'iso-2022-jp','utf-8'), $fmessage.$attached, $headers);