injectMail
changeset 0 2a5f2464f8c6
equal deleted inserted replaced
-1:000000000000 0:2a5f2464f8c6
       
     1 #! /usr/bin/perl
       
     2 # $Id$
       
     3 # $URL$
       
     4 my $USAGE = <<'#';
       
     5 {{ME}} [options] --user={USER} [mboxfile]
       
     6     --domain=s  default domain for mailbox id [{{$Cf->domain}}]
       
     7 
       
     8     Version: $Id$
       
     9 #
       
    10 
       
    11 use strict;
       
    12 use warnings;
       
    13 
       
    14 use Mail::IMAPClient;
       
    15 use File::Basename;
       
    16 use AppConfig;
       
    17 
       
    18 use constant CONFIG => (
       
    19     { CASE => 1 },
       
    20     domain => { ARGS => "=s", DEFAULT => "ddc-consult.de" },
       
    21     user => { ARGS => "=s", DEFAULT => undef },
       
    22     help => { ARGS => "!", DEFAULT => undef },
       
    23 );
       
    24 
       
    25 use constant ME => basename $0;
       
    26 
       
    27 use constant IMAP_SERVER => "localhost";
       
    28 use constant IMAP_ADMIN => "root";
       
    29 use constant IMAP_PASS => $ENV{IMAP_PASS};
       
    30 
       
    31 sub askPass($);
       
    32 
       
    33 my $Cf = new AppConfig CONFIG or die;
       
    34    $Cf->getopt(\@ARGV) or die;
       
    35 
       
    36 HELP: {
       
    37     last unless $Cf->help;
       
    38     $USAGE =~ s/{{(.*?)}}/eval $1/eg;
       
    39     print $USAGE;
       
    40     exit;
       
    41 }
       
    42 
       
    43 MAIN: {
       
    44     $Cf->user or die "Need user...";
       
    45     my $mbox = $Cf->user;
       
    46     $mbox .= "@" . $Cf->domain unless $mbox =~ /@/;
       
    47     $mbox = "user/$mbox";
       
    48 
       
    49 
       
    50     my $imap = new Mail::IMAPClient 
       
    51 	Server => IMAP_SERVER,
       
    52 	User => IMAP_ADMIN,
       
    53 	Password => IMAP_PASS || askPass("IMAP (". IMAP_ADMIN .") password: ")
       
    54     or die "Can't connect: $@";
       
    55 
       
    56     $imap->setacl($mbox, IMAP_ADMIN, "lrswipcda") or die "$@: $mbox";
       
    57     $imap->select($mbox) or die "$@: $mbox";
       
    58 
       
    59     {
       
    60 	my $message;
       
    61 	while (<>) {
       
    62 	    if (/^From / or eof) {
       
    63 		if ($message) {
       
    64 		    print "Appending message (" . length($message) . ") bytes\n";
       
    65 		    $imap->append($mbox, $message) or die "$@";
       
    66 		    $message = "";
       
    67 		}
       
    68 	    } else {
       
    69 		$message .= $_;
       
    70 	    }
       
    71 	}
       
    72     }
       
    73     
       
    74 }
       
    75 
       
    76 sub askPass($) {
       
    77     local $| = 1;
       
    78     return undef if not -t;
       
    79 
       
    80     print $_[0];
       
    81     system(stty => "-echo");
       
    82     my $ans = <STDIN>;
       
    83     system(stty => "echo");
       
    84     print "\n";
       
    85 
       
    86     chomp $ans;
       
    87     return $ans;
       
    88 }
       
    89 
       
    90 # vim:sts=4 sw=4 aw ai sm: