因為 Blogger 有提供 mail2blog (寄 mail 然後自動轉到 blog 上),所以我想把 Netflow 跑出來的 virus report 給貼上去,結果發現 Perl 的 mail modules 似乎怪怪的 -_____-
我寫了三個版本的 mail modules,不知道是我寫錯還是怎樣,就是寄不出來…
第一個版本是 Mail::Send:
#!/usr/bin/perl
use Mail::Send;
use strict;
sub mail2blogger
{
my ($subj, @body) = @_;
my $msg = new Mail::Send;
$msg->to('gslin@gslin.org');
$msg->subj($subj);
$msg->set('From', 'gslin@gslin.org');
my $fh = $msg->open();
print($fh join("\n", @body));
$msg->close();
}
sub main
{
&mail2blogger('test', '', 'test');
}
第二個版本是 Mail::Sendmail:
#!/usr/bin/perl
use Encode;
use Mail::Sendmail;
use strict;
sub big2utf
{
my $msg = shift;
return (Encode::encode('utf8', Encode::decode('big5', $msg)));
}
sub mail2blogger
{
my ($subj, @body) = @_;
my %msg;
$msg{'Server'} = '127.0.0.1';
$msg{'From'} = 'gslin@gslin.org';
$msg{'To'} = 'gslin@ccca.nctu.edu.tw';
$msg{'Subject'} = $subj;
$msg{'Message'} = join("\n", map { big2utf($_) } @body);
sendmail(%msg) or die $Mail::Sendmail::error;
}
sub main
{
&mail2blogger('test', 'test', '');
}
第三個版本是 Net::SMTP:
#!/usr/bin/perl
use Net::SMTP;
use strict;
sub mail2blogger
{
my @body = shift;
my $smtp = Net::SMTP->new('127.0.0.1', Hello => 'localhost');
$smtp->mail('gslin');
$smtp->to('gslin@gslin.org');
$smtp->data();
foreach my $line (@body)
{
$smtp->datasend($line . "\n");
}
$smtp->quit();
}
sub main
{
&mail2blogger("Subject: test", "", "test");
}
有誰看得出問題來嗎,不然我就要用 system() 了 :~
先試試第一個:
#!/usr/bin/perl
use Mail::Send;
use strict;
mail2blogger(‘test’, ”, ‘test’);
sub mail2blogger
{
my ($subj, @body) = @_;
my $msg = new Mail::Send;
$msg->to(‘gslin@gslin.org’);
$msg->subject($subj);
$msg->set(‘From’, ‘gslin@gslin.org’);
my $fh = $msg->open();
print($fh join(“\n\”, @body)) or die $!;
$fh->close;
}
__END__
第二題也許可以這麼寫:
#!/usr/bin/perl
use Encode;
use Mail::Sendmail;
use strict;
mail2blogger(‘test’, ‘test’, ”);
sub mail2blogger {
my ($subj, @body) = @_;
my %msg = (
‘Server’ => ‘127.0.0.1’,
‘From’ => ‘gslin@gslin.org’,
‘To’ => ‘gslin@gslin.org’,
‘Subject’ => $subj,
‘Message’ => join(“\n\”,
map { Encode::encode(‘utf8’, Encode::decode(‘big5’, $_)) } @body)
);
sendmail(%msg) or die $Mail::Sendmail::error;
print $Mail::Sendmail::log;
}