把丟到Gmail 的圖檔再拿回來

Gmail 有提供 POP 功能,當然是利用她。
除了POP外好像還可以用 gmail-lite 把夾檔的附件做成網頁相簿的模式,但我還沒試過!!
先把 POP 功能打開 設定-> 轉寄和POP->對所有郵件啟用 POP 功能 (包含已經下載的郵件)
POP3 的設定 pop.gmail.com 使用 SSL:是 通訊埠: 995
Perl 用到的 Package 有
Mail::POP3Client : POP 連線端的收信 Package
Net::SSLeay : Gmail POP收信需要 SSL
IO::Socket::SSL : Gmail POP 收信需要 SSL
IO::Handle : POP3Client 收下來的信件存成檔案所用
MIME::Base64::Perl : 最後把Base64 轉回成圖檔
my $socket = IO::Socket::SSL->new( PeerAddr => 'pop.gmail.com',
PeerPort => 995,
Proto => 'tcp') die "No socket!";
my $pop = Mail::POP3Client->new();
$pop->User('yourname@gmail.com');
$pop->Pass('yourpassword');
$pop->Socket($socket);
$pop->Connect();
for( $i = 1; $i <= $pop->Count(); $i++ ) {
open (FILE,">e:/$i.gml");
my $fh = new IO::Handle();
$fh->fdopen( fileno( FILE ), "w" );
$pop->HeadAndBodyToFile( $fh, $i );
print FILE "$fh";
$fh->close;
close (FILE);
&base64;
}
$pop->Close;
取回郵件後,接下來是 BASE64 的 Decode
最懶的做法就是找出 filename 和 --Message-Boundary-by-Mail-Sender-
把中間的資料存起來 Decode
/^Content-disposition: attachment; filename="(.*)"/
$filename = $1;
一直到 --Message-Boundary-by-Mail-Sender- 結束
open (FILE,">e:/$etc/$filename");
binmode FILE;
print FILE decode_base64($buf);
close (FILE);
把資料Decode 並寫入檔案,注意要用 binmode。
就完成了
0 Comments:
張貼留言
<< Home