use strict;
use AnyEvent::SMTP::Server;
+use AnyEvent::SMTP::Client qw(sendmail);
use Data::Dump qw(dump);
use lib 'lib';
my $host = $ENV{SMTP_HOST} || '0.0.0.0';
my $port = $ENV{SMTP_PORT} || 2525;
+my $server = $ENV{SMTP_SERVER};
-my $server = AnyEvent::SMTP::Server->new( host => $host, port => $port );
+MQR::Redis->redis->psubscribe( "SEND $host:$port smtp *", sub {
+ my ( $message, $channel ) = @_;
+ my ( undef, undef, undef, $from, $to ) = split(/\s/,$channel);
+ warn "sendmail $from -> $to | $message\n";
-$server->reg_cb(
+ my $f = $to;
+ $f =~ s/\@.+//;
+ $f .= '@mqr.rot13.org';
+
+ sendmail
+ from => $f,
+ to => $from,
+ data => "Subject: $message\n\n$message",
+ cb => sub {
+ my ($ok,$error) = @_;
+ warn "# sendmail ", $ok && "OK $ok" || "ERROR: $error", "\n";
+ },
+# debug => 1, # XXX
+ server => $server,
+});
+
+my $smtp = AnyEvent::SMTP::Server->new( host => $host, port => $port );
+
+$smtp->reg_cb(
client => sub {
my ($s,$con) = @_;
warn "Client from $con->{host}:$con->{port} connected\n";
foreach my $to ( @{ $mail->{to} } ) {
my $subject = $1 if $mail->{data} =~ m/^Subject:\s*(.+)$/m;
$subject =~ s/[\s\r\n]+$//; # XXX important!
- MQR::Redis->publish( "MSG $host:$port smtp $mail->{from} $to" => $subject );
+ MQR::Redis->publish( "MSG $host:$port smtp $from $to" => $subject );
}
},
);
-$server->start;
+$smtp->start;
AnyEvent->condvar->recv;