オルタナティブ・ブログ > プログラマー社長のブログ >

プログラミングでメシが食えるか!?

メールデータを加工してやりたかったこと

»

メールの話題の続きです。
HTMLメールの様子
メールの添付ファイル
二つのブログ記事でメールデータの様子を紹介しましたが、要するにプログラムを作って何をしたかったかを書きましょう。

当社の製品で、ATGatewayという製品があります。セキュリティ的な観点から、メールの添付ファイルをメールデータからファイルサーバに隔離して、暗号化やパスワード認証を行ってダウンロードして使うことにより、履歴管理やデータの安全化を行う、というものですが、最近のお問い合わせで、セキュリティ的な観点ではなく、データ容量の観点から添付ファイルをファイルサーバに隔離したい、というご相談が増えてきました。社内で使うものなので、暗号化やパスワードも手間になるだけなので不要ということです。

ATGatewayはどちらかというとセキュリティ向けに、非常に多機能なシステムなのですが、ご要望は自社宛のメールから添付ファイルを自社内のファイルサーバに剥ぎ取ってくれれば良い、というだけのシンプルなもので、多機能はかえってユーザが困るから、シンプルに、というご希望です。そこで、ATGatewayのシンプル版を製品化してみようということになり、検討を始めたわけです。

多機能のものをシンプルにするなら、簡単だろう、と考えるかも知れませんが、そうでもないのです。シンプルにするということは、使い勝手も、運用も、仕様もシンプルで簡単にならなければならず、システムとしてもかなり違う作りになるのです。たとえば、セキュリティ的な観点では、おかしなデータは通過させない、というポリシーになりますが、シンプルなシステムでは、おかしなデータはそのまま通過させて欲しい、ということもあるのです。要するに、良くわからない状態にならないで欲しい、ということなのです。もともとセキュリティに関してはファイアーウォールなどですでに対策してあり、単にメールから添付ファイルだけを剥ぎ取りたいという想定では、不正なデータの遮断はファイアーウォール側で行うべきで、そこを通過したら、とにかく何があっても届くことを最優先にして欲しい、ということなのです。

ということで、ATGateway用のメールデータを扱うプログラムを流用するのではなく、新たに作っているところです(もちろん、ライブラリやノウハウは流用してます)。

大体動くようになったので、どんな感じになるかを紹介すると、添付ファイル付きのメールが届いた場合に、添付ファイルをメールデータから剥ぎ取り、ファイルサーバに格納すると同時に、メール本文に剥ぎ取ったというメッセージを追加する、という感じになります。

20110318_181517
こんな感じに、添付ファイル付きのメールを送信すると、メールデータはこんな感じになります。

From: =?iso-2022-jp?B?GyRCPi5LcxsoQiAbJEI4d0c3GyhC?= <komata@ncad.co.jp>
Content-Type: multipart/mixed;
    boundary=Apple-Mail-54-9964966
X-Smtp-Server: ns.ncad.co.jp
Subject: =?iso-2022-jp?B?TWFpbC5hcHAbJEIkKyRpRTpJVSVVJSElJCVrSVUkLSROGyhC?=
=?iso-2022-jp?B?GyRCJWEhPCVrGyhC?=
X-Universally-Unique-Identifier: 41f7f0a9-5f65-49ed-a612-d96d474f92e3
Date: Fri, 18 Mar 2011 18:15:12 +0900
Message-Id: <326004BF-5588-4E1A-BA84-58327C6BA1B2@ncad.co.jp>
To: =?iso-2022-jp?B?GyRCPi5LcxsoQiBQGyRCPi5LcxsoQg==?= <komata@ncad.co.jp>
Mime-Version: 1.0 (Apple Message framework v1082)


--Apple-Mail-54-9964966
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
    charset=iso-2022-jp

