スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SNMPTTの設定 補足(訂正)

SNMPTTの設定で一部訂正


SNMP-Trapを管理するところで行ったNSTIを利用してNagiosからTrapの履歴を調べるNagiosでTrap検知するに関する内容で
以下2点の間違いがありましたので、訂正いたします。

1.LinkTrapをsnmott.conf.IF-MIBとして追加したが、これだけだと情報が重複する
2.CiscoのLinkTrapは含まれる情報が少し異なる。




まず1について。
SNMPTRAPのエントリの画像でもわかるとおりLinkDownが2つ存在する(Trapの1行目と2行目)。
NSTIフィルタ画面



これは、
/etc/snmpディレクトリ配下にある
"snmptt.conf"と"snmptt.conf.IF-MIB"それぞれにLinkDownTrapに関する記述があるため、それぞれのフィルタが出力するからです。
※置き換えや、snmptt.confを編集した人は関係ないかもしれません。

例:問題の箇所
snmptt.conf
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
FORMAT Link down on interface $1. Admin state: $2. Operational state: $3
#EXEC qpage -f TRAP notifygroup1 "Link down on interface $1. Admin state: $2. Operational state: $3"
SDESC
A linkDown trap signifies that the SNMP entity, acting in
an agent role, has detected that the ifOperStatus object for
one of its communication links is about to enter the down
state from some other state (but not from the notPresent
state). This other state is indicated by the included value
of ifOperStatus.
EDESC

snmptt.conf.IF-MIB
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Critical
FORMAT A linkDown trap signifies that the SNMP entity, acting in $*
EXEC /usr/local/nagios/libexec/submit_check_result $r TRAP 2 "Link Down on interface $1. Admin State: $2. Operational state: $3."
SDESC
A linkDown trap signifies that the SNMP entity, acting in
an agent role, has detected that the ifOperStatus object for
one of its communication links is about to enter the down
state from some other state (but not from the notPresent
state). This other state is indicated by the included value
of ifOperStatus.
Variables:
1: ifIndex
2: ifAdminStatus
3: ifOperStatus
EDESC



また、ひとつはCriticalとなっているが、ひとつはNormalのままで同じLinkDownTrapで状態が多少異なるものが2つ上がってきてしまっている。
これの対策は簡単で、どちらかをコメントアウトするなり消すなりすればOK。
どちらを消すかは環境に合わせて判断してください。







つぎに2について。

簡単に言うと、Cisco機器が飛ばしてくるLinkTrapは標準で採用されているMIBを拡張した形式のものが採用されているらしい。
通常その場合は、ベンダMIBなどの固有MIBにするのが普通らしいですが、LinkTrapに関しては標準のLinkTrapのMIB値(OID)をそのまま利用しているらしく、前回の設定のまま行うと表示が多少おかしくなる。


通常のLinkTrapで送られる内容
1: ifIndex
2: ifAdminStatus
3: ifOperStatus


CiscoのLinkTrapで送られる内容
1: ifIndex
2: ifDescr
3: ifType
4: locIfReason

これからわかるとおり、2番目以降が異なるため、SNMPTTのFORMATで指定する"$x"の箇所がずれてくるため、表示される内容がずれてきたりしちゃいます。


表示例
CiscoのLinkTrapを通常のSNMPTTの設定で受診した場合
Thu Oct 25 15:49:48 2012 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events" 10.82.12.85 - Link down on interface 10005.  Admin state: FastEthernet1/0/5.  Operational state: 6 


本来なら、ifAdminStatusが場所に、ifDescrが入っているため表示がStatusではなくIF名となってしまっています。


なので、CiscoのMIBをダウンロードしてきてsnmpttconvertmibコマンドで生成してあげれば良い。
http://tools.cisco.com/Support/SNMP/do/BrowseMIB.do?local=ja&step=2&mibName=CISCO-GENERAL-TRAPS

必要となるMIBは
CISCO-SMI
OLD-CISCO-INTERFACES-MIB
OLD-CISCO-SYSTEM-MIB
OLD-CISCO-TCP-MIB
OLD-CISCO-TS-MIB
CISCO-GENERAL-TRAPS

あたりになります。


