Skip to content

Instantly share code, notes, and snippets.

Created March 17, 2009 16:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/80633 to your computer and use it in GitHub Desktop.
Save anonymous/80633 to your computer and use it in GitHub Desktop.
my $HOST = shift;
my $PORT = shift;
my $EMAILS = shift || 1;
die "HOST must be first argument"
unless $HOST;
die "PORT must be second argument"
unless $PORT;
use JSON qw( to_json );
use Net::SMTP::Server;
use Net::SMTP::Server::Client;
my $server = Net::SMTP::Server->new( $HOST, $PORT );
my $counter = 0;
$| = 1;
CONNECTION: while ( my $conn = $server->accept ) {
my $client = Net::SMTP::Server::Client->new( $conn );
$client->process;
print to_json({
to => $client->{TO},
from => $client->{FROM},
contents => $client->{MSG},
counter => $counter,
emails => $EMAILS,
});
print "\n";
last CONNECTION if ++$counter >= $EMAILS;
}
exit(0);
=head1 NAME
t/smtpd.pl - A dumb SMTP server.
=head1 USAGE
perl smtpd.pl <hostname> <port>
=head1 DESCRIPTION
This program listens on the given hostname and port, then processes the
incoming SMTP client request.
Then it prints a JSON object of the data recieved and exits.
This program will only handle one request before exiting.
=head1 CAVEATS
You MUST C<sleep 1> after opening a pipe to this so that it can establish the
listening on the port.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment