在用於循環,當我遇到一些麻煩的Net :: SMTP。 第一次迭代的作品,但在第二次迭代的腳本就死在......一個未定義的值無法調用「郵件」,行稱作是怪誕在Perl的Net :: SMTP
$smtp->mail('[email protected]'); #from.
任何想法?謝謝你的時間!
use strict;
use warnings;
use Net::SMTP;
my $smtp;
#@data is defined and populated somewhere
foreach my $line (@data) {
my @linearray = split /,/, $line;
my $host = $linearray[2];
$host =~ s/\r|\n//g;
next unless ($host =~ m/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}).([0-9]{1,3})/); # skip if it's not an IP (i.e. it's the header row)
print "Connecting to $host...";
# create object
$smtp = Net::SMTP->new(
Hello => 'hacker.net',
Timeout => 3,
Host => $host,
Debug => 1,
);
$smtp->mail('[email protected]'); #from
my $tocheck = $smtp->recipient('[email protected]'); #to
if ($tocheck == 0) {
print "$host is NOT an open relay\n";
#$smtp->quit;
next;
}
$smtp->data();
$smtp->datasend("Test\n");
$smtp->datasend("\n");
$smtp->datasend("A simple test message\n");
$smtp->dataend();
$smtp->quit;
}
旁註:我覺得有一個在IP匹配線一個錯字,在正則表達式的最後一個元組的部分:'[0〜+ 9]'應該是'[0-9]'。而且,前面的分隔符點不會被轉義。 – zb226
你連接的第二臺主機是什麼?如果你拿出第二條線,它是否工作?無論如何,您應該檢查'Net :: SMTP :: new()'的返回值。 – tripleee
坦克zb226 - 不知道在那裏 – James