injectMail
changeset 0 2a5f2464f8c6
--- /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 = <STDIN>;
+    system(stty => "echo");
+    print "\n";
+
+    chomp $ans;
+    return $ans;
+}
+
+# vim:sts=4 sw=4 aw ai sm: