- 论坛徽章:
- 3
|
本帖最后由 minirain 于 2015-07-14 11:35 编辑
Global symbol "$datenum" requires explicit package name at E:\2.2c\email\NetIMAP.pl line 169.
我将如何定义变量“$datenum”???- #!/usr/bin/bin/perl
- #use strict;
- #use warnings;
- use Net::IMAP::Client;
- use MIME::Base64;
- use MIME::QuotedPrint;
- #use Data::Dumper;
- use Encode;
- use Term::ReadKey;
- use v5.14 ;
- #binmode STDOUT, ':utf8';
- my ($k,$d,$c,$dirname ,$dir_cn,$user,$pass,$item_messages,@folders,@mailbox) ;
- my %months = ( Jan =>'01',
- Feb =>'02',
- Mar =>'03',
- Apr =>'04',
- May =>'05',
- Jun =>'06',
- Jul =>'07',
- Aug =>'08',
- Sep =>'09',
- Oct =>'10',
- Nov =>'11',
- Dec =>'12');
-
- my %weeks = ( Sun =>'(周日)',
- Mon =>'(周一)',
- Tue =>'(周二)',
- Wed =>'(周三)',
- Thu =>'(周四)',
- Fri =>'(周五)',
- Sat =>'(周六)'
- ); #'
- #@folders = ('INBOX','Sent Items','Drafts','Trash','&XfJT0ZAB-');
-
-
- print "Login:";
- $user = <STDIN> ;
- chomp $user ;
- print "Password:";
- ReadMode 2;
- $pass = <STDIN> ;
- chomp $pass ;
- ReadMode 0;
-
- my $imap = Net::IMAP::Client->new(
- server => 'mail.cmhk.com',
- user => $user,
- pass => $pass,
- port => 143
- ) or die "Could not connect to IMAP server";
- $imap->login or die('Login failed: ' . $imap->last_error);
-
- #$user = 'xiaoyu' ;
- $dirname = $user . "\'s email backup";
- mkdir "$dirname" ,0777 ;
- ## get list of folders
- @folders = $imap->folders;
- #print "+++@folders +++" ;# get total # of messages, # of unseen messages etc. (fast!)
- foreach my $folder (@folders)
- {
- my $status = $imap->status($folder); # hash ref!
- $item_messages = $status {MESSAGES} ;
- #print "$folder:$item_messages\n" ;
- if ($item_messages > 0) {push @mailbox ,$folder ;}
-
- }
- print "\n\nMailbox has messages in:" ;
- my $mailboxes = join(' , ',@mailbox) ;
- print "$mailboxes" ;
- # my $mailbox_name = $status {name} ;
- # print "$mailbox_name:$item_messages\n" ;
-
-
-
- foreach my $item (@mailbox)
- {
-
-
- chdir $dirname ;
-
-
-
- if ($item eq 'INBOX') { $dir_cn = '收件箱';}
- elsif ($item eq 'Sent Items') { $dir_cn = '发件箱';}
- elsif ($item eq 'Drafts') { $dir_cn = '草稿箱';}
- elsif ($item eq '&XfJT0ZAB-') { $dir_cn = '其它文件夹';}
- elsif ($item eq 'Trash') { $dir_cn = '已删除';}
- else {$dir_cn = $item ;}
-
- $dir_cn = encode("gbk" ,decode("utf8",$dir_cn));
- mkdir "$dir_cn" ,0777 ;
- # my $dir = $0;
- # $dir =~ s/\w+\.\w+$//;
- # chdir $dir ;
- #print "\n$dirname\n" ;
- # get total # of messages, # of unseen messages etc. (fast!)
- #my $status = $imap->status(@folders); # hash ref!
-
- # select folder
- $imap->select($item);
- print "\nBackup email in \'$item\':\n" ;
- # fetch all message ids (as array reference)
- my $messages = $imap->search('ALL');
- my $Sent_num = @$messages ;
- #my $Sent_num = $item_messages;
- #print "$Sent_num\n";
-
-
- for ( $k = 0;$k < $Sent_num ;$k++)
- {
-
- my ($uid ,$subject_cn ,$subject ,$date, $to,$from ,$cc ,$bcc,@mydate,$datanum,$filename) ;
- # fetch full message
- my $msg_id = $messages->[$k] ;
- my $data = $imap->get_rfc822_body($msg_id);
- my $mail_data = $data;
-
- # fetch message summaries (actually, a lot more)
- my $summaries = $imap->get_summaries($msg_id);
- my $num_sum = @$summaries ;
- #print Data::Dumper::Dumper(@$summaries[0]);
- for (my $i=0,$i<$num_sum,$i++)
- {
- my $hash_sum = @$summaries[$i] ;
- $uid = @$summaries[$i]->uid ;
- $subject_cn = @$summaries[$i]->subject ;
- $subject = $hash_sum {subject} ;
- $subject =~s/\=\?(GBK|gb2312|gb18030|UTF\-8)\?(Q|B)\?(.*?)\?\=/($b = lc $1,$d = lc $2,$a=($d eq 'b')?&decode_base64($3):&decode_qp($3),$c = ($b eq 'utf-8')?&encode("gbk", &decode("utf8", $a)):$a,$c)/ige;
- $date = @$summaries[$i]->date ;
- $to = join(', ', @{@$summaries[$i]->to});
- $from = join(', ', @{@$summaries[$i]->from});
- $cc =join(', ', @{@$summaries[$i]->cc});
-
-
- #print "<$subject>\n" ;
- #foreach my $name ( sort keys %$hash_sum )
- #{
- #my $value = $hash_sum {$name} ;
- #
- #my $temp = encode("gbk" ,decode("utf8",$value));
- #print " $name => $value\n" ;
- #}
-
-
- }
-
- my $temp_k = $k + 1 ;
- print "$temp_k/$Sent_num $date\n" ;
- @mydate = split (' ',$date);
- $mydate[0] =~s/\,//;$mydate[1] = sprintf ("%.2d" ,$mydate[1]);
-
- $datenum = $mydate[3] . $months{$mydate[2]} . $mydate[1] . $weeks{$mydate[0]} ;
- $datenum = encode("gbk", decode( "utf8", $datenum ) ) ;
- my $num_k = sprintf ("%04d" ,$temp_k);
- $subject =~ s/[\?\\\/\<\>\"\: \*\|]/_/g ;
- my $len_subj = length $subject ;
- if ($len_subj >=1000) { $subject = 'too long subject' ;}
- #$filename = "$dirname\\$dir_cn\\${num_k}_$datenum$subject.eml";
- $filename = "$dir_cn\\${num_k}_$datenum$subject.eml";
- next if (-e "$filename");
- open(MSGINFO,">$filename") || die "Couldn't open $filename for appending: $!";
- binmode MSGINFO;
- print MSGINFO $mail_data; # it's reference to a scalar
-
- close (MSGINFO);
- }
- print "Ok!End Backup email in \'$item\'!\n" ;
-
-
-
- }
- print "\nBackup email in directory:$dirname\n" ;
- exit ;
-
- 1;
-
复制代码 |
|