#!/usr/bin/perl use strict; use warnings; use IO::Stty; use IO::Socket::SSL; use Net::SMTP; use Authen::SASL; use Data::Dumper; my $user = $ENV{USER}; my $passwd = $ENV{PASSWORD} || getpw('Password: '); my $mech = $ENV{MECH} || 'DIGEST-MD5'; my @ssl_args = ( SSL_verify_mode => SSL_VERIFY_NONE(), ); my $smtp = Net::SMTP->new('192.168.1.3', Hello => 'localhost.localdomain', Port => 587, Debug => 1) or die "couldn't create Net::SMTP object"; printf "connected to %s\n", $smtp->domain; chomp(my $banner = $smtp->banner); printf "banner was '%s'\n", $banner; my $mechanism = $smtp->supports('AUTH', 500, ["Command unknown: 'AUTH'"]); my $sasl = Authen::SASL->new( mechanism => $mech, callback => { user => $user, pass => $passwd, authname => $user, }, debug => 15, ) or die "couldn't create Authen::SASL object"; my $requested_mechanism = $sasl->mechanism(); printf "want: %s\n", $requested_mechanism; printf "got: %s\n", $mechanism; $smtp->auth($sasl) or die "couldn't do AUTH"; # $smtp->auth($user, $passwd) or die "coudln't do AUTH"; $smtp->mail($user) or die "couldn't do MAIL FROM"; $smtp->reset() or die "couldn't do RSET"; $smtp->quit(); undef $smtp; exit 0; sub getpw { my $prompt = shift; my $old_mode = IO::Stty::stty(\*STDIN, '-g'); IO::Stty::stty(\*STDIN, '-echo'); print $prompt; STDOUT->flush(); my $passwd = ; chomp($passwd); print "\n"; IO::Stty::stty(\*STDIN, $old_mode); return $passwd; }