添付ファイルには、Fileオブジェクトの他、メモリ上のバイト列を指すPointerオブジェクトを指定することも可能です。
画像を扱うImageオブジェクトには、ファイルに書き込むことなくPNGやJPEGなどの画像ファイルのバイト列を生成してPointerオブジェクトで得るtoBytes()というメソッドが用意されているので、以下のようにデスクトップのスクリーンショットなどをファイルに保存することなくメール送信することが可能です。
try{ var smtp=new (require('Mail').SMTP)({ host:'vm01xp', user:'test', password:'asdf', pop:true, }); var img=require('Image').Image.capture(); var buf=img.toBytes('.png'); smtp.send({ subject:"ScreenShot", from:'test@example.com', to:'test@example.com', message:"test", files:{ 'image/png:ss.png':buf }, }); }finally{ free(smtp,buf,img); }「require('Image').Image.capture()」でデスクトップのスクリーンショットをImageオブジェクトとして取得し、img変数に代入します。
次に、img.toBytes('.png')でPNGファイルのバイト列を生成しています。
これらのオブジェクトは、最後にfree()関数で解放する必要があります。
そして、SMTPオブジェクトのsend()メソッドの引数で、filesメンバに添付したいファイルの情報を与えます。
添付するのがFileオブジェクトの場合は、FileオブジェクトそのものやFileオブジェクトの配列として指定するだけで、元のファイル名で添付できますが、Pointerオブジェクトの場合はファイル名を指定する必要があるので、上記のように「"content-type:filename":data」のような形式のオブジェクトにして指定します。
Content-Typeの部分を省略して「"filename":data」のようにすると、Content-Typeは「application/octet-stream」として添付されますが、メールソフトの添付画像表示機能などが効かなくなる場合があるので、形式が分かるならなるべく指定しておいた方がいいでしょう。
0 件のコメント:
コメントを投稿