gsee has asked for the wisdom of the Perl Monks concerning the following question:

Hi

I have written a script which calls the system sendmail, which in most cases works well.

But when it fails on the close statement i am getting nothing back in $!

Here is the code:

if ( close(MAIL) ) { logger("DEBUG: Email sent to: $toList", 0); } else { logger("CRITICAL: Email Failed. $!", 1); }

The logger subroutine is a simpler print to file and exit if second parameter is 1

Is there something I am missing here? I really need to know why the close statement is failing so I can do something about it.

Replies are listed 'Best First'.
Re: sendmail not returning error info
by McA (Priest) on Nov 26, 2014 at 10:42 UTC

    Hi,

    have a look at perldoc -f close and you'll see that you have to program two cases where you get feedback in $! or $?.

    McA

      McA, Thanks this definitely helped!

      I am getting an error of 17152 returned in $? which translated to sendmails error code 67 and I'm yet to discover why I get this error as all the email addresses in the To: seem fine.

Re: sendmail not returning error info
by sam_bakki (Pilgrim) on Nov 27, 2014 at 03:50 UTC

    Hi

    I have been using module Mail::Sendmail . With this module, we can error handle better and very easy to send mail via SMTP. See my sample code below,


    use strict; use warnings; use Mail::Sendmail; my %mail = ( To => 'Bakkiaraj Murugesan <bakkiaraj.murugesan@bakki.com>' +, From => 'Bakkiaraj Murugesan <bakkiaraj.murugesan@bakki.com>' +, #Bcc => 'Someone <him@there.com>, Someone else her@there.com +', # only addresses are extracted from Bcc, real names disregarded #Cc => 'Yet someone else <xz@whatever.com>', # Cc will appear in the header. (Bcc will not) Subject => 'Test message - Bakki', 'X-Mailer' => "Mail::Sendmail version $Mail::Sendmail::VERSION", ); $mail{Smtp} = '<mysmtp>.<mydomain>'; # $mail{'X-custom'} = 'My custom additionnal header'; $mail{'message : '} = "Test Message"; # cheat on the date: $mail{Date} = Mail::Sendmail::time_to_date( time() ); if (sendmail(%mail)) { print "Mail sent OK.\n" } else { print "Error sending mail: $Mail::Sendmail::error \n" } print "\n\$Mail::Sendmail::log says:\n", $Mail::Sendmail::log;

    Thanks & Regards,
    Bakkiaraj M
    My Perl Gtk2 technology demo project - http://code.google.com/p/saaral-soft-search-spider/ , contributions are welcome.

      Ill take a look at this if I can (at work where getting modules added is a little tricky)