添付ファイルには、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 件のコメント:
コメントを投稿