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

Hello Monks

I'm trying to use Log4perl to send email alerts. Gone over the log4perl docs extensively.

I'm using Mail::Sender rather than Mail::Send -- I'm not sure why, but Mail::Send doesn't work for me so I'm trying Mail::Sender.

Log::Dispatch::Email::MailSender appears to be installed ok:

[414][/cygdrive/r/micmac]$ cpan install Log::Dispatch::Email::MailSend +er CPAN: Storable loaded ok (v2.27) Going to read '/home/micmac/.cpan/Metadata' Database was generated on Thu, 26 Jun 2014 20:41:02 GMT CPAN: Module::CoreList loaded ok (v2.49_02) Log::Dispatch::Email::MailSender is up to date (2.41).
Ok so I run my example:
[415][/cygdrive/r/micmac]$ ./lw_ex1.pl ERROR: can't load appenderclass 'Log::Dispatch::Email::MailSender' Can't locate Mail/Sender.pm in @INC (@INC contains: /usr/lib/perl5/sit +e_perl/5.14/i686-cygwin-threads-64int /usr/lib/perl5/site_perl/5.14 / +usr/lib/perl5/vendor_perl/5.14/i686-cygwin-threads-64int /usr/lib/per +l5/vendor_perl/5.14 /usr/lib/perl5/5.14/i686-cygwin-threads-64int /us +r/lib/perl5/5.14 /usr/lib/perl5/site_perl/5.10 /usr/lib/perl5/vendor_ +perl/5.10 /usr/lib/perl5/site_perl/5.8 .) at /usr/lib/perl5/site_perl +/5.14/Log/Dispatch/Email/MailSender.pm line 18. BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/5.14/Log +/Dispatch/Email/MailSender.pm line 18. Compilation failed in require at (eval 24) line 2.
Right it's not there, so why did cpan say it was ok?
[417][/cygdrive/r/davem]$ perl -MLog::Dispatch::Email::MailSender -e 1 Can't locate Mail/Sender.pm in @INC (@INC contains: /usr/lib/perl5/sit +e_perl/5.14/i686-cygwin-threads-64int /usr/lib/perl5/site_perl/5.14 / +usr/lib/perl5/vendor_perl/5.14/i686-cygwin-threads-64int /usr/lib/per +l5/vendor_perl/5.14 /usr/lib/perl5/5.14/i686-cygwin-threads-64int /us +r/lib/perl5/5.14 /usr/lib/perl5/site_perl/5.10 /usr/lib/perl5/vendor_ +perl/5.10 /usr/lib/perl5/site_perl/5.8 .) at /usr/lib/perl5/site_perl +/5.14/Log/Dispatch/Email/MailSender.pm line 18. BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/5.14/Log +/Dispatch/Email/MailSender.pm line 18. Compilation failed in require. BEGIN failed--compilation aborted.
My log4perl.conf mailer section:

#Mailer log4perl.appender.Mailer=Log::Dispatch::Email::MailSender log4perl.appender.Mailer.from=${Mailer_To} log4perl.appender.Mailer.to=${Mailer_To} log4perl.appender.Mailer.smtp=exchange.mycompany.com log4perl.appender.Mailer.subject=${MailerSubject} log4perl.appender.Mailer.layout=Log::Log4perl::Layout::PatternLayout log4perl.appender.Mailer.layout.ConversionPattern=%d - [CAT:%c %F HOS +T:%H] %p > %m%n log4perl.appender.Mailer.Threshold=WARN log4perl.appender.Mailer.buffered=${Buffered} log4perl.appender.Mailer.Filter=MailFilter

If I switch back to Mail::Send I get this:

422/cygdrive/r/micmac$ ./lw_ex1.pl Cannot close handle to mail program at /usr/lib/perl5/site_perl/5.14/Log/Dispatch/Email/MailSend.pm line 35.

lw_ex1.pl is just a simple script to run it:

#!/usr/bin/perl use strict; use Log::Log4perl qw(get_logger :levels :no_extra_logdie_message); Log::Log4perl::init("log4perl.conf); my $logger = get_logger("example"); $logger->info("START " . basename($0)); $logger->info("la ti da");
Any help most appreciated.

Replies are listed 'Best First'.
Re: Log4perl Email appender problem
by basiliscos (Pilgrim) on Jun 27, 2014 at 21:44 UTC

    Hello Monk!

    After researching the same I came to decision, that it is more convenient to use MailSendmail: it uses the system command "sendmail" and just puts the mail into local MTA queue. The last is responsible for actual settings, mail re-transmission on temporal network failures etc.

    In Debian and many other linux distros there is Exim and other MTAs, which almost "just work" out of the box. So, now it is sysdadmin responsibility to setup MTA, not my as developer.

    Here is my setting for that

    log4perl.appender.Email=Log::Dispatch::Email::MailSendmail log4perl.appender.Email.to=a@b.com log4perl.appender.Email.from=c@d.com log4perl.appender.Email.min_level=warn log4perl.appender.Email.layout=Log::Log4perl::Layout::PatternLayout log4perl.appender.Email.layout.ConversionPattern=[%r::%p/%P] %c{1} (%L +) :: %m%n log4perl.appender.Email.buffered = 0
Re: Log4perl Email appender problem
by Anonymous Monk on Jun 28, 2014 at 07:02 UTC

    Can't locate Mail/Sender.pm in @INC

    So why don't you install Mail::Sender?

      Yes I installed it, thanks. However with this sample script:
      use Mail::Sender; $sender = new Mail::Sender { smtp => 'exchange.mycompany.com', from => 'me@mycompany.com', on_errors => 'code', }; die "Can't create the Mail::Sender object: $Mail::Sender::Error\n" unless ref $sender; ref $sender->Open({ to => 'me@mycompany.com', subject => 'test' }) or die "Can't open the message: $sender->{'error_msg'}\n"; $sender->SendLineEnc("Starbucks in 5"); $sender->SendLineEnc("\nHi"); ref $sender->Close or die "Failed to send the message: $sender->{'error_msg'}\n";
      I get this horrible error:

      C:\test>perl send.pl Can't open the message: IO::Socket::SSL->start_SSL failed: SSL connect attempt failed error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

      There is talk of a workaround for that but I have no idea how to apply it. Add some lines to Sender.pm??