[PHP-users 15999]Re: メールの日付が未来日になってしまう

Y.Watanabe yuw @ msj.biglobe.ne.jp
2003年 6月 17日 (火) 19:21:30 JST


わたなべです。

成田 実 wrote on 2003/06/17 15:51
with Subject: [PHP-users 15983] メールの日付が未来日になってしまう

>php4でmail関数を使ってメールの送信機能を作成しました。
>メールの送信、宛先不明のリターンメール等は正常に動作しているのですが、
>phpから受信したメールを開いて日付を見ると、約半日未来の日付になってしまって
>います。
>
>システムで時間の設定はしておりませんし、サーバの時間も正確です。
>OutlookExpressですと、受信メールの一覧の日付は正確なのに、メールを開封して
>ヘッダに
>表示される時間が未来日になってしまっていました。
>
>Windows2000、IIS、php4で作成しております。
>メール開封時にヘッダに表示される時間は、どこの時間が設定されるのでしょう
か?

まず、環境をもうちょっと詳しめに書きましょう。
メール関連でトラブっているのなら、メールサーバの種類などは
重要な情報です。あとは、php.iniのメール関連の設定個所。
そして肝心な、mail関数を読んでいるあたりの問題のソースコードも。

情報が少ないので、

>Windows2000、IIS、php4で作成しております。

ということから、

○メールサーバはwebサーバと同居しており、
○その種類はIISにオマケ(?)でついてる「仮想SMTPサーバ」とかいう奴で、
  (MS系のwebサーバもメールサーバもあまり扱ったことないんでよく知らない)
○php.iniの[mail]部の設定はデフォルトのままである
  (SMTP = localhost とかなってる)

と勝手に仮定します。

僕の経験則&メール関連RFC規格の知識(←自信ないけど^^;)からすると、
世の中のたいていのメールサーバは、Date:とかFrom:とかそういう
必須なヘッダ情報が*無い*メールを受け取ると、自動的にそれを追加します。
有る場合はそのままスルーです。
(強制的に書き換えるような設定がメールサーバにされていれば話は別)

そして、phpのmail関数は、特殊な引数(後述)を与えない限りは、
To:とSubject:くらいしかヘッダ情報をつけないようです。

ってことは、成田さんが書いたphpスクリプトによるメールについている
Date:ヘッダは、phpが追加しているものではなく、メールサーバが
自動追加しているのだろうと推測できます。
ということは
phpの問題ではなさそうなのでメールサーバの設定を確認してみましょう、
という結論になります。

別な解決策としては、
問題のphpスクリプトでmail関数を呼ぶときにDate:ヘッダも
付加するという方法もありかもしれません。
先述のように、メールサーバがどんなであっても
Date:が既にあるのならそのままスルーするわけですから、
まだ問題があるならあとはメールクライアントの問題か
PHPスクリプトの問題だ、というふうに容疑者を絞り込めます。

http://jp.php.net/manual/ja/function.mail.php
に、追加ヘッダを付加してメールを送信する例がありますので、
この要領で、Date:ヘッダを付加できるでしょう。(たぶん)
もちろん
Date: Tue, 17 Jun 2003 17:00:00 +0900
といった形式になるようにします。


なお、

>OutlookExpressですと、受信メールの一覧の日付は正確なのに、メールを開封して
>ヘッダに
>表示される時間が未来日になってしまっていました。

メールのDateヘッダの時間帯をあらわす部分(+0900とかJSTとか)
に因って、一覧表示と、メールそのものの表示とで日付が
違って見えるというメールクライアントはめずらしくはありません。
(っていうかそのほうがまっとうだと思う。理由は長くなるので省略)




PHP-users メーリングリストの案内