Email::Send::Sendmail - Send Messages using sendmail


Email-Send documentation Contained in the Email-Send distribution.

Index


Code Index:

NAME

Top

Email::Send::Sendmail - Send Messages using sendmail

SYNOPSIS

Top

  use Email::Send;

  Email::Send->new({mailer => 'Sendmail'})->send($message);

DESCRIPTION

Top

This mailer for Email::Send uses sendmail to send a message. It does not try hard to find the executable. It just calls sendmail and expects it to be in your path. If that's not the case, or you want to explicitly define the location of your executable, alter the $Email::Send::Sendmail::SENDMAIL package variable.

  $Email::Send::Sendmail::SENDMAIL = '/usr/sbin/sendmail';

SEE ALSO

Top

Email::Send, perl.

AUTHOR

Top

Current maintainer: Ricardo SIGNES, <rjbs@cpan.org>.

Original author: Casey West, <casey@geeknest.com>.

COPYRIGHT

Top


Email-Send documentation Contained in the Email-Send distribution.

package Email::Send::Sendmail;
use strict;

use File::Spec ();
use Return::Value;
use Symbol qw(gensym);

use vars qw[$SENDMAIL $VERSION];

$VERSION   = '2.198';

sub is_available {
    my $class = shift;

    # This is RIDICULOUS.  Why do we say it's available if it isn't?
    # -- rjbs, 2006-07-06
    return success "No Sendmail found" unless $class->_find_sendmail;
    return success '';
}

sub _find_sendmail {
    my $class = shift;
    return $SENDMAIL if defined $SENDMAIL;

    my $sendmail;
    for my $dir (
      File::Spec->path,
      ($ENV{PERL_EMAIL_SEND_SENDMAIL_NO_EXTRA_PATHS} ? () : (
        File::Spec->catfile('', qw(usr sbin)),
        File::Spec->catfile('', qw(usr lib)),
      ))
    ) {
        if ( -x "$dir/sendmail" ) {
            $sendmail = "$dir/sendmail";
            last;
        }
    }

    return $sendmail;
}

sub send {
    my ($class, $message, @args) = @_;
    my $mailer = $class->_find_sendmail;

    return failure "Couldn't find 'sendmail' executable in your PATH"
        ." and \$".__PACKAGE__."::SENDMAIL is not set"
        unless $mailer;

    return failure "Found $mailer but cannot execute it"
        unless -x $mailer;
    
    local $SIG{'CHLD'} = 'DEFAULT';

    my $pipe = gensym;

    open $pipe, "| $mailer -t -oi @args"
        or return failure "Error executing $mailer: $!";
    print $pipe $message->as_string
        or return failure "Error printing via pipe to $mailer: $!";
    close $pipe
        or return failure "error when closing pipe to $mailer: $!";
    return success;
}

1;

__END__