--- /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: