#!/usr/bin/perl use Socket; use warnings; use strict; my $port = 25; my $sockaddr = 'S n a4 x8'; my $authcount=0; my ($name, $aliases, $proto) = getprotobyname('tcp'); print "Port = $port\n"; my $thisaddr = gethostbyname('157.163.168.131'); my $this = pack($sockaddr, AF_INET, $port, $thisaddr); socket(S, AF_INET, SOCK_STREAM, $proto); bind(S,$this) || die "bind: $!"; listen(S,5) || die "connect: $!"; select(S); $| = 1; select(STDOUT); my $pid; for(;;) { print "Listening for connection....\n"; my $mail_content = ""; my $bool_data = 0; my $addr; ($addr = accept(NS,S)) || die $!; send(NS,"220 okey-dokey\r\n",0); my ($af,$port,$inetaddr) = unpack($sockaddr,$addr); my @inetaddr = unpack('C4',$inetaddr); #print "$af $port @inetaddr\n"; my $ctr=0; while (my $t=) { $ctr++; if( substr($t,0,4) eq "QUIT") { send(NS,"221 Bye\r\n",0); last; } print $t; #print FIL $t; if( substr($t,0,1) eq '.') { send(NS,"250 okey-dokey\r\n",0); $bool_data = 0; next; } if($bool_data){ $mail_content .= $t; } my $x=substr($t,0,4); if( ($x eq "EHLO") ||($x eq "HELO") || ($x eq "RCPT") || ($x eq "MAIL") || ($x eq "RSET") || ($x eq "QUIT")) { send(NS,"250 " . $t . " okey-dokey\r\n",0); } if($x eq "DATA"){ send(NS,"354 End data with .\r\n",0); $bool_data = 1; } } close(NS); analyse_email($mail_content); } sub analyse_email{ my $mail = shift; print "\n\nEMAIL:\n".$mail; }