push messages to redis queue
authorDobrica Pavlinusic <dpavlin@rot13.org>
Tue, 31 Aug 2010 14:00:19 +0000 (16:00 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Tue, 31 Aug 2010 14:00:19 +0000 (16:00 +0200)
scripts/mqr-smtp.pl

index 23d37d9..68c4279 100755 (executable)
@@ -4,8 +4,15 @@ use warnings;
 use strict;
 
 use AnyEvent::SMTP::Server;
-       
-my $server = AnyEvent::SMTP::Server->new( port => 2525 );
+use Data::Dump qw(dump);
+
+use lib 'lib';
+use MQR::Redis;
+
+my $host = $ENV{SMTP_HOST} || '0.0.0.0';
+my $port = $ENV{SMTP_PORT} || 2525;
+
+my $server = AnyEvent::SMTP::Server->new( host => $host, port => $port );
 
 $server->reg_cb(
        client => sub {
@@ -18,7 +25,13 @@ $server->reg_cb(
        },
        mail => sub {
                my ($s,$mail) = @_;
-               warn "Received mail from $mail->{from} to $mail->{to}\n$mail->{data}\n";
+               my $from = $mail->{from};
+               warn "Received mail from $from to ",join(' and ',@{$mail->{to}}), "\n$mail->{data}\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 );
+               }
        },
 );