エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


WordPressの送信メールが協定世界時(UTC・グリニッジ標準時)の問題対応

      2017/03/11

WordPressは協定世界時(UTC)で動いている

 

WordPressから送信されるメールとは

 
WordPressから送信されてくるメールの日時が協定世界時(UTC・グリニッジ標準時)になっている問題を解決します。
 
ここでいうところの「WordPressからメールを送信」とは、WordPressから送信されるメール全般です。
 

  • WordPressのシステムが更新情報などを送信するメール
  • Contact Form 7のフォームから送信するメール
  • MW WP Formのフォームからメールを送信するメール
  • 自作したフォームから wp_mail()関数を使って送信するメール
  • WP Mail SMTPを経由して外部 SMTPサーバを経由して送信するメール

などなど。
 
WordPressのシステムから送信されてくるメールや、メールフォームを作ってそこから送信するメールなどなど、WordPressから送信されてくるメール全般に共通して起こる問題で、受信したメールが協定世界時(UTC・グリニッジ標準時)になっているという不具合があります。
 
この記事ではその協定世界時になる問題の解決方法と根本原因を解説します。
 
 

WordPressのメールが協定世界時・UTCになる問題の解決方法

 
【対応ファイル】
{WordPressのルート}/wp-settings.php
 
【対応行数】
43行目
 
【対応箇所】

 
上記のように「date_default_timezone_set();」が設定されているところの引数を「UTC」から「JTC」に変更することで対応することができます。
 
その他、「Asia/Tokyo」「UTC+9」に変えることでも対応できます。
 
というか、「UTC+4」「UTC+2」でも OKで、「AAA」でも OKでしたので、おそらく「UTC」以外なら「設定」の画面で設定されたものが利用されるのではないかと思われます。
 
また、「date_default_timezone_set();」設定行を削除しても OKです。
 
20151109_wp_01
 
この設定を変更しても、上記のとおり「設定」-「一般」の「タイムゾーン」の情報は、特に変化はありません。
 
 


 

WordPressのメールが協定世界時・UTCになる問題の本質

 
WordPressから送信されてくるメールが協定世界時(UTC、グリニッジ標準時)になってしまう根本の原因は、下記の 2つによるものです。
 

  • WordPressのメールヘッダの「date」が「UTC」になっている
  • 受け取る側のメールソフトが UTCを無視している

 
 

WordPressのメールヘッダの「date」が「UTC」

 
WordPressのデフォルトの時間の設定は、前項で変更の設定をしたように「date_default_timezone_set();」で「UTC」と設定されています。
 
そして、管理画面の「設定」-「一般」の「タイムゾーン」の項目で利用している場所の時間帯を設定することで現地の時間帯で表記されるように設計されています。
 
WordPressは世界中で利用されていますので、当然の仕様と言えます。
 
 
そのため、WordPressで送信されるメールのメールヘッダ情報の「date」の値は、協定世界時(UTC、グリニッジ標準時)で設定されて送信されます。
 
具体的には↓こんな感じの表記になります。
  Date: Sun, 1 Nov 2015 07:45:45 +0000
 
これを、前項で解説したように「date_default_timezone_set();」を「JTC」に変更すると下記のような日本の標準時の表記に変更されます。
  Date: Sun, 1 Nov 2015 16:45:45 +0900
 
この対応を行うのが、前項で解説した方法です。
 
 

受け取る側のメールソフトが UTCを無視

 
そもそもの話として、この記事を読む方は WordPressのメール送信の日時の設定に関して何かしらのトラブルがあったために探してこられた方だと思いますが、この不具合が起こる方と起こらない方があることも分かっていると思います。
 
デフォルトの「date_default_timezone_set();」設定が「UTC」なのに、なんで大きな騒ぎにならないのだろうか?と思う方もあるでしょう。
 
理由は、受け取る側のメールソフトが「UTC」で設定されている時間の情報を無視するものとしないものとがあるためです。
 
 
より具体的には、下記の 2つの時間は表記は違いますが同じ日時を表しています。
 
  Date: Sun, 1 Nov 2015 07:45:45 +0000
  Date: Sun, 1 Nov 2015 16:45:45 +0900
 
前者が協定世界時(グリニッジ標準時)の表記で、後者が日本の標準時の表記です。
 
