Net::SMTPモジュールを使います。ただデフォルトでauthメソッドを使おうとしてもパケットを投げてくれないので、下のモジュールを新たにppmか何かでインストールして下さい。
次にコーディングに入ります。Net::SMTPについての説明はこちらを参照してください。
メールヘッダについてはTo:だけでいいかと思ったらうまく送信できなかったので、Thunderbirdのパケットをキャプチャしたものを丸パクリします。
Dataヘッダについては何でもいいかと思いますが、一応現在時を取得する方が親切設計でしょう。どれが必要なヘッダか不要なヘッダかは面倒なので調べていません。
Message-IDですがこちらを見る限り何でもいいそうです。好きな命名規則で良いでしょう。
*参考
yahooの鯖はSMTPを拡張したESMTPで運用されています。ESMTPではグリーティングの際にEHLOコマンドを用います。(SMTPではHELOコマンド)
EHLOコマンドでは自分のホストを通知します。Thunderbirdでは
EHLO [192.168.0.6]
とグリーティングしますが、Net::SMTPでは
EHLO localhost.localdomain
とグリーティングします。まあどっちでも構いませんが、、、
http://www.atmarkit.co.jp/fnetwork/rensai/netpro06/netpro01.html
#!/usr/local/bin/perl
use Net::SMTP;
$user="??????";
$passwd="?????????????";
$maildata=<<"END";
Message-ID: <1234567890123456@yahoo.co.jp>
Date: Sat, 14 Jun 2008 09:59:39 +0900
From: uesugi <????????????????2000@yahoo.co.jp>
User-Agent: Thunderbird 2.0.0.14 (Windows/20080421)
MIME-Version: 1.0
To: yahoo <????????????????????@yahoo.co.jp>
Subject: This Mail Make Perl
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
END
$smtp = Net::SMTP->new('smtp.mail.yahoo.co.jp',Timeout=>30,Debug=>1);
$smtp->auth($user, $passwd) or die "Auth Fail\n";
$smtp->mail('????????????????????@yahoo.co.jp');
$smtp->to('????????????????????@yahoo.co.jp');
$smtp->data();
$smtp->datasend("$maildata");
$smtp->datasend("\n");
$smtp->datasend("A simple test message\n");
$smtp->dataend();
$smtp->quit;
print $smtp->domain,"\n";
$smtp->quit;