エス技研

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.

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

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

  関連記事

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

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

WordPressのカスタムフィールド、カスタム投稿、カスタムタクソノミーとは?

WordPressのカスタムフィールド、カスタム投稿、カスタムタクソノミーの基本的な内容を解説。お薦めのプラグインと編集方法も解説しサンプルソースなども紹介。

WordPressの投稿プレビューのURLを変更する方法

プレビューを表示する際のURLを変更する方法の解説。「サイトアドレス (URL)」に基づいて編集されるURLを任意のURLに変更する場合の方法とその解説を行います。

WordPressにプラグインを使わず OGP(Open Graph Protocol)の設定方法解説

WordPressに OGP(Open Graph Protocol)をプラグインを使わずに設定する方法の解説。

Unveil Lazy LoadでWordPressを高速化!SEO効果絶大でPVもアップ!

WordPressの表示を高速化するUnveil Lazy Loadの紹介。利用するJSを見直し高速化を徹底的に追求したプラグイン。入れるだけで高速化するので使わない手はない!

WordPressのパーマリンク設定の考え方

基本設定の一つであるパーマリンクの設定について解説。パーマリンクはURLを決定づける重要な項目ですので、設定の意味を理解して希望するURLになるよう設定しましょう。

SMTP Mailerでスパム判定回避。WP Mail SMTPで発生する送信エラーも対応
SMTP Mailerでスパム判定回避。WP Mail SMTPで発生する送信エラーも対応

WordPressからのメールをスパム判定されずに送信する「SMTP Mailer」の解説。SMTP MailerはPHP 5.6、7.0になってもSMTP接続でエラーにならない設定を搭載しているのが特徴。

highlight.jsの設定方法を解説。 Syntax Highlighterから乗換え、高速化にも最適

Crayon Syntax Highlighterの代替案としてhighlight.jsを試してみた。highlight.jsは設置簡単で軽量なシンタックスハイライト。デザインもCSS変更だけの簡単変更。

Theme My Loginでメール認証、管理者承認付の会員管理・基本編

会員管理をするプラグインTheme My Loginの解説。メール認証、管理者認証、reCAPTCHAによるいたずら登録を防止し、ログイン攻撃対応のセキュリティも備わっている。

Google Code Prettifyの設定方法を解説。 Syntax Highlighterから乗換え、高速化にも最適

Google Code Prettifyでソースコードをきれいに編集する方法の解説。簡単設置とカスタマイズ設置の2つの方法を解説し、カスタマイズするポイントも解説。