Email::Send - Simply Sending Email


  use Email::Send;
  send SMTP => <<'__MESSAGE__', $host;


  use Email::Send qw[Sendmail]; # preload mailer(s)
  my $email_obj = Email::Simple->new($msg);

  send Sendmail => $email_obj;

  my $mime_message = Simple::MIME->new(...);
  send IO => $mime_message, '-'; # print to STDOUT

  send My::Own::Special::Sender => $msg, %options;


This module provides a very simple, very clean, very specific interface to multiple Email mailers. The goal if this software is to be small and simple, easy to use, and easy to extend.


Mailers are simple to use. You can pre-load mailers when using Email::Send.

  use Email::Send qw[SMTP NNTP];

If you don't preload a mailer before you use it in the send function, it will by dynamically loaded. Mailers are named either relative to the Email::Send namespace, or fully qualified. For example, when using the IO mailer, Email::Send first tries to load Email::Send::IO. If that fails, an attempt is made to load IO. If that final attempt fails, Email::Send will throw an exception.


  my $rv = send $mailer => $message, @args;

This function tries to send $message using $mailer. $message and $mailer are required arguments. Anything passed in @args is passed directly to $mailer. Note that various mailers may require certain arguments. Please consult the documentation for any mailer you choose to use.

If Email::Abstract is installed, the format of $message is specified exactly as anything that Email::Abstract can grok and return as_string. This currently includes most email building classes and a properly formatted message as a string. If you have a message type that Email::Abstract doesn't understand, read its documentation for instructions on how to extend it.

Otherwise you may pass a message as a text string, or as an object whose class is Email::Simple, or inherits from Email::Simple like Email::MIME.

Send is exported at compile time, unless the caller already has a function called send. If you don't want send to be exported, please load this module using require instead of use. Here's an example.

  require Email::Send;

Writing Mailers

Writing new mailers is very simple. If you want to use a short name when calling send, name your mailer under the Email::Send namespace. If you don't, the full name will have to be used. A mailer only needs to implement a single function, send. It will be called from Email::Send exactly like this.

  Your::Sending::Package::send($message, @args);

$message is an Email::Simple object, @args are the extra arguments passed into Email::Send::send.

Here's an example of a mailer that sends email to a URL.

  package Email::Send::HTTP::Post;
  use strict;

  use vars qw[$AGENT $URL $FIELD];
  use Carp qw[croak];
  use LWP::UserAgent;

  sub send {
      my ($message, @args);
      if ( @args ) {
          my ($URL, $FIELD) = @args;
          $AGENT = LWP::UserAgent->new;
      croak "Can't send to URL if no URL and field are named"
        unless $URL && $FIELD;
      $AGENT->post($URL => { $FIELD => $message->as_string });


This example will keep a UserAgent singleton unless new arguments are passed to send. It is used by calling Email::Send::send.

  send HTTP::Post => $message, '', 'message';
  send HTTP::Post => $message2; # uses saved $URL and $FIELD


Email::Abstract, Email::Send::IO, Email::Send::NNTP, Email::Send::Qmail, Email::Send::SMTP, Email::Send::Sendmail, perl.


Casey West, <>.


  Copyright (c) 2004 Casey West.  All rights reserved.
  This module is free software; you can redistribute it and/or modify it
  under the same terms as Perl itself.