diff -r 000000000000 -r 2a5f2464f8c6 injectMail --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/injectMail Fri Nov 04 06:29:26 2005 +0000 @@ -0,0 +1,90 @@ +#! /usr/bin/perl +# $Id$ +# $URL$ +my $USAGE = <<'#'; +{{ME}} [options] --user={USER} [mboxfile] + --domain=s default domain for mailbox id [{{$Cf->domain}}] + + Version: $Id$ +# + +use strict; +use warnings; + +use Mail::IMAPClient; +use File::Basename; +use AppConfig; + +use constant CONFIG => ( + { CASE => 1 }, + domain => { ARGS => "=s", DEFAULT => "ddc-consult.de" }, + user => { ARGS => "=s", DEFAULT => undef }, + help => { ARGS => "!", DEFAULT => undef }, +); + +use constant ME => basename $0; + +use constant IMAP_SERVER => "localhost"; +use constant IMAP_ADMIN => "root"; +use constant IMAP_PASS => $ENV{IMAP_PASS}; + +sub askPass($); + +my $Cf = new AppConfig CONFIG or die; + $Cf->getopt(\@ARGV) or die; + +HELP: { + last unless $Cf->help; + $USAGE =~ s/{{(.*?)}}/eval $1/eg; + print $USAGE; + exit; +} + +MAIN: { + $Cf->user or die "Need user..."; + my $mbox = $Cf->user; + $mbox .= "@" . $Cf->domain unless $mbox =~ /@/; + $mbox = "user/$mbox"; + + + my $imap = new Mail::IMAPClient + Server => IMAP_SERVER, + User => IMAP_ADMIN, + Password => IMAP_PASS || askPass("IMAP (". IMAP_ADMIN .") password: ") + or die "Can't connect: $@"; + + $imap->setacl($mbox, IMAP_ADMIN, "lrswipcda") or die "$@: $mbox"; + $imap->select($mbox) or die "$@: $mbox"; + + { + my $message; + while (<>) { + if (/^From / or eof) { + if ($message) { + print "Appending message (" . length($message) . ") bytes\n"; + $imap->append($mbox, $message) or die "$@"; + $message = ""; + } + } else { + $message .= $_; + } + } + } + +} + +sub askPass($) { + local $| = 1; + return undef if not -t; + + print $_[0]; + system(stty => "-echo"); + my $ans = ; + system(stty => "echo"); + print "\n"; + + chomp $ans; + return $ans; +} + +# vim:sts=4 sw=4 aw ai sm: