この記事は約 6 分で読めます。
WordPressのお問い合わせフォームから送信されたメール本文が改行されずに1行に繋がって表示される現象について、原因究明から解決するまでの備忘録です。
結論からお伝えすると「Simply Static」というWordPressで静的HTMLを生成するためのプラグインが不具合の原因でした。
このプラグインを停止するとあっさり解決しました。
本記事の要点は以上ですが、それだけでは面白みに欠けるため関連性のあるいくつかの情報にふれながら軽く考察を交えつつ解説していきます。
メール本文が改行されない主な原因について考えてみる
WordPressのお問い合わせフォームから送信したメール本文が改行されず1行に繋がって表示されてしまいます。何とかなりませんか?
そんなお客さんからの一言からこの事件は始まりました。
お客さんA
はじめまして、こんにちわ。
お問い合わせ内容:○○○
お名前: ○○○
普通はこのように改行が反映された状態でメールが送られてきますよね?
↓ 本来あるはずの改行が削除されてしまい・・・
お客さんAはじめまして、こんにちわ。お問い合わせ内容:○○○お名前: ○○○普通はこのように改行が反映された状態でメールが送られてきますよね?⇒改行されずに1行に繋がって表示されてしまいます。非常に読みにくいです。
サイト公開前のフォーム送受信テストの時は問題なかったし、公開後もフォーム送受信については定期的にモニタリングしており、少なくとも直近の2週間前までは問題なかったはず。
では何が原因でいつ頃からそのような現象が発生するようになったのでしょうか?
WordPressサイトを長年運用していると原因不明の不具合に出くわすことはよくあります。
今回直面したようなメール送受信時の文字コード・改行関係で不具合が出た際に精査すべき項目を挙げると以下が思いつくでしょうか。
個々の要素については詳しくふれませんが、いずれも原因となり得る項目です。
「サーバー側の設定や.htaccessファイル」
「テーマ独自のオプション設定」
「functions.php内の記述」
「WordPress 自動整形機能(wpautop)の影響」
「WP Multibyte Patchプラグインの影響」
「Autoptimizeプラグインの影響」
「文字コードやメール送受信に影響するプラグインの影響」
「PHPMailer(WordPressでメール送信を行うためのライブラリ )」
「原因不明」とは言ったものの、後に原因を特定して解決できる類の不具合が大半です。
深堀りすると、もっと根の深い所に原因があるケースも考えられますが、まずは簡単に調査できる所から順番にひとつずつ潰していくのが基本です。
今回の事例になぞらえると以下条件下で発生していることになります。
- メールフォームを利用して送受信するデータから改行がなくなっている
- 2週間前までは正常に稼働していた
- テンプレートやソースコードはその間変更していない
- WordPressプラグインの新規インストールはいくつか行っている
- 直近の2週間以内にWordPressのバージョンは変更していない
- 直近の2週間以内にサーバー環境(PHP、MySQL含む)のバージョンは変更していない
- クライアント側の受信環境は変更していない
状況を書き出して整理すると、ピンとくる人はもうお分かりでしょうね。
というか記事タイトルと導入文で既に結論を述べていますよね。(笑)
WordPressあるあるですが、プラグインの干渉・競合が最も疑うべきポイントとなります。
というか、上記条件下で発生していることを紐解くとそれ以外考えられません。
問題は「どのプラグインが干渉しているのか」という点にほぼ焦点が絞られました。
メールヘッダーから原因を読み解く
豆知識として「なぜメール本文から改行なくなって1行に繋がってしまうのか」という点について少し考察してみましょう。
WordPressでフォームを送信する際、HTMLメール形式で送信するプラグインを除いて、通常はプレーンテキストが選択されるかと思います。
そして送られてきたメールを受信するメールクライアントもプレーンテキストで送られてきた場合は、プレーンテキストとして受信処理します。
正常に改行が反映された状態で受信したメールのメールヘッダー詳細を見てみましょう。
Content-Type: text/plain; charset=UTF-8
正常な状態では本来の仕様通り「Content-Type: text/plain;」=「プレーンテキスト」で処理されていますね。
一方、改行がなくなって1行に繋がってしまったメールのメールヘッダー詳細はどこが違うのかというと・・・
Content-Type: text/html; charset=UTF-8
「Content-Type: text/html;」=「HTML」で処理されています。
本来プレーンテキストで処理されるはずの内容がHTMLメールとして処理されてしまっているんですね。
つまりどうなっているかと言うと・・・
- プレーンテキストで処理される予定でメール送信
- プレーンテキストなので改行コードとかは入っていない
- PHPのライブラリでメール送信処理される段階でHTML形式に変換される
- HTML形式に変換されるが改行コードは入っていないため、改行なしで処理される
- 受信側のメールクライアントはHTMLメールとして処理
- 結果受信時はHTMLメールとして扱われ、改行もない状態となる
通常であれば「3. プレーンテキストでメール送信」となり、何の問題も発生しない所、何らかのプラグインが干渉してHTML形式に変換処理された状態でメール送信されてしまうことが原因でした。
この時点ではプラグインの特定に至りませんでしたが、その後の究明で冒頭でお伝えした「Simply Static」プラグインが原因であることが分かりました。
次章でその経緯について詳しく解説します。
原因究明、そして解決へ
特定状況下における不具合発生条件と発生タイミングを把握したら、後は問題となるプラグインを検証する作業になります。
アクティビティログ(ウェブサイトに関する操作記録)などを詳細に記録している場合は、直近の2週間以内に新規インストールしたプラグインや既存プラグインで設定変更した箇所を洗い出せば、原因特定にそれほど時間はかからないでしょう。
jetpackのようなプラグインを入れている場合はアクティビティログが自動的に記録されますが、それとは別に何か設定変更に関わる作業を行った場合は後で参照できる形で手動で更新履歴のメモを取ることをオススメします。
怪しいプラグインを順番に停止していく中で不具合が発生する分岐点を見つけ出すことができますが、ここで気を付けなければならない点は以下です。
「新規インストールしたプラグイン単体で問題があるケース」
「新規インストールしたプラグイン単体では問題ないが、特定の別のプラグインと競合が発生して問題が起きているケース」
本件では、Simply Staticプラグインが単体で干渉しており、プラグインを停止するとフォーム送信時に改行が削除される不具合が解消しました。
今回の事例では早い段階でSimplyStaticプラグインが単体で干渉していることが判明したので比較的わかりやすい結果であり、また当該プラグインを停止しても直接運用に影響がなかったため、サイト運用自体には全く支障はありませんでした。
Simply Staticプラグインをインストールしている場合は、利用する時だけ有効化して、普段は停止しておくのが最適な利用法ですね。
環境や相性によっては本記事でお伝えしたような不具合が発生しないケースもあるのかもしれませんが、筆者の複数の運用環境ではもれなく発生したため、今回記事として取り上げました。
まとめ
メールの改行はとても大切ですね。
適切な改行がない文章は本当に読みづらいです。
今回WordPressのメールフォームで送信したメール本文の改行が全て削除されて1行に繋がって表示される不具合の検証に伴い、何度もメール送受信テストを行いましたが、改行なしの文章は読む気を無くすレベルで辛いですね。(笑)
今回紹介した事例は筆者の備忘録的な内容ですが、WordPressでプラグインを多用してウェブサイトを運用する場合、多かれ少なかれ本記事で紹介したような不具合やまた別の不具合に遭遇する機会があることでしょう。
新たな機能を実装したり、新規プラグインを導入する際はテスト環境でしっかり検証した上で本番環境に反映することをオススメします。
仮にECサイトで本記事で紹介したような不具合を放置した場合、早急に対策を行わないと大きな機会損失に繋がる可能性があります。
WordPressはプラグインで簡単に機能追加できる反面、テーマ・プラグイン間の干渉や競合を抱えるリスクがあります。
今回はメールフォーム送信時の改行に関する不具合を取り上げて、その解決策の一例を備忘録として記しました。
新規プラグインの導入時は各種テスト・検証をしっかり行い、できるだけ安全運転を心掛けたいものですね。
弊社では、企業サイトや採用サイトの制作、WordPress構築、shopifyを活用したECサイト構築を得意としています。ホームページ制作やリニューアル、サイト運用に関する無料相談を承っていますのでお気軽にご相談ください。
無料で相談してみる