すべてダウンロードしたら、"/usr/share/mibs/cisco"にフォルダを作成し、ファイルを配置します。
今回はその他のMIBにあわせて、実際には"/var/lib/mibs/cisco"にファイルを配置しそのディレクトリにシンボリックリンクを設定しました。
$ ll /usr/share/mibs/
lrwxrwxrwx 1 root root 19 10月 19 18:03 cisco -> /var/lib/mibs/cisco/
lrwxrwxrwx 1 root root 18 6月 7 2010 iana -> /var/lib/mibs/iana/
lrwxrwxrwx 1 root root 18 6月 7 2010 ietf -> /var/lib/mibs/ietf/


$sudo snmpttconvertmib --in=/usr/share/mibs/cisco/CISCO-GENERAL-TRAPS.my --out=/etc/snmp/snmptt.conf.CISCO-GENERAL-TRAPS



生成された"snmptt.conf.CISCO-GENERAL-TRAPS"ファイルを追加で読み込むように/etc/snmp/snmptt.iniを編集するか、前述のファイルの内容を利用し"/etc/snmptt/snmptt.conf"などに追記(変更)する等で編集してください。

こちらのサイトですごく詳しく解説してあります。
http://ricemalt.blog98.fc2.com/blog-entry-21.html


続きを読む

スポンサーサイト

NSTIを利用してNagiosからTrapの履歴を調べる

Nagiosで受信したTrapを管理・検索してみる


前回、機器から受信したTrapに応じてNagisでアラートを検知する事ができるようになった。
メールアラートが飛ぶのでそれを見る事でTrap内容を確認可能となるが、過去のTrap履歴は見れない。
(厳密には/var/log/snmptt/snmptt.logにのこっているけど)
なので、受信したTrapをDBに保存し検索を容易にする。検索を容易にしてくれるWebインタフェースにNSTIというものがあるのでこれを利用します。

NSTIは簡単に言うと、DBに保存したSNMPTrapのログを検索・閲覧できるGUIと思えばいいと思う。
実は現状このNSTIはとくにNagiosと連携して無く、単独で動きます(笑)
DBへの保存は、前回利用したSNMPTTを利用して行います。

- NagiosでのTrap受信・DB保存への流れ -
① Trapを受信(snmptrapd)
 ↓
② Trapの種類を判断し処理を行う(snmptt)
 DBにログを保存する
 
③ NSTIからDBに保存されたログを見に行く



■前提条件
 ・Ubuntu 12.04 Server
 ・NagiosCore 3.4.1
 ・NSTI RC1.4
 ・SNMPTT v1.3




● 事前準備 必要パッケージのDL、DBのインストール

・nsti-rc1.4.tar.gzをダウンロード、解凍する。
ダウンロードディレクトリに移動
$cd ./Download/
$tar xvf nsti-rc1.4.tar.gz
$cd nsti
※以降、特に断りがない場合解凍したnstiディレクトリで作業する前提とします。


・MySqlのインストール
$sudo apt-get install mysql-server
※途中で、MySQLのrootパスワードの入力を求められる。

・PHP5-mysqlのインストール
$sudo apt-get install php5-mysql


●MySqlの初期設定
・snmpttデータベースの作成
$ mysql -u root -p
Enter password:
mysql>
create database snmptt;
Query OK, 1 row affected (0.00 sec)

・アクセス権、パスワードの設定
mysql> grant all on snmptt.* to 'SNMPTT'@'localhost' identified by 'SNMPTTPASS';
Query OK, 0 rows affected (0.01 sec)
mysql>
\q
Bye
※上記パラメタの説明
 いずれも後ほどの設定で利用します。
 SNMPTT : DBにアクセスするためのユーザIDです。
 SNMPTTPASS : 上記ユーザIDに対するパスワードです。
適時自分の環境に合わせたID/PASSWORDに置き換えてください。


・初期データの入力
$ mysql -u SNMPTT -p snmptt < ./dist/snmptt-1.2.sql
Enter password:
$
$ mysql -u SNMPTT -p snmptt < ./dist/snmptt_unknown.sql
Enter password:
※SNMPTTには先ほど設定したユーザIDを指定します。


●SNMPTTの設定
 /etc/snmp/snmptt.iniの以下のパラメタを編集・確認する。(一部は前回設定しています)
log_enable = 1
leg_file = /var/log/snmptt/snmptt.log
unknown_trap_log_enable = 1
unknown_trap_log_file = /var/log/snmptt/snmpttunknown.log
mysql_dbi_enable = 1
mysql_dbi_host = localhost
mysql_dbi_database = snmptt
mysql_dbi_table = snmptt
mysql_dbi_table_unknown = snmptt_unknown
mysql_dbi_username = SNMPTT
mysql_dbi_password = SNMPTTPASS



