Client session handling for net::smtp::server.
use Carp;
use Net::SMTP::Server;
use Net::SMTP::Server::Client;
use Net::SMTP::Server::Relay;
$server = new Net::SMTP::Server('localhost', 25) ||
croak("Unable to handle client connection: $!\n");
while($conn = $server->accept()) {
# We can perform all sorts of checks here for spammers, ACLs,
# and other useful stuff to check on a connection.
# Handle the client's connection and spawn off a new parser.
# This can/should be a fork() or a new thread,
# but for simplicity...
my $client = new Net::SMTP::Server::Client($conn) ||
croak("Unable to handle client connection: $!\n");
# Process the client. This command will block until
# the connecting client completes the SMTP transaction.
$client->process || next;
# In this simple server, we're just relaying everything
# to a server. If a real server were implemented, you
# could save email to a file, or perform various other
# actions on it here.
my $relay = new Net::SMTP::Server::Relay($client->{FROM},
$client->{TO},
$client->{MSG});
}
The Net::SMTP::Server::Client module implements all the session handling required for a Net::SMTP::Server::Client connection. The above example demonstrates how to use Net::SMTP::Server::Client with Net::SMTP::Server to handle \s-1SMTP\s0 connections.
$client = new Net::SMTP::Server::Client($conn)
Net::SMTP::Server::Client accepts one argument that must be a handle to a connection that will be used for communication.
Once you have a new client session, simply call:
$client->process
This processes an \s-1SMTP\s0 transaction. \s-1THIS\s0 \s-1MAY\s0 \s-1APPEAR\s0 \s-1TO\s0 \s-1HANG\s0 \*(-- \s-1ESPECIALLY\s0 \s-1IF\s0 \s-1THERE\s0 \s-1IS\s0 A \s-1LARGE\s0 \s-1AMOUNT\s0 \s-1OF\s0 \s-1DATA\s0 \s-1BEING\s0 \s-1SENT\s0. Once this method returns, the server will have processed an entire \s-1SMTP\s0 transaction, and is ready to continue.
Once $client->process returns, various fields have been filled in. Those are:
$client->{TO} -- This is an array containing the intended recipients for this message. There may be multiple recipients for any given message.
$client->{FROM} -- This is the sender of the given message. $client->{MSG} -- The actual message data. :)
You may distribute this package under the terms of either the \s-1GNU\s0 General Public License or the Artistic License, as specified in the Perl \s-1README\s0 file.
Net::SMTP::Server::Server, Net::SMTP::Server::Relay