NAME

AnyEvent::SMTP::Server - Simple asyncronous SMTP Server

SYNOPSIS

use AnyEvent::SMTP::Server 'smtp_server';

smtp_server undef, 2525, sub {
    my $mail = shift;
    warn "Received mail from $mail->{from} to $mail->{to}\n$mail->{data}\n";
};

# or

use AnyEvent::SMTP::Server;

my $server = AnyEvent::SMTP::Server->new(
    port => 2525,
    mail_validate => sub {
        my ($m,$addr) = @_;
        if ($good) { return 1 } else { return 0, 513, 'Bad sender.' }
    },
    rcpt_validate => sub {
        my ($m,$addr) = @_;
        if ($good) { return 1 } else { return 0, 513, 'Bad recipient.' }
    },
    data_validate => sub {
        my ($m,$data) = @_;
        my $size = length $data;
        if ($size > $max_email_size) {
            return 0, 552, 'REJECTED: message size limit exceeded';
        } else {
            return 1;
        }
    },
);

$server->reg_cb(
    client => sub {
        my ($s,$con) = @_;
        warn "Client from $con->{host}:$con->{port} connected\n";
    },
    disconnect => sub {
        my ($s,$con) = @_;
        warn "Client from $con->{host}:$con->{port} gone\n";
    },
    mail => sub {
        my ($s,$mail) = @_;
        warn "Received mail from ($mail->{host}:$mail->{port}) $mail->{from} to $mail->{to}\n$mail->{data}\n";
    },
);

$server->start;
AnyEvent->condvar->recv;

DESCRIPTION

Simple asyncronous SMTP server. Authorization not implemented yet. Patches are welcome

FUNCTIONS

smtp_server $host, $port, $cb->(MAIL)

METHODS

new %args;

hosthame

Server FQDN

host

Address to listen on. by default - undef (0.0.0.0)

port

Port to listen on

start

Creates tcp server and starts to listen

stop

Closes all opened connections and shutdown server

EVENTS

ready()

Invoked when server is ready

client($connection)

Invoked when client connects

disconnect($connection)

Invoked when client disconnects

mail($mail)

Invoked when server received complete mail message

$mail = {
    from => ...,
    to   => [ ... ],
    data => '...',
    host => 'remote addr',
    port => 'remote port',
    helo => 'HELO/EHLO string',
};

BUGS

Bug reports are welcome in CPAN's request tracker http://rt.cpan.org/NoAuth/Bugs.html?Dist=AnyEvent-SMTP

AUTHOR

Mons Anderson, <mons at cpan.org>

COPYRIGHT & LICENSE

Copyright 2009 Mons Anderson, all rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.