#!/usr/bin/perl

use strict; 
use vars qw($opt_s $opt_u);
use Getopt::Std;            
my ($smtpserver,$port);

##############################################################################
# USER DEFINEABLE VARIABLES
#my ($opt_s, $opt_u);

getopts('s:u:');


if ($opt_u eq '' || $opt_s eq '') {
	print <<EOF__;

Usage: fcdos -s servername -u user
       server name is an ip or a hostname of an fcis server.
       user is a valid email address accepted by that server.

EOF__

exit;
}


# Set this to your SMTP server
$smtpserver = $opt_s;
# Mail port of the SMTP server. Usually 25
$port = 25;


    my ($a,$name,$aliases,$proto,$type,$len,$thataddr,$thisaddr,$i);
    $port ||= 25;
    my $AF_INET = 2;
    my $SOCK_STREAM = 1;
    my $sockaddr = 'S n a4 x8';

    ($name,$aliases,$proto) = getprotobyname('tcp');
    ($name,$aliases,$port) = getservbyname($port,'tcp')
        unless $port =~ /^\d+$/;;
    ($name,$aliases,$type,$len,$thataddr) = gethostbyname($smtpserver);

    my $this = pack($sockaddr, $AF_INET, 0, $thisaddr);
    my $that = pack($sockaddr, $AF_INET, $port, $thataddr);

    socket(S, $AF_INET, $SOCK_STREAM, $proto) or &error("Could not open socket: $!");
    bind(S, $this) or die "Could not bind socket: $!";
    connect(S,$that) or die "Could not connect to $thataddr: $!";

    select(S); $| = 1; select(STDOUT);
    
    $a=<S>; print "$a\n";
    &error("SMTP error: $a") if $a !~ /^2/;
    print S "HELO localhost\n";
    $a=<S>; print "$a\n";

    print S "MAIL FROM: <$opt_u>\n";
    $a=<S>; print "$a\n";
    print S "RCPT TO:<$opt_u>\n";
    $a=<S>; print "$a\n";
    print S "DATA \n";
    $a=<S>; print "$a\n";
    open HEADER, "header" || die "file?";
    while (<HEADER>) { print S $_;print $_; };
    close HEADER;
    print S "\n";

    open BODY, "body" || die "file?";
    while (<BODY>) { print S $_;print $_; };
    close BODY; 

    print S ".\n";
    $a=<S>; print "$a\n";

    print S "QUIT";

