星期日, 9月 04, 2005

把丟到Gmail 的圖檔再拿回來

上一篇 用Perl 備份圖檔到 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