This is what I use to simulate a system call to mailx.  You can add it
to your collection if you want.

PS.  I use core perl 5.004_03 on NT

--John Cavanaugh


#
############################################################################

#
#                    File: mailx.pl
#                Revision: $Revision$
#
#         Creation Author: cavanaug@sdd.hp.com
#           Creation Date: Thu Jun 12 20:38:20 1997
#
#    Modification $Author$
#      Modification $Date$
#
#          Basic Overview: Emulate mailx on nt
#
#       Comments/Concerns: Not great but it works
#
#                    TODO:  1. Add code to prompt for Cc: after
message....
#                              It will require restructuring the logic
but the
#                              feel of mailx will then be identical to
unix.
#                           2. Change code so that it reads in message
before
#                              opening a connection to the smtp port
#                           3. Add code to identify if STDIN is a
tty/pipe/file
#                              and adjust appropriately when prompting
for
#                              Subject and Cc etc.
#
#
############################################################################

#
# Configure this for your local site
#
my $siteSMTP="xxx.xxx.xxx.com";
my $siteDOMAIN="yyy.yyy.com";

# Dont change anything below this line!!!!!!!


#
############################################################################

# Initialization Routines
#
############################################################################

use English;
use Net::SMTP;
# use Getopt::Std


#
############################################################################

# Global Variables
#
############################################################################

my $PROGNAME="mailx";
my $USAGE=" Usage:  mailx [-s Subject] [-f FromAddress] ToAddresses\n";
my $OPTIONS="ds:f:";

my $VERSION='$Revision 1.02$'; $VERSION=~ s/\$//g;
my $MODDATE='$Date$'; $MODDATE=~ s/\$//g;

my $username=$ENV{'USERNAME'};  $username=~ tr/[A-Z]/[a-z]/;
my $userdomain=$ENV{'USERDOMAIN'};  $userdomain=~ tr/[A-Z]/[a-z]/;
my $computername=$ENV{'COMPUTERNAME'};  $computername=~ tr/[A-Z]/[a-z]/;

my $opt_s,$opt_d,$opt_f;

if ( $ENV{'EMAIL'} )
  { $opt_f="$ENV{'EMAIL'}"; }
else
  { $opt_f="${userdomain}.${username}\@${computername}.${siteDOMAIN}"; }

#
############################################################################

# Parse Command Line
#
############################################################################

#getopts($OPTIONS) or die($USAGE);
JGetOpts($OPTIONS) or die($USAGE);

if ( $opt_d )
  { $opt_d=1; }
else
  { $opt_d=0; }

if ( $opt_s =~ m/^$/ )
{
   print "Subject: ";
   $opt_s=;
}

#
############################################################################

# Begin main processing
#
############################################################################

$smtp=Net::SMTP->new(${siteSMTP}, Debug=>$opt_d);

$smtp->mail($opt_f);

foreach $toaddress (@ARGV)
 { $smtp->to($toaddress); }

$smtp->data();
$smtp->datasend("From: ${userdomain}\\${username} <${opt_f}>\n");
$smtp->datasend("Subject: $opt_s\n");
$smtp->datasend("To: " . join(", ",@ARGV) . "\n");
$smtp->datasend("X-Mailer: pmailx [WindowsNT] \n");
$smtp->datasend("Comment: Unverified from address\n");
$smtp->datasend("\n");

while ()
{
  last if m/^\.$/g;
  $smtp->datasend($_);
}

# Message End
$smtp->dataend();

# Close connection with smtp port
$smtp->quit;



#
############################################################################

#  Functions
#
############################################################################

#
############################################################################

#
#            Function: JGetOpts
#
#             Creator: cavanaug@ecn.purdue.edu (John P Cavanaugh)
#                Date: Fri Apr  7 20:10:37 1995
#
#      Basic Overview: Provide a superset of functionality to standard
#                      supplied Getopts.  The only enhancement is that
#                      the overwriting of arguments can be changed to
#                      appending instead.
#
#             Example: JGetOpts('a:bcd=');
#
#                      -a & -d takes argument.
#                      -b & -c do not take argument.
#                      Sets opt_* as a side effect.
#                      In -a case arg written to opt_a
#                      In -d case arg is appended to opt_d (ENHANCEMENT)

#
#             Returns: Normal error information
#
#           Arguments: $_[0]
#                          Description of options
#
#         Assumptions:
#
#   Comments/Concerns:
#
#       Future Issues:
#
#
############################################################################

sub JGetOpts
{
    local($argumentative) = @_;
    local(@args, $_, $first, $rest);
    local($errs) = 0;
    local($[) = 0;

    @args = split( / */, $argumentative );
    while (@ARGV and ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
    ($first, $rest) = ($1, $2);
    $pos = index($argumentative, $first);

    if ($pos >= $[)
       {
         if ($args[$pos+1] eq '=')
            {
              shift(@ARGV);
              if ($rest eq '')
                 {
                   ++$errs unless @ARGV;
                   $rest = shift(@ARGV);
                 }
              eval "if (\$opt_$first)
                       { \$opt_$first .= \":\" . \$rest; }
                      else
                       { \$opt_$first = \$rest; } ";
            }
           elsif ($args[$pos+1] eq ':')
            {
              shift(@ARGV);
              if ($rest eq '')
                 {
                   ++$errs unless @ARGV;
                   $rest = shift(@ARGV);
                 }
              eval "\$opt_$first = \$rest; ";
            }
           else
            {
              eval "\$opt_$first = 1";
              if ($rest eq '')
                 { shift(@ARGV); }
                else
                 { $ARGV[0] = "-$rest"; }
            }
       }
      else
       {
         ++$errs;

         if ($rest ne '')
            { $ARGV[0] = "-$rest"; }
           else
            { shift(@ARGV); }
       }
    }
    $errs == 0;
}


#
############################################################################

# $Log$



------------------------  Something else Attachment   ------------------------
 Sent: 1997-08-17  12:18:24     From SMTPGATE @POST (cavanaug@sdd.hp.com) : 
smtp_headers_component
Received: by POST.TANDEM.COM (4.14/4.5)
        id AA25913; 17 Aug 97 12:17:38 -0700
Received: from palrel3.hp.com by suntan.tandem.com (8.6.12/suntan5.970212)  for 
        id MAA28036; Sun, 17 Aug 1997 12:18:17 -0700
Received: from hpsdde.sdd.hp.com (hpsdde.sdd.hp.com [15.26.105.103])
        by palrel3.hp.com (8.8.5/8.8.5) with ESMTP id MAA24254
        for ; Sun, 17 Aug 1997 12:18:11 -0700 (PDT)
Received: from hpsdo066 (hpsdo066.sdd.hp.com) by hpsdde.sdd.hp.com with ESMTP
        (1.37.109.16/15.5+IOS 3.22) id AA161055338; Sun, 17 Aug 1997 12:15:39 -0700
Message-Id: <33F74DA9.CCFBEF45@sdd.hp.com>
Date: Sun, 17 Aug 1997 12:14:50 -0700
From: John Cavanaugh 
Organization: Hewlett-Packard Company
X-Mailer: Mozilla 4.01 [en] (WinNT; I)
Mime-Version: 1.0
To: CHATTERJEE_ROBIN
Subject: Another perl email script for NT........
X-Priority: 3 (Normal)
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

    Source: geocities.com/siliconvalley/park/8312

               ( geocities.com/siliconvalley/park)                   ( geocities.com/siliconvalley)