※ 2018-01-19 技術っぽい追記アリ
LabVIEWで制御している装置の動作終了を遠隔で知りたい場合、スマホ宛に動作完了メールを送信することがあります。
LabVIEWの「開発システム」以上のエディションには『SMTP EメールVI』というsmtpプロトコルでメール送信をおこなう一連のVI群が含まれています。
SMTP EメールVI (※2015 sp1でのパレット) |
※ 以下、全て「LabVIEW2015 sp1(32bit日本語版)」「Windows10 pro(64bit)」の環境でおこなっています。
SMTP EメールVIの使用例 |
するとこんな感じでメールが送信されました。
受信したメール |
……アレ? 作成日時が「1970/01/01」になっちゃってますね~
SMTP EメールVIで送信したメールヘッダ |
「Date」ヘッダの[曜日]が日本語になっちゃってます。
「RFC5322(日本語訳)」によれば、「Date」ヘッダの書式は、
date-time = [ day-of-week "," ] date FWS time [CFWS] day-of-week = ([FWS] day-name) / obs-day-of-week day-name = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun"
と定められていますので、[曜日]が日本語表記なのは間違いであり、そのためパースに失敗して「1970/01/01」からのメールだと表示されたんでしょう。
ここで、私の会社のSMTPサーバでなく、GmailのSMTPサーバを使ってメール送信するとどうなるのでしょうか?
SMTP EメールVIでGmailのSMTPサーバに送ったメールヘッダ |
日本語表記の曜日を[X-Google-Original-Date]に保存した上で、「Date」ヘッダを正格なものに書き換えてますね。
では、そもそもLabVIEWの「SMTP EメールVI」はどんな「Date」ヘッダを作成していたのでしょうか?
これを調べるために、ローカルに「smtp4dev」をSMTPダミーサーバを立てて、そこへメールを送信してみました。
smtp4dev 画面 |
受信した結果は以下の通り……
SMTP EメールVIから送信した無加工のメールヘッダ |
……いや、なんだよw “N” 曜日ってwww
水曜日のメールヘッダ |
文字化けしてます。バイナリエディタで覗いてみると「0x10 0x05」という2バイトが格納されていました(ちなみに、火曜日のメールヘッダは「0x09 0x4E」でした)。
メールヘッダのバイナリ |
LabVIEWの「SMTP EメールVI」には『ヘッダを設定』VIというものがありますので、これを使ってみましたがダメでした。どうも「: (コロン)」が変換されていて使用できないっぽいです。
『ヘッダを設定』VI |
『ヘッダを設定』VIによる上書きは失敗 |
これは手詰まりですねぇ。
試しにLabVIEWの最新版である「2017」をインストールして確認してみましたが、同じくダメでした。
いやぁ~、なんなんでしょうかねぇ……
※ 念のため書いておきますが、「SMTP EメールVI」は「Date」ヘッダがおかしい以外は特に問題は見当たりません。
※ 2018-01-19 追記
.NET使った互換ライブラリ「SMTP_Email2」を作ってGitHubで公開しました(GitHubリポジトリ)。
0 件のコメント:
コメントを投稿