GoogleAnalytics

SyntaxHighlighter

2018年1月17日水曜日

“N” 曜日よりの使者

久しぶりのLabVIEWエントリですが、技術的なことはほとんどなく、ただの愚痴エントリです。

※ 2018-01-19 技術っぽい追記アリ


 LabVIEWで制御している装置の動作終了を遠隔で知りたい場合、スマホ宛に動作完了メールを送信することがあります。

 LabVIEWの「開発システム」以上のエディションには『SMTP EメールVI』というsmtpプロトコルでメール送信をおこなう一連のVI群が含まれています。

SMTP EメールVI (※2015 sp1でのパレット)

以下のような感じでVIをチェーンさせて使います。この例では、私の会社のSMTPサーバを使用して、私のGmailアドレス宛に送信させています。

 ※ 以下、全て「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 件のコメント: