NAME¶
Net::Server::Mail::LMTP - A module to implement the LMTP protocole
SYNOPSIS¶
use Net::Server::Mail::LMTP;
my @local_domains = qw(example.com example.org);
my $server = new IO::Socket::INET Listen => 1, LocalPort => 25;
my $conn;
while($conn = $server->accept)
{
my $esmtp = new Net::Server::Mail::LMTP socket => $conn;
# adding some handlers
$esmtp->set_callback(RCPT => \&validate_recipient);
$esmtp->set_callback(DATA => \&queue_message);
$esmtp->process();
$conn->close()
}
sub validate_recipient
{
my($session, $recipient) = @_;
my $domain;
if($recipient =~ /@(.*)>\s*$/)
{
$domain = $1;
}
if(not defined $domain)
{
return(0, 513, 'Syntax error.');
}
elsif(not(grep $domain eq $_, @local_domains))
{
return(0, 554, "$recipient: Recipient address rejected: Relay access denied");
}
return(1);
}
sub queue_message
{
my($session, $data) = @_;
my $sender = $session->get_sender();
my @recipients = $session->get_recipients();
return(0, 554, 'Error: no valid recipients')
unless(@recipients);
my $msgid = add_queue($sender, \@recipients, $data)
or return(0);
return(1, 250, "message queued $msgid");
}
DESCRIPTION¶
This class implement the LMTP (RFC 2033) protocol.
This class inherit from Net::Server::Mail::ESMTP. Please see
Net::Server::Mail::ESMTP for documentation of common methods.
EVENTS¶
Descriptions of callback who's can be used with set_callback method. All handle
takes the Net::Server::Mail::ESMTP object as first argument and specific
callback's arguments.
LHLO¶
Same as ESMTP EHLO, please see Net::Server::Mail::ESMTP.
DATA¶
Overide the default DATA event by a per recipient response. It will be called
for each recipients with data (in a scalar reference) as first argument
followed by the current recipient.
SEE ALSO¶
Please, see Net::Server::Mail, Net::Server::Mail::SMTP and
Net::Server::Mail::ESMTP.
AUTHOR¶
Olivier Poitrey <rs@rhapsodyk.net>
AVAILABILITY¶
Available on CPAN.
anonymous Git repository:
git clone
git://github.com/rs/net-server-mail.git
Git repository on the web:
<
https://github.com/rs/net-server-mail>
BUGS¶
Please use CPAN system to report a bug (
http://rt.cpan.org/).
LICENCE¶
This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 2.1 of the License, or (at your option)
any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
details.
You should have received a copy of the GNU Lesser General Public License along
with this library; if not, write to the Free Software Foundation, Inc., 59
Temple Place, Suite 330, Boston, MA 02111-1307 USA
COPYRIGHT¶
Copyright (C) 2002 - Olivier Poitrey, 2007 - Xavier Guimard