WordPress 日本語版と Mailhog を組み合わせた時の文字化け対策

過去記事「XAMPP にメールサーバ? それ MailHog でサクッとできるよ」で紹介したメール環境『Mailhog』。WordPress 日本語版と組み合わせるときはちょっとした工夫が必要です。

というのも、WordPress 日本語版でローカル環境をこしらえたうえで Mailhog を使うと

といったふうに文字化けしちゃうからなんですね。

文字化けの原因は『WP Multibyte Patch』

文字化けの原因は WordPress 日本語版では必須とされる*プラグイン『WP Multibyte Patch』の設定にあります。
* WordPress 5.0 以降は日本語版に同梱されていませんが(関連情報)、日本語環境で使うなら欠かせないプラグインの一つです

例えば、メールフォームプラグイン『Contact Form 7』を使ってメール送信テストをするとき、このような文字化けが発生します。

WordPress コア自体は文字コード UTF-8 の下で動作しますが、WP Multibyte Patch がメールの文字コードを JIS に変換してしまうのですね。

これはインターネットメールで日本語を扱う歴史的経緯に基づく仕様で、メールの文字コードが UTF-8 であることを前提に動作する Mailhog との食い違いが起きるのです。

WP Multibyte Patch の設定を変えて文字化けに対応

そこで WP Multibyte Patch を有効化しつつ、 メールの UTF-8 → JIS 変換をしないように設定ファイルを一部書き換えます。

WP Multibyte Patch のマニュアルにはこのような記述があります。

デフォルトで標準的な設定値が割り当てられるようになっています。これらの設定値を変更する必要がある場合は、wpmp-config-sample-ja.php を wpmp-config.phpに変名し内容を編集してから下記のように配置してください。(WP_CONTENT_DIR を変更している場合はその中に置いてください。)

/wp-content/wpmp-config.php

デフォルト設定で問題がない場合はこれらの作業は必要ありません。


WP Multibyte Patch 公式マニュアル

/wp-content/wpmp-config.php の設定例

変更前

/**
 * wp_mail() の文字エンコーディング
 *
 * この設定は WordPress から wp_mail() を通して送信されるメールに適用されます。
 * 指定可能な値は、'JIS'、'UTF-8'、'auto' です。
 * この設定は $wpmp_conf['patch_wp_mail'] が false の場合は無効となります。
 */
$wpmp_conf['mail_mode'] = 'JIS';
文字コード JIS でメール送信したので文字化け

変更後

/**
 * wp_mail() の文字エンコーディング
 *
 * この設定は WordPress から wp_mail() を通して送信されるメールに適用されます。
 * 指定可能な値は、'JIS'、'UTF-8'、'auto' です。
 * この設定は $wpmp_conf['patch_wp_mail'] が false の場合は無効となります。
 */
$wpmp_conf['mail_mode'] = 'UTF-8';
UTF-8 で送信するようにしたら文字化け解消

本番環境では設定を元に戻すのがベター

これで文字化け解消となったわけですが、本番環境で運用する際は上記の設定を

/**
 * wp_mail() の文字エンコーディング
 *
 * この設定は WordPress から wp_mail() を通して送信されるメールに適用されます。
 * 指定可能な値は、'JIS'、'UTF-8'、'auto' です。
 * この設定は $wpmp_conf['patch_wp_mail'] が false の場合は無効となります。
 */
$wpmp_conf['mail_mode'] = 'JIS';

というように文字コード JIS に戻す(あるいは /wp-content/wpmp-config.php そのものを削除する)のがベターかと思います。

日本語メールの文字コードを JIS にすべきか UTF-8 にすべきかは議論が分かれるところではありますが(Googleでの検索結果)、WP Multibyte Patch の初期設定が JIS である以上、本番環境での運用もそれに従う方がよいのではというのが私なりの結論です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください