]> git.g-eek.se Git - interimap.git/commitdiff
wibble
authorGuilhem Moulin <guilhem@fripost.org>
Mon, 7 Mar 2016 16:32:29 +0000 (17:32 +0100)
committerGuilhem Moulin <guilhem@fripost.org>
Mon, 7 Mar 2016 16:32:29 +0000 (17:32 +0100)
lib/Net/IMAP/InterIMAP.pm
pullimap

index 01fb6a903148fe717bf04db8c864161d1e80759c..be62a9d6de46fa5f688cb203a0ab839586c9371d 100644 (file)
@@ -2335,7 +2335,7 @@ sub _resp($$;$$$) {
         }
     }
     elsif (s/\A\+// and ($_ eq '' or s/\A //)) {
-        # microsoft's IMAP server violates RFC 3501 by skipping the trailing ' ' for empty resp-text
+        # Microsoft Exchange Server 2010 violates RFC 3501 by skipping the trailing ' ' for empty resp-text
         if (defined $callback and $cmd eq 'AUTHENTICATE') {
             my $x = $callback->($_);
             $self->_cmd_extend(\$x);
index 7e737f20aab97f498750e2a506503232da4f746b..27226d2d5124d15c4f9a9c98b401d6b98be0cc3e 100755 (executable)
--- a/pullimap
+++ b/pullimap
@@ -1,7 +1,7 @@
 #!/usr/bin/perl -T
 
 #----------------------------------------------------------------------
-# Pull mails from an IMAP mailbox and deliver them to an SMTP session
+# Pull mails from an IMAP mailbox and deliver them to a SMTP session
 # Copyright © 2016 Guilhem Moulin <guilhem@fripost.org>
 #
 # This program is free software: you can redistribute it and/or modify
@@ -59,10 +59,10 @@ my $CONF = read_config( delete $CONFIG{config} // $NAME,
                       , [$ARGV[0]]
                       , statefile => qr/\A(\P{Control}+)\z/
                       , mailbox => qr/\A([\x01-\x7F]+)\z/
-                      , 'deliver-method' => qr/\A((?:[ls]mtp:)?\[.*\](?::\d+)?)\z/
+                      , 'deliver-method' => qr/\A([ls]mtp:\[.*\]:\d+)\z/
                       , 'deliver-ehlo' => qr/\A(\P{Control}+)\z/
                       , 'deliver-rcpt' => qr/\A(\P{Control}+)\z/
-                      , 'purge-after' => qr/\A(\d+)d\z/
+                      , 'purge-after' => qr/\A(\d+)\z/
                       )->{$ARGV[0]};
 
 my ($MAILBOX, $STATE);
@@ -122,12 +122,12 @@ sub sendmail($$) {
     unless (defined $SMTP) {
         # TODO we need to be able to reconnect when the server closes
         # the connection due to a timeout (RFC 5321 section 4.5.3.2)
-        my ($fam, $addr, $port) = (PF_INET, $CONF->{'deliver-method'} // 'smtp:[127.0.0.1]:10024', 25);
+        my ($fam, $addr) = (PF_INET, $CONF->{'deliver-method'} // 'smtp:[127.0.0.1]:25');
         $addr =~ s/^([ls]mtp):// or die;
         my $ehlo = $1 eq 'lmtp' ? 'LHO' : $1 eq 'smtp' ? 'EHLO' : die;
         $ehlo .= ' '. ($CONF->{'deliver-ehlo'} // 'localhost.localdomain');
 
-        $port = $1 if $addr =~ s/:(\d+)$//;
+        my $port = $addr =~ s/:(\d+)$// ? $1 : die;
         $addr =~ s/^\[(.*)\]$/$1/ or die;
         $fam = PF_INET6 if $addr =~ /:/;
         $addr = Socket::inet_pton($fam, $addr) // die "Invalid address $addr\n";
@@ -226,7 +226,6 @@ my $IMAP = Net::IMAP::InterIMAP::->new( %$CONF, %CONFIG{qw/quiet debug/} );
 my $LAST_PURGED;
 sub purge() {
     my $days = $CONF->{'purge-after'} // return;
-    $days =~ s/d$//;
     my ($uidnext) = $IMAP->get_cache('UIDNEXT');
     return unless 1<$uidnext;
     my $set = "1:".($uidnext-1);
@@ -319,7 +318,10 @@ do {
     pull($ignore);
     purge();
 };
-exit 0 unless defined $CONFIG{idle};
+unless (defined $CONFIG{idle}) {
+    $IMAP->logout();
+    exit 0;
+}
 
 $CONFIG{idle} = 1740 if defined $CONFIG{idle} and $CONFIG{idle} == 0; # 29 mins
 while(1) {