Mail.app$B$+$iE:IU%U%!%$%kIU$-$N%a!<%k!*(B

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
$B>.Ks8wG7(B(Mitsuyuki Komata)
$BF|K\%7!<!&%(!<!&%G%#!<3t<02q<R(B
  TEL:03-3565-3011($BD>!K!&(B2011$B!JBe!K(B  FAX:03-3565-3611
E-Mail: komata@ncad.co.jp
Office-URL: http://www.ncad.co.jp/
Blog-URL:http://blogs.itmedia.co.jp/komata/
Private-URL: http://www.ncad.co.jp/~komata/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

--Apple-Mail-54-9964966
Content-Disposition: attachment;
    filename*0*=iso-2022-jp''%1B%24B%24H%24C%24F%24b%24H%24C%24F%24bD9%21A%21A%21A%21A%21A%21A%21A%21A%24%24%25U%25%21%25%24%25kL%3E%1B%28B%2Dlong%2Dlong%2Dl;
    filename*1*=ong%2Dfilename%2D%1B%24B%25F%259%25HMQ%1B%28B.bin
Content-Type: application/macbinary;
    x-unix-mode=0644;
    name="=?iso-2022-jp?B?GyRCJEgkQyRGJGIkSCRDJEYkYkQ5IUEhQSFBIUEhQSFBGyhC?=
=?iso-2022-jp?B?GyRCIUEhQSQkJVUlISUkJWtMPhsoQi1sb25nLWxvbmctbG9u?=
=?iso-2022-jp?B?Zy1maWxlbmFtZS0bJEIlRiU5JUhNURsoQi5iaW4=?="
Content-Transfer-Encoding: base64

Xy9fL18vXy9fL18vXy9fL18vXy9fL18vXy9fL18vXy9fL18vXy9fL18vXy9fL18vXy9fL18vXy9f
L18vXy9fLwrlsI/kv6PlhYnkuYsoTWl0c3V5dWtpIEtvbWF0YSkK5pel5pys44K344O844O744Ko
44O844O744OH44Kj44O85qCq5byP5Lya56S+ClRFTDowMy0zNTY1LTMwMTEo55u077yJ44O7MjAx
Me+8iOS7o++8iSAgRkFYOjAzLTM1NjUtMzYxMQpFLU1haWw6IGtvbWF0YUBuY2FkLmNvLmpwCk9m
ZmljZS1VUkw6IGh0dHA6Ly93d3cubmNhZC5jby5qcC8KQmxvZy1VUkw6aHR0cDovL2Jsb2dzLml0
bWVkaWEuY28uanAva29tYXRhLwpQcml2YXRlLVVSTDogaHR0cDovL3d3dy5uY2FkLmNvLmpwL35r
b21hdGEvCl8vXy9fL18vXy9fL18vXy9fL18vXy9fL18vXy9fL18vXy9fL18vXy9fL18vXy9fL18v
Xy9fL18vXy9fL18vXy8K

--Apple-Mail-54-9964966--


このデータから、添付ファイルを剥ぎ取り、メッセージを挿入したメールはこんな感じになります。
20110318_181545
添付ファイルがなくなり、添付ファイルをファイルサーバに格納したというメッセージが挿入されています(メッセージなどは今後変わる見込みです)。本文も保存しておきたいという希望もありましたので、本文もファイルとしてファイルサーバに格納しています。
メールデータはこんな感じになります。

Received: from komata-MacBook-Air.it.ncad.co.jp (komata-MacBook-Air.it.ncad.co.jp [192.168.0.145]) by mailproxy.ncad.co.jp (NCAD MailProxy) with SMTP id 32418-1300439712 for komata@ncad.co.jp; Fri, 18 Mar 2011 18:15:12 +0900
From: =?iso-2022-jp?B?GyRCPi5LcxsoQiAbJEI4d0c3GyhC?= <komata@ncad.co.jp>
Content-Type: multipart/mixed;boundary="Apple-Mail-54-9964966"
Subject: =?iso-2022-jp?B?TWFpbC5hcHAbJEIkKyRpRTpJVSVVJSElJCVrSVUkLSROGyhC?= =?iso-2022-jp?B?GyRCJWEhPCVrGyhC?=
Date: Fri, 18 Mar 2011 18:15:12 +0900
Message-Id: <326004BF-5588-4E1A-BA84-58327C6BA1B2@ncad.co.jp>
To: =?iso-2022-jp?B?GyRCPi5LcxsoQiBQGyRCPi5LcxsoQg==?= <komata@ncad.co.jp>
Mime-Version: 1.0 (Apple Message framework v1082)
X-Mailer: Apple Mail (2.1082)


--Apple-Mail-54-9964966
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
        charset=iso-2022-jp

### ATGatewayB!'0J2<$NE:IU%U%!%$%k!&K\J8$r%U%!%$%k%5!<%P$K3JG<$7$^$7$? ###
B$H$C$F$b$H$C$F$bD9!A!A!A!A!A!A!A!A$$%U%!%$%kL>-long-long-long-filename-B%F%9%HMQ.bin
MainMsg.txt
### ATGatewayB!'A^F~%a%C%;!<%8!'$3$3$^$G ###

Mail.appB$+$iE:IU%U%!%$%kIU$-$N%a!<%k!*

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
B>.Ks8wG7(Mitsuyuki Komata)
BF|K\%7!<!&%(!<!&%G%#!<3t<02q<R
  TEL:03-3565-3011(BD>!K!&2011B!JBe!K  FAX:03-3565-3611
E-Mail: komata@ncad.co.jp
Office-URL: http://www.ncad.co.jp/
Blog-URL:http://blogs.itmedia.co.jp/komata/
Private-URL: http://www.ncad.co.jp/~komata/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/


--Apple-Mail-54-9964966--


メーラーの画面を見ているだけだと、単純に添付ファイルがなくなって、メッセージが先頭に挿入されているだけだと思うかも知れませんが、メールデータを見ると、マルチパートから添付ファイルだけデコードして取り出したり、メッセージもデコードして、漢字コードを合わせてから挿入して、また漢字コードを変換してエンコードして戻す、というように、実に複雑で面倒な処理になります。
本文がないメールもありますし、もちろん(?)、個人的に嫌いなHTML形式の本文でも、ちゃんとメッセージを挿入します!

さらに、これまでに紹介したように、メールデータは非常に形式が様々で、どの形式できても対応できるようにするのはかなり大変なプログラミングになります。

そして、シンプル版ということもあり、上手くはぎ取れないもの、たとえば電子署名がついていたり、暗号化されているものは、そのまま素通りさせる、という判断も必要になります。

こんなプログラムを、今週の不規則な勤務時間の中で作っていたのでした。大体目処はついたので、次はファイルサーバとの連携などに進むところです。こういうマニアックなプログラムは作っていてワクワクします!

===

さて、ついでに雑談も。

昨日購入した、ジャンキーな単3→単1アダプターですが、こんな感じに使いたかったのです。
L1
単1を4本使う照明器具です。サイズがいまいち合っていないので、隙間テープでごまかしていますが・・・。ちゃんと予備の電球も見えますね。
L2
まあ、何とか使えそうです。多少電池を入れて蓋をするときに微調整は必要ですが。。

L3
よーく見ると、なんと!東芝製です。なつかしいロゴですね。
L4
しかも、MADE IN JAPAN!!!!
この電池式ランタン(?)は、私がまだ実家にいた頃(もっと小さい頃からかも?)から持っていたと思います。その後一人暮らし、結婚して2度の引っ越しを経て、ずっと捨てずに取っておいたのですが、まさか今頃役立つとは思いもしませんでした。
実は他にも、Nationalの高級ラジオ(AM,FM,短波)や、セメント抵抗やホーロー抵抗をふんだんに使ったSanwaのアナログテスターなんかもあります。おじいちゃんから子供の頃にもらったものです。ラジオは今でも使えますが、アナログテスターは電池が特殊(22.5V電池)なので、あまり使う機会はないですねぇ・・・。

買い物が好きなくせに、物持ちが良いので、荷物が増える一方ですね。。

Comment(0)