● NSTIの設定

Webインタフェース用の設定を行います。
$sudo cp ./dist/nsti.conf /etc/apache2/conf.d/

Webアクセス用のPHPファイルをリネームして、コピーします。
$cp ./dist/header.php.core ./header.php

・./etc/config.iniの編集
ファイルの後ろの方にある[database]のhost, user, password, name, tableSnmptt, tableSnmpttUnkを編集・確認します。
;# Enter here your information that were used to connect to your database
[database]
host = localhost
user = SNMPTT
password = SNMPTTPASS
name = snmptt
tableSnmptt = snmptt
type = mysql
;# Ignore this option, when you don`t use a table for unknown-Traps in your database
tableSnmpttUnk = snmptt_unknown


・nstiディレクトリの移動
設定が完了したNTIディレクトリを移動させ、フィアル所有者を変更します。
$cd ..
$sudo mv ./nsti /usr/local
$sudo chown -R root:root /usr/local/nsti



●サービスの再起動
$sudo service apache2 restart
$sudo service snmptt restart


以上で完了です。
Trapを送信したあとWebブラウザからインタフェースにアクセスして見てください。
http://127.0.0.1/nsti/index.php

NSTI画面


ここで1つ気がつく事があります。
LinkDown含む全てのTrapが"Normal"となっており全てグリーンになっています。
前回のNagiosへの通知では、"/etc/snmp/snmptt.conf.IF-MIB"でNagiosに渡す際にCritical、Warningなどを数字のパラメータで指定しました。
今回は同じく"/etc/snmp/snmptt.conf.IF-MIB"で同様に対象のTrapをどのように扱うかを指定する必要があります。
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Critical
FORMAT A linkDown trap signifies that the SNMP entity, acting in $*
EXEC /usr/local/nagios/libexec/submit_check_result $r TRAP 2 "Link Down on interface $1. Admin State: $2. Operational state: $3."
SDESC
A linkDown trap signifies that the SNMP entity, acting in
an agent role, has detected that the ifOperStatus object for
one of its communication links is about to enter the down
state from some other state (but not from the notPresent
state). This other state is indicated by the included value
of ifOperStatus.
Variables:
1: ifIndex
2: ifAdminStatus
3: ifOperStatus
EDESC


赤字箇所を変更してあげる事によって、NSTIのSeverityパラメータを与える事ができます。(初期状態では"Normal")
CriticalにするとNSTI画面では赤色表示になるはずです。





※アクセス権がうんとかというエラーが出てくる場合の対処・・・

WebでNSTIにアクセスした際に、Permisionがどうのとおこられる事があります。(というか多分おこられる)
その場合の対応方法は2つあります。
① nsti/etc/config.ini ファイル内の"useAuthentification=0"にする。
② HTTPの認証エラーの用なので、利用する場合は/etc/apache2/conf.d/nsti.confを編集して正しく認証されるようにしてあげればよい。
 例)”Allow from all” の行の下にnagios.confを例に下記を入れてみた。この場合、Nagiosアクセスで設定したパスワードを利用する。
 
Alias /nsti "/usr/local/nsti/"


Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName "NSTI Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user

</Directory>

この四行でパスワードを聞かれ正常にアクセスが可能となる。
※Apachの再起動が必要です。





●Nagiosとの連携
最初にも書きましたがこのNSTIはNagiosとは特に連携しません。
それもなんだかなぁという感じなので、強引にリンクを張ってみます。
service定義の中の"notes_url"を利用して、NSTIでIPのフィルタをかけた状態をマクロを利用してLinkを張ります。
※ホストグループに対して一括して定義する場合は、この手法は利用できませんね。私の利用ではその他の絡みもあり、コアスイッチ個別にTrapのサービスを指定する記述をしているので利用できます。

define service{
use generic-service
host_name test-sw00
service_description TRAP
is_volatile 1
max_check_attempts 1
check_command check_dummy!0!"OK"
notification_options w,u,c,f,r
notes_url /nsti/index.php?trapSelect=&severity=&category=&hostname=$HOSTADDRESS$
}


リンクすると、サービス名の横にアイコンが出ます。
※画像の例はaction_urlのアイコンになっているかもしれませんが気にしないでください。
Link画面

