我写了个有趣的程序,大家帮我测试一下

成功了  不过发一封  回了 5封 其中只有一封里面是正确的信息 剩下的都是空
真诡异,我只有收不到的,没有多发的
天气信息来源于:
http://weather.news.sina.com.cn/
比如:
http://php.weather.sina.com.cn/search.php?city=%B1%B1%BE%A9
所以如果新浪查询没有,那么就没有结果,
模块使用:
use strict;
use warnings;
use Net:OP3;
use Net::SMTP;
use MIME::Base64;
use MIME:uotedPrint;
use HTML::TreeBuilder;
use LWP::UserAgent;
use Encode qw/encode decode/;


[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
#
use strict;
use warnings;
use Net::POP3;
use Net::SMTP;
use MIME::Base64;
use MIME::QuotedPrint;
use HTML::TreeBuilder;
use LWP::UserAgent;
use Encode qw/encode decode/;
my $pop = Net::POP3->new('pop.sina.com') or die "pop failed";
my $username = 'yourusername';
my $password = 'yourpasswd';


while( 1 ){
                chdir("/home/wuyunzhou/mail/pop3");
                my $pop = Net::POP3->new('pop.sina.com') or die "pop failed";
                $pop->login($username,$password);
                $pop->reset();
                my $msgnums = $pop->list;
                while( my($num,$title) = each %$msgnums ){
                        my $msg = $pop->get($num);
                        my($subject,$title,$to);
                        foreach my $line(@$msg){
                                        if($line =~ /^Return-Path:\s*\<(.*?)\>/i){
                                                        $to = $1;
                                        }elsif($line =~ /^Subject/i){
                                                        $subject = $line;
                                        }
                        }
                                        $subject =~ s/^(.*?:)//;
                                        $subject =~ s/^\s+//;
                                        $subject =~ s/\s+$//;

                                        if( $subject =~ /=\?(.+?)\?(.)\?(.+?)\?=/ ){
                                                my $charset = $1;
                                                my $encode = $2;
                                                $title = $3;

                                                if( $encode =~ /b/i ){
                                                                $title = decode_base64($title);
                                                }elsif( $encode =~ /q/i ){
                                                                $title = decode_qp($title);
                                                }

                                        $title = encode('gb2312',decode("$charset",$title));

                                        }else{
                                                $title = $subject;
                                        }

                                        my $q = unpack('H*',$title);
                                        $q =~ s/(..)/%\U$1/g;
                                        &q_weather($q,$to);

                        $pop->delete($num);
                }

                $pop->quit();
                sleep(15);
                #last;
}

sub q_weather(){
                my $city = $_[0];
                my $to = $_[1];

                open(LOG,'>>log.txt');
                print LOG $to;
                print LOG "\n";
                close LOG;

                print "get weather from $city to $to";
                my $ua = LWP::UserAgent->new();
                $ua->timeout(60);
                my $req = HTTP::Request->new(GET=>"http://php.weather.sina.com.cn/search.php?city=$city");
                my $res = $ua->request($req);
                my $content = $res->content;

                $content =~ s/\&nbsp;/ /g;
                my $tree = HTML::TreeBuilder->new();
                $tree->parse($content);

                my $body = undef;
                my @div = $tree->look_down(
                                        _tag => 'div',
                                        class => 'Weather3D',
                                        );

                foreach my $div(@div){
                                        $body .= $div->as_text();
                                        $body .= "\n";
                }
                #print $body;
                my $dot = '。';
                $body =~ s/$dot/$dot \n/g;
                $tree = $tree->delete;

                #my $smtp = Net::SMTP->new('smtp.sina.com',Timeout=>60,Debug=>1);
                my $smtp = Net::SMTP->new('smtp.sina.com',Timeout=>60);
                $smtp->auth("$username","$passwd");

                $smtp->mail('azhou82@sina.com');
                $smtp->to("$to");
                $smtp->data();
                $smtp->datasend("To: $to\n");
                $smtp->datasend("From: azhou82\@sina.com\n");
                $smtp->datasend("Subject: weather report from mail robot\n");
                $smtp->datasend("\n");
                $smtp->datasend($body);
                $smtp->dataend();
                $smtp->quit;
}

[/code]


又发了个,现在格式好多了
代码修改了一下
你丫的,发爆你的邮箱。。
收到了,哈哈:
今日 厦门08年01月11日-12日 星期五 多云 24℃~17℃ 风力:小于3级 防晒指数:一级。
属弱紫外辐射天气,长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。
中暑指数:零级。
温度不高,其他各项气象条件适宜,中暑机率极低。
穿衣指数:三级。
较凉爽,建议着长袖衬裤等春秋过渡装。
体弱者宜着长袖衬衫和马甲。
但昼夜温差较大,请适当增减衣服。
钓鱼指数:白天风和日丽,适宜垂钓,渺渺蓝天,悠悠白云将陪伴你度过愉快的垂钓时光。
  
明日 厦门08年01月12日-13日 星期六 阴转阵雨 24℃~14℃ 风力:小于3级   
后天 厦门08年01月13日-14日 星期日 阵雨 20℃~12℃ 风力:小于3级


QUOTE:
原帖由 maxxfire 于 2008-1-11 10:33 发表
你丫的,发爆你的邮箱。。

看来你没明白楼主的程序是怎样的一个程序……
还是没有人回答下面的问题:

使用net::pop3模块,可是我又一个地方不明白,就是net::pop3模块似乎不是及时更新邮件信息的,比如:
$pop->list();之类的操作,我只能$pop->quit();然后new,然后$pop->login($username,$password);
再使用$pop->list()就能显示出更新的信息了
是不是pop3协议的问题?还是有什么方法?我看了net::pop3 docs ,好像没有相关信息。

我的问题就是,如何不使用登录登出,而是保持登录状态,获取新邮件??