これを同じ時間として扱うか、扱わないかはメールソフトによるのですが、最近の一般的なメールソフトはこれを受信した側の時間帯に合わせて変更して処理するようになっています。
 
なぜなら、メールは世界中で利用されていますので。
 
今回の話のきっかけは国内におかれている WordPressから送信されたメールの話でしたが、イギリスの標準時の時間帯に住んでいる方から上記の時間にメールが送信された場合も同じく「07:45:45 +0000」と表記されてくるわけです。
 
これを、現地の時間は「07:45:45」なので「07:45:45」として処理しよう、としてしまうと時系列で並ばなくなってしまいます。
そのため、受け取った側では「16:45:45」と表記し直すわけですが、一部のメールソフトではこの処理を行わないものがあるため、今回の問題が発生します。
 
より具体的には「Becky! Internet Mail」は、この対応を行わないことを確認しています。
 
そのため、日本国内の人しかメールをやり取りしない、日本国内にあるサーバしか利用しない、WordPressのからのメールは受信しない、などなど明確なポリシーのもと使っているのであれば別ですが、メールの設定を変更するか、メールソフトを乗り換えることをおススメします。
 
 

メールヘッダの dateの情報について

 
最後におまけ的な内容ですが、メールヘッダの「date」の値は「メールが送信された日時」ではありません。
 
厳密には「メールが作成された日時」です。
 
そのため、
 12:00 メールを作成し保存し、1時間後に自動送信設定
 13:00 自動送信設定によりメールを送信
とした場合は、「date」の値は「12:00」となります。
 
 12:00 スマホでメールを送信したが電波がなく送信されなかった
 13:00 スマホが電波をキャッチしたので自動的に送信した
となった場合も、「date」の値は「12:00」となります。
 
また、「date」の日時は、メールを作成した端末(PCやスマホなど)の時間が設定されますので、端末の時間設定がずれている場合はずれた時間のまま送信されます。
 
さらに、メールサーバによっては、「date」の値を自分のサーバを通った時の日時に上書きする設定のものも存在します。
 
そのため、「送信日時」でメールをソートしている場合は思わぬ見落としにつながる可能性もあります。
ソート条件を設定できるならば、「受信日時」で設定する方がいいかもしれませんね。

 - WordPress

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

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

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

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

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

Export to Textで WordPressを csv出力

WordPressのデータを csv出力する Export to Textの使い方を解説しています。

WordPressのサイトマップ生成ツールPS Auto Sitemapの使い方

サイトマップを PS Auto Sitemapで自動生成する方法を説明します。このプラグインは Google用のサイトマップではなく一般ユーザが見るためのサイトマップページを作ります。

Custom Post Type UIでカスタムタクソノミーを設定し編集する方法解説

カスタムタクソノミーを追加、管理するプラグインCustom Post Type UIの使い方の解説。プラグインの解説ではあるものの、カスタムタクソノミーの仕様の解説でもある。

WordPressでダブルクォートなどの文字が自動変換?原因と対処方法

ダブルクォート、シングルクォート、HTMLタグなどが自動変換関数によって入力と違う形で表示されます。原因を2つの関数ごとに説明し、対応方法を3パターン提示します。

WordPress初心者向け講座・詳細解説データベースとは何か?

データベースとは何か?を言葉の意味の説明なども含めエクセルと比較しながら説明しています。

Advanced Custom Fieldsの関数の全部の使い方を調べてみた

Advanced Custom Fieldsに用意されている関数を全て調べてみた。よく使うget_field、the_field以外にも多くの関数が用意されていて、フォームを作成することも可能。

wp_mail()関数でWordPressのスパム対策済のメールフォーム作成

WordPressでメール送信フォームを作成するための関数「wp_mail()」の使い方の解説。CC、BCC、添付ファイルも HTMLメールも設定可能。

WordPress・Contact Form7、MW WP Form共通 細かなデザイン調整方法

お問い合わせフォームプラグインの Contact Form7、MW WP Formにおけるラジオボタン、チェックボックスなどの見た目を調整する小技を紹介。

Contact Form 7の使い方・引数で情報を受け渡す方法

Contact Form 7で引数の情報をフォームに編集する方法を解説します。

Comment Rating FieldでWordPressのコメントに口コミサイト機能を追加

口コミサイトを構築するためのプラグイン。評価点を投票する仕組みをコメント投稿機能に追加する方法で実現。口コミサイトを構築するには十分な機能を提供。