これをクリックすると、NSTIの画面が新規に開きます。
NSTIフィルタ画面
Hostのところに対象ノードのIPアドレスでフィルタされたTrap一覧が表示されます。




以上で完了です。



続きを読む

NagiosでTrap検知する

UbuntuServerで動かしているNagiosでTrap検知をしてみる

少し前に書いたNagiosで、Ping監視や各サービス監視、SNMPポーリングでの監視はできていますが機能エンハンスとしてTrapを受信・アラートを出す機能を追加したのでメモ。

Nagiosはプラグインの実行結果をもとにCritical、Okなどのステータスを判断します。Trapの場合は監視対象の装置が一方的に送信してくるためにそのような処理ができないため別のアプローチをとる必要があります。Nagiosで監視する場合には具体的に以下のような流れになるようです。


- NagiosでのTrap受信・アラートまでの簡単な流れ -

① Trapを受信(snmptrapd)
 ↓
② Trapの種類を判断し処理を行う(snmptt)
 処理の一連として、nagios.cmdファイルにログを吐き出す(nagios:submit_check_result利用)
 ↓
③ Nagiosが定期的にnagios.cmdをチェックし該当する(nagios: check_dummy利用
 ↓
④ アラート検知





■前提条件
 ・Ubuntu 12.04 Server
 ・NagiosCore 3.4.1
 ・SNMPTT v1.3




● snmptrapdのインストール&設定
まず、Trapを受信するためのサービス"snmptrapd"をインストールします。Ubuntuでは"snmptt"をインストールすると一緒にインストールされます。
$sudo apt-get install snmptt

すると、/etc/snmp/snmptrapd.confという設定ファイルができるのでこれを編集します。具体的には、最後の行に以下を追加。(※必要に応じてファイルをバックアップしてください。)
traphandle default /usr/sbin/snmptthandler
authCommunity log,execute,net public

ここではコミュニティ名をpublicとしました。
設定の意味は受信したTrapに対してログ出力、コマンドの実行、別のネットワークの転送を許します、という意味らしいです。




● snmpttのインストール&設定

SNMPTTをインストールしますが、先ほどすでにインストール済みなので設定ファイルを変更します。

・ SNMPTTの設定ファイル/etc/snmp/snmptt.iniを変更・確認

確認箇所は以下の通り。
log_enable = 1
log_file = /var/log/snmptt/snmptt.log
log_system_enable = 1 (snmpttの動作ログを残す場合=1)
log_system_file = /var/log/snmptt/snmpttsystem.log
unknown_trap_log_enable = 1 (認識できないTrapをログとして保存する場合=1)
unknown_trap_log_file = /var/log/snmptt/snmpttunknown.log

また、処理するTrapを指定するための設定ファイルを指定する。すでに指定されている/etc/snmp/snmptt.confに追記する手もあるが、新規に別ファイルとして作成する。ここでは、LinkUP,Downを検知するためのファイルを"snmptt.conf.IF-MIB"という名前で別出しにする。

[TrapFiles]
# A list of snmptt.conf files (this is NOT the snmptrapd.conf file). The COMPLETE path
# and filename. Ex: '/etc/snmp/snmptt.conf'
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf
/etc/snmp/snmptt.conf.IF-MIB



・/etc/snmp/snmptt.confの編集

snmptt.confに記載されているTrap以外はUnknownとして扱うため、監視したいTrap毎に記述する必要がある。mibファイルから生成することも可能。
Ubuntuの場合"/usr/share/mibs/"の配下にMIBファイルがある(NagiosでSNMPプラグインをインストールしていれば)のでこれを利用する。
$sudo snmpttconvertmib --in /usr/share/mibs/ietf/IF-MIB --out /etc/snmp/snmptt.conf.IF-MIB

でMIBファイルからsnmpttconf形式に変換したファイルを生成してくれる。これをsnmptt.confに追記するか、snmptt.iniで読み込むように編集してあげる(一番下の辺り)。今回は後者。



・SNMPTTがnagios.cmdにログを書き込むよう設定する

snmptt.conf(snmptt.conf.IF-MIB 等)のFORMATとSDESCの間に下記行を追加して、SNMPTTが"submit_check_result"を利用し"nagios.cmd"にログを書き込むようにする。
今回は別ファイルとした"/etc/snmp/snmptt.conf.IF-MIB"を編集する
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
FORMAT A linkDown trap signifies that the SNMP entity, acting in $*
EXEC /usr/local/nagios/libexec/submit_check_result $r TRAP 2 "Link Down on interface $1. Admin State: $2. Operational state: $3."
SDESC
A linkDown trap signifies that the SNMP entity, acting in
an agent role, has detected that the ifOperStatus object for
one of its communication links is about to enter the down
state from some other state (but not from the notPresent
state). This other state is indicated by the included value
of ifOperStatus.
Variables:
1: ifIndex
2: ifAdminStatus
3: ifOperStatus
EDESC

重要!! 追加行の説明
・青文字の"TRAP"は後ほどのNagios設定のサービス名とあわせる必要があります。
・TRAPの後ろで指定する数字は、NagiosがこのTrapの状態をどう認識するかを指定する重要なパラメータです。
 0:OK
 1:Warning
 2:Critical
 3:Unknown
を意味します。上記例だと、LinkDonwをCriticalとして認識させる事を意味します。



● Nagios側での受信設定

submit_check_resultでログを出力するための設定を行う。

・submit_check_resultをコピーする

Nagiosインストール時のパッケージを解凍したディレクトリからsubmit_check_resultをコピーする。コピー元は自分の環境に合わせてください。
$sudo cp ~/Download/nagios/contrib/eventhandlers/submit_check_result /usr/local/nagios/libexec


・submit_check_resultを編集する

submit_check_resultは"/usr/local/nagios/var/rw/nagios.cmd" に書き込みを行うがUbuntuの場合(sudo)ファイルアクセスの際にアクセス権が無いためアクセスできない。
そのため一部変更が必要。
"submit_check_result"の最後の行を下記のように変更する。
#`$echocmd $cmdline >> $CommandFile`
`$echocmd $cmdline | sudo -u nagios tee -a $CommandFile`

※特にUbuntuはここが重要になります。Nagiosのサービスを稼働させた際に/usr/local/nagios/var/nagios.cmdができるのですがこのファイルは所有者がnagios:nagcmdでアクセス権が660(rw/rw/-)になっています。そのためこのままではファイルアクセスが出来ずNagiosにログが渡せません。
参考:sudoを利用する事の短所



・Nagiosでコマンド、サービス定義を行う
ここまできて、Nagios側でサービスを監視するための設定を行います。

コマンドの定義
check_dummyを利用するため、コマンド定義をします。(Nagisファイル:command.cfg)
define command{
command_name check_dummy
command_line $USER1$/check_dummy $ARG1$ $ARG2$
}



サービスの定義
実際に監視するサービスを定義します。
define service{
use generic-service
host_name test-sw00
service_description TRAP
is_volatile 1
max_check_attempts 1
check_command check_dummy!0!"OK"
notification_options w,u,c,f,r
}


※ Max_check_attemptsは1にしないとアラートが飛ばないです



●サービスの起動

関連サービスを再起動します。
$sudo service nagios restart
$sudo service snmptt restart
$sudo /usr/sbin/snmptrapd -On



●SNMPTRAPDの自動起動設定

snmptrapdはサーバ起動時に自動でサービスが開始するように設定する。初期状態ではされません。
"/etc/defualt/snmpd"を編集します。
編集箇所は以下2つ


TRAPDRUN=yes

TRAPDOPTS="-On -Lsd -p /var/run/snmptrapd.pid"

※この場合再起動しないと確かめられませんが・・。


以上で完了です。


Trapを発生させてみて確認してください。
私は実機でLinkTrapを発生させましたが、こんな方法もあるみたいです。


確認のポイント
① snmpttのログ確認
"/var/log/snmptt/snmptt.log"にTrapが記載されていること。

② /usr/local/nagios/var/rw/nagios.cmdのファイル更新時間が最新になること。

②が確認できれば、Nagiosにログが渡っているはずです。アラートを飛ばすようにしていればNagiosのトップ画面から警報・通知・イベントログなどでも確認できます。

それでも、受信等されない場合"netstat -an"でUDPポート162が開いている事、最悪はtcpdumpなどでSNMP-Trapパケットが到達している事を確認しているなどが必要になるかもしれません。


サービス監視画面<正常時>
正常画面


サービス監視画面<LinkDonwTrap受信時>
アラート検知

検知時はCriticalで赤くなりますが次回のサービスチェックのタイミングでLiinkDonwのままでもOKとなりグリーンになります。そのためアラート(メール)などで飛ばさないとタイミングによっては監視画面からは正常となってしまう場合があるので運用にきおつける必要があります。

Thunderbirdでメールを受信したら1970/1/1 9:00の日付になった

Thunderbirdでメールを受信したら日付が1970/1/1 9:00となる事象について調べたときのメモ


● 事象
  
  ・あるサーバから定期的に送られてくるメールの受信日が1970/1/1 9:00となる
  ・メーラは「Thunderbird12」を利用。(おそらくほかのVersionでもいっしょ → 後述)


● 調査

  ・ほかのメーラではどうなるのかを調べてみた。(かっこ内はバージョン)
   
   Thunderbird(12) → ×
   MicrosoftOutlook(2003) → ○
   WindowsLiveメール(2009) → ○
   AL-Mail32(Ver1.13.a) → ×
   EdMax(2.86.3F) → ○
   Evolution(3.2.3) → ×

   ほかでも発生する様子。


● 正常メールと異常メールの比較

  過去のメールと、以上メールのヘッダを比較してみたところ"Date:"というヘッダの部分に違いがあった。

  正常メール → "Date:"ヘッダ自体が存在しない
  異常メール → "Date:"ヘッダが存在するが文字化けしている。
           
  以上メールを見るとこんな感じ

  Dateヘッダ

  ん?文字化コードとかそういう話ですか?(無知)
  というわけで、これのメールをローカルに保存。(Thunderbirdは.emlという形式)
  これをテキストエディタで開くと

  Date: 金, 11 5 2012 20:07:18 +0900

  となっている。 
  ほかの正常のメールを見ると"金"(日本語)となっているところは"Fri"となっている。
  試しにここを"Fri"に書き換えて、Thunderbirdで読み込んでみる。

  
  ・・・ダメ。


  さらに違いを見てみると正常のものは"5"という月を表す箇所が、"May"となっている。
  ここも書き換えてみて、再度挑戦。
  こんな感じ

  Date: Fri, 11 May 2012 20:07:18 +0900


  正常な日付で認識した!!



  どうやらこれっぽいかも?
 


● 原因??
 
  どうあるべきが正しいのか。RFCを調べてみる。
  RFC:5322 (Internet Message Format)
  [日本語訳]

  これの「3.3章 日付・時刻の仕様」を見ると、日付のフォーマットが規定されている。
  
  [要約]
   ① Dateヘッダは必須ではない (あってもなくてもいい)
   ② 書式は [ day-of-week "," ] date time  となっている。
     ・day-of-week
      → 曜日のことで、"Mon","Tue"...などと英語3文字で表記。
        これはオプションで、入れなくてもいい。入れる場合は、後ろに","が必要。
        例) Mon, 11 ・・・

     ・date
      → day month yearで表わす。
        day は2ケタの数字
        month は"Jan","Feb"などの英字3文字
        year は数字4桁

     ・taime
      → hour ":" minute [ ":" second ]
        hour,minute,secondはそれぞれ2ケタの数字。(secondは省略可)
         
   
  まとめると

     Fri, 11 5 2012 10:00:00

  のような表記になる。この後ろに +0900 といったタイムゾーンを表す数字が入る。

   
   なので、今回はヘッダがそういう状況で送られてくるのが問題で、ひいてはサーバ側の問題だった。



   なお、このDateヘッダの扱いはRFCでこう書かれていた。

    「発信日付は、メッセージが完成し、メール配送システムへの投入準備ができたことをメッセージ作成者が示した日付と時刻とを表す。 (中略) これはメッセージが実際に転送された時刻ではなく、メッセージを作成した人または人以外の作成者がメッセージを最終的に完成させて転送の準備ができた時刻を保持することを目的としたものである。」

 




● 参考
  ちなみに、なぜOutlookではうまく表示されて、Thunderbirdはダメなのか。
  
  Thudnerbirdでは"Dateヘッダ"の扱いが以下の様になるらしい。

   ・Dateヘッダが不正: 1970/1/1 9:00という日付で表示
   ・Dateヘッダがない: Thunderbirdがそのメールを受信した日付で表示


 
  Outlookがなぜ表示されるのかというと、ここを柔軟に対応しておりDateヘッダがない場合は"Received:"ヘッダに記載されている時間をみて表示するらしい。
   



テーマ : ソフトウェア
ジャンル : コンピュータ

プロフィール

Author:Opecha-DaDa
ニッチな技術メモ的なブログになりつつありますが、だからこそあなたのお役に立てる内容があれば幸いです。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。