メール文字化け問題解決

スルーしてください

文字化け問題

お客様に自動送信されるメールの一部が文字化けする。
基本的に送信するメールは3つ、銀行振込用受付、支払い確認、発送完了。
このうちの後者2つ、支払い確認と発送完了のメールがHTMLで文字化けする。プレーンテキストにすると文字化けはしないが、宛名が姓名ではなく名のみになってありえない。変えたい。
とりあえずプレーンテキストで送るようにして、宛名だけ変えようと思った。

しかし、子テーマに該当メールをWP上でコピーし、開こうとすると真っ白。
compreted order  ✖
new acount   〇  使っていない
note  ✖      使っていない
on hold order  〇
processing order  ✖
refund order  ✖
reset password  〇  使っていない
ということで赤字の3つがやばい。
FTPでサーバーを見に行くとファイルは存在し、既に書き換えられている(以前お客様へのメールの宛名がこれじゃだめだと言うことで書き換えたはず)。

つまり読まないファイルが子テーマに存在し、親テーマのそれを読んでいるってことになるのかな???

だとすると親テーマから元ファイルを子テーマに再度移すべき? あれおかしいな、でもウーコマの設定⇒メール のところで子テーマにコピーみたいにしてるんだけど、既に親の中にあるファイルがダメってこと???

いや勘違い、親の中にはそもそもこれは存在しない。子にしかない。

ということで子テーマの中からFTPソフトでPHPファイルをダウンロードしてみた。
OK on hold
ダメ compleeted

ざっと見て大きな違いが2か所。

19行目 defined( ‘ABSPATH’ ) || exit;  〇な方
19行目 if ( ! defined( ‘ABSPATH’ ) ) {  ✖な方
exit;
}

ifで何を仮定しているんだろう?

38行目
<h2><?php print $customer_name; ?> 様</h2>
<p><?php _e( ‘Thanks for your order. It’s on-hold until we confirm that payment has been received. In the meantime, here’s a reminder of what you ordered:’, ‘woocommerce’ ); ?></p><?php // phpcs:ignore WordPress.XSS.EscapeOutput ?>

同じ場所
<h2><?php print $customer_name; ?> 様</h2>
<p><?php printf( esc_html__( ‘ご注文の商品の発送手続きが完了しました。ご注文誠にありがとうございました。’, ‘woocommerce’ ), esc_html( wp_specialchars_decode( get_option( ‘blogname’ ), ENT_QUOTES ) ) ); ?></p>

本来ここでは日本語は入らないんじゃないかと思う。ただし〇の方でも「様」という日本語は入っているので大きな問題ではないのかな。

バグ探し開始

まずは最も簡単な、PHPファイル先頭部分に文字コードを入れる

<?php
header(‘Content-Type: text/html; charset=UTF-8’);
echo ‘文字化けしない’;
?>
テキトーにググって貼り付けたら文字化け解消した! でもうっかりecho消すの忘れたんで「文字化けしない」ってメールのヘッダーに出てしまった(^^;
いやいやこんなに簡単なことだったのか!!!
日本語文の最後に「。」があり、その後ろにダブルコロンが抜けているから、これも怪しいと思ったんだけど。
使用する可能性があるのに✖だった3つのファイル先頭行に文字コードを追加してアップロードした。
最終チェック。OK、全ての過程で文字化けなしのHTMLメールが発送、受信できた。よかった、これで文字化け問題終了。
因みにecho部分除いて貼り付けたのはこれ
<?php
header('Content-Type: text/html; charset=UTF-8');
?>

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)