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

Dear Monks, I'm using the module MIME::LITE to send out email messages on a web server.
MIME::Lite->send('smtp', "smtp.sample.com", Timeout=>30);
if ($msg->send()) {
print "$file was emailed successfully.";
}
else {
print "$file failed to send.";
}
When the smtp server times out or fails to connect to the server, I am not getting the message printed out on the screen that the file failed to send. The program stops working and I get a white screen. However, the error log contains the error message. Is there a way to print the error message onto the screen without going back to check the error log?

Replies are listed 'Best First'.
Re: SMTP error messages
by walto (Pilgrim) on Apr 02, 2008 at 16:54 UTC
    $msg->last_send_sucessful
    is true when the last message was successfully sent
      I tried that code, but the error message still gets put
      into the error log and not displayed on the screen.
      The following is the error message in the log:
      SMTP Failed to connect to mail server: Invalid argument
      at C:\Perl\......

        First things first, if you are going to mention errors, please do include the entire error message as they are usually very helpful. Chances are that the error is generated in an underlying module, such as IO::Socket::INET using warn or die calls and although you can catch them, it is probably not what you want to do.

        I assume you are on a windows web server, these usually should have one of the following options that can help you avoid timeouts:

        • A windows version of sendmail installed
        • A "sendmail alternative" such as blat installed
        • A local smtp server which you can use

        while ( whoring ){ for ( xp ){ grep /the source/,@perlmonks; }}