こんにちは、Ryohei(@ityryohei)です!

本記事では、WordPressのwp_mail()でメールを送信すると、本文の改行が反映されずに一行で表示されてしまう場合の対処法をご紹介しています。

wp_mail()で本文が改行されるようにしたいんだけど、どうすればいいんだろう?

上記の疑問にお答えします。

では、解説していきます。

Content-type: text/htmlになっていると改行されない

wp_mail()ではオプションにメールのヘッダーを追加することができます。ヘッダーの中にはContent-typeと呼ばれるコンテンツの種類を表す情報があり、デフォルトのContent-typetext/plainとなっています。

参考URL:https://developer.wordpress.org/reference/functions/wp_mail/

text/plainはそのままコンテンツがテキストファイルであることを表します。テキストファイルなので改行等もそのまま本文に反映されますが、こちらの指定がtext/htmlにしていると、テキストファイルとは改行方法が異なるため、本文の改行されずに一行で送信されてしまいます。

HTML形式のメールを送る場合のContent-typetext/htmlで問題ないですが、テキストメールで本文を改行させたい場合は、Content-typeの指定を下記のようにしておく必要があります。

$headers = array('Content-Type: text/plain; charset=UTF-8');

上記はデフォルトのオプションのため省略しても問題ないですが、メールを送信するプラグイン等を導入している場合はどこかで別の設定が入っている可能性がありますので、wp_mail()の実行前に明示的にヘッダーを指定することで間違いが起こらないかと思います。

Content-type: text/plainの設定例

つらつらと説明してきましたが、文字だけでは伝わりにくいと思いますので、wp_mail()でヘッダーにContent-type: text/plainを設定した際の全体サンプルをご紹介します。参考にしていただければ幸いです。

//宛先
$to = 'xxxx@example.co.jp';

//件名
$subject = '送信テスト';

//本文
$body = <<<EOF
送信テスト

送信テス送信テスト

送信テスト
EOF;

//ヘッダーオプション
$headers = array('Content-Type: text/plain; charset=UTF-8');

//送信
wp_mail($to, $subject, $body, $headers);

最後に

WordPressでメールを送信する場合は公開されているプラグインをインストールして構築するのが一番早いですし、安全です。ただ、プログラム側でメールを送りたい場合はwp_mail()を使えば簡単に送信することができるので、裏側で使用するだけであったり、プログラミングに詳しい方は検討されてみても良いかもしれないですね。

以上、WordPressのwp_mail()で本文が改行されない場合の対処法のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。