]> git.g-eek.se Git - interimap.git/commitdiff
Terminate the SMTP transmission channel gracefully.
authorGuilhem Moulin <guilhem@fripost.org>
Sat, 5 Mar 2016 18:36:20 +0000 (19:36 +0100)
committerGuilhem Moulin <guilhem@fripost.org>
Sat, 5 Mar 2016 18:36:26 +0000 (19:36 +0100)
pullimap

index 2c9b45d9efc91484d087bef7effb06d535aa8d0d..40f7f6f13529e2401b3fcccc53add7f6903b5aa4 100755 (executable)
--- a/pullimap
+++ b/pullimap
@@ -127,7 +127,8 @@ my ($SMTP, $SMTP_PIPELINING);
 sub sendmail($$) {
     my ($from, $rfc822) = @_;
     unless (defined $SMTP) {
-        # XXX we can be logged out while connected, so we need to be able to reconnect
+        # 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'}, 25);
         $addr =~ s/^([ls]mtp):// or die;
         my $ehlo = $1 eq 'lmtp' ? 'LHO' : $1 eq 'smtp' ? 'EHLO' : die;
@@ -252,6 +253,10 @@ sub pull(;$) {
         writeUID($uid);
     }, @$ignore);
 
+    # terminate the transmission channel gracefully, cf RFC 5321 section 4.5.3.2
+    smtp_send('QUIT' => '221') if defined $SMTP;
+    undef $SMTP;
+
     # now that everything has been deliverd, mark @ignore and @uid as \Seen
     $IMAP->silent_store(compact_set(@$ignore, @uid), '+', '\Seen') if @$ignore or @uid;