#!/usr/bin/perl
use Socket;
# URLを解釈する
$hostname = $ARGV[0] or die;
$port = 25; # ポート番号
$ipaddr = inet_aton($hostname);
# ソケット作成
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or die;
# connectする(bindは省略してある)
connect(SOCK, sockaddr_in($port, $ipaddr)) or die;
# バッファリング無効
select(SOCK); $| = 1; select(STDOUT);
#######################################
# SMTPサーバーから送られてくる挨拶を受け取る
$reply = <SOCK>;
die $reply if $reply !~ /^220/;
print SOCK "HELO kaede.to\r\n";
$reply = <SOCK>;
die $reply if $reply !~ /^250/;
# 差出人を聞く
print "from?\n";
chop($from = <STDIN>);
# 差出人をサーバーに確認を取る
print SOCK "MAIL FROM:$from\r\n";
$reply = <SOCK>;
die $reply if $reply !~ /^250/;
# あて先人を聞く
print "to?\n";
chop($to = <STDIN>);
# あて先人をサーバーに確認を取る
print SOCK "RCPT TO:$to\r\n";
$reply = <SOCK>;
die $reply if $reply !~ /^250/;
# データの送信許可を取る
print SOCK "DATA\r\n";
$reply = <SOCK>;
die $reply if $reply !~ /^354/;
print "write mail message.\n";
# データを送信する
while(<STDIN>){
chop;
last if $_ eq '.';
print SOCK "$_\r\n";
}
# データの終了文字を送信する
print SOCK ".\r\n"; # 終わり
# 送れたかどうか確認
$reply = <SOCK>;
die $reply if $reply !~ /^250/;
print "the mail was sent successfully.\n";