Gitweb:
https://git.exim.org/exim.git/commitdiff/94ecf089d68ac5b85c2a99177a8e4b4d35d5aa2e
Commit: 94ecf089d68ac5b85c2a99177a8e4b4d35d5aa2e
Parent: 46694b802ce0302f3c3344be933cc9737d4d4f4c
Author: Jeremy Harris <jgh146exb@???>
AuthorDate: Sun Dec 20 15:49:39 2020 +0000
Committer: Jeremy Harris <jgh146exb@???>
CommitDate: Sun Dec 20 15:51:00 2020 +0000
Fix local delivery delay when combined with remote callout/hold. Bug 2599
---
doc/doc-docbook/spec.xfpt | 4 +-
doc/doc-txt/ChangeLog | 3 +
src/src/deliver.c | 16 +++-
test/confs/0580 | 28 +++++--
test/log/0580 | 18 ++--
test/log/0581 | 16 ++--
test/log/0582 | 2 +-
test/mail/0580.local | 10 +++
test/scripts/0000-Basic/0580 | 40 +++++++--
test/scripts/0000-Basic/0582 | 7 +-
test/stdout/0580 | 191 +++++++++++++++++++++++++++++++++++++++++++
11 files changed, 296 insertions(+), 39 deletions(-)
diff --git a/doc/doc-docbook/spec.xfpt b/doc/doc-docbook/spec.xfpt
index 302a623..2938de5 100644
--- a/doc/doc-docbook/spec.xfpt
+++ b/doc/doc-docbook/spec.xfpt
@@ -3885,7 +3885,9 @@ id, and the remaining ones must be email addresses. However, if the message is
active (in the middle of a delivery attempt), it is not altered. This option
can be used only by an admin user.
-.vitem "&%-MC%&&~<&'transport'&>&~<&'hostname'&>&~<&'sequence&~number'&>&&&
+.vitem "&%-MC%&&~<&'transport'&>&~<&'hostname'&>&&&
+ &~<&'host&~IP'&>&&&
+ &~<&'sequence&~number'&>&&&
&~<&'message&~id'&>"
.oindex "&%-MC%&"
.cindex "SMTP" "passed connection"
diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog
index f2d34e8..396ec33 100644
--- a/doc/doc-txt/ChangeLog
+++ b/doc/doc-txt/ChangeLog
@@ -156,6 +156,9 @@ JH/31 The ESMTP option name advertised for the SUPPORT_EARLY_PIPE build option
Changeover between the implementations is handled by the mechanisms
alrready coded.
+JH/32 Bug 2599: fix delay of delivery to a local address where there is also
+ a remote which uses callout/hold. Previously the local was queued.
+
Exim version 4.94
-----------------
diff --git a/src/src/deliver.c b/src/src/deliver.c
index 4e6f08f..ec5990c 100644
--- a/src/src/deliver.c
+++ b/src/src/deliver.c
@@ -7067,13 +7067,23 @@ if ( mua_wrapper
/* If this is a run to continue deliveries to an external channel that is
-already set up, defer any local deliveries. */
+already set up, defer any local deliveries.
-if (continue_transport)
+jgh 2020/12/20: I don't see why; locals should be quick.
+The defer goes back to version 1.62 in 1997. A local being still deliverable
+during a continued run might result from something like a defer during the
+original delivery, eg. in a DB lookup. Unlikely but possible.
+
+To avoid delaying a local when combined with a callout-hold for a remote
+delivery, test continue_sequence rather than continue_transport. */
+
+if (continue_sequence > 1 && addr_local)
{
+ DEBUG(D_deliver|D_retry|D_route)
+ debug_printf("deferring local deliveries due to continued-transport\n");
if (addr_defer)
{
- address_item *addr = addr_defer;
+ address_item * addr = addr_defer;
while (addr->next) addr = addr->next;
addr->next = addr_local;
}
diff --git a/test/confs/0580 b/test/confs/0580
index 6dbc06d..a96b011 100644
--- a/test/confs/0580
+++ b/test/confs/0580
@@ -18,28 +18,44 @@ OPT
begin acl
check_rcpt:
- accept verify = recipient/callout=use_sender,hold
+ accept
+ local_parts = delay : remote
+ verify = recipient/callout=2s,use_sender,defer_ok,hold
+ accept
+ local_parts = local
+
+ accept
+ verify = recipient/callout=use_sender,hold
# ----- Routers -----
begin routers
-r1:
- driver = manualroute
+r_local:
+ driver = accept
+ local_parts = local
+ transport = local_deliv
+
+r_remote:
+ driver = manualroute
route_list = * 127.0.0.1
- self = send
- transport = t1
+ self = send
+ transport = t1
begin transports
+local_deliv:
+ driver = appendfile
+ file = DIR/test-mail/$local_part_data
+ user = CALLER
+
t1:
driver = smtp
port = PORT_S
hosts_try_fastopen = :
-
# ----- Retry -----
begin retry
diff --git a/test/log/0580 b/test/log/0580
index f006778..e748c69 100644
--- a/test/log/0580
+++ b/test/log/0580
@@ -1,15 +1,19 @@
1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@??? U=CALLER P=local-smtp S=sss for usery@???
-1999-03-02 09:44:33 10HmaX-0005vi-00 => usery@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmaX-0005vi-00 => usery@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
1999-03-02 09:44:33 10HmaY-0005vi-00 <= CALLER@??? U=CALLER P=local-smtp S=sss for usery@??? usery2@???
-1999-03-02 09:44:33 10HmaY-0005vi-00 => usery@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
-1999-03-02 09:44:33 10HmaY-0005vi-00 -> usery2@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmaY-0005vi-00 => usery@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmaY-0005vi-00 -> usery2@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
1999-03-02 09:44:33 10HmaZ-0005vi-00 <= CALLER@??? U=CALLER P=local-smtp S=sss for usery3@??? usery@???
-1999-03-02 09:44:33 10HmaZ-0005vi-00 => usery3@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
-1999-03-02 09:44:33 10HmaZ-0005vi-00 -> usery@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmaZ-0005vi-00 => usery3@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmaZ-0005vi-00 -> usery@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
1999-03-02 09:44:33 10HmbA-0005vi-00 <= CALLER@??? U=CALLER P=local-smtp S=sss for usery4@??? usery5@???
-1999-03-02 09:44:33 10HmbA-0005vi-00 => usery4@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
-1999-03-02 09:44:33 10HmbA-0005vi-00 -> usery5@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmbA-0005vi-00 => usery4@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmbA-0005vi-00 -> usery5@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
1999-03-02 09:44:33 10HmbA-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbB-0005vi-00 <= CALLER@??? U=CALLER P=local-smtp S=sss for remote@??? local@???
+1999-03-02 09:44:33 10HmbB-0005vi-00 => local <local@???> R=r_local T=local_deliv
+1999-03-02 09:44:33 10HmbB-0005vi-00 => remote@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 message accepted"
+1999-03-02 09:44:33 10HmbB-0005vi-00 Completed
diff --git a/test/log/0581 b/test/log/0581
index 14f8d48..2a82ace 100644
--- a/test/log/0581
+++ b/test/log/0581
@@ -6,22 +6,22 @@
******** SERVER ********
1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
1999-03-02 09:44:33 10HmaX-0005vi-00 <= userc@??? H=(test.ex) [127.0.0.1] P=esmtp S=sss for userd@???
-1999-03-02 09:44:33 10HmaX-0005vi-00 => userd@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmaX-0005vi-00 => userd@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
1999-03-02 09:44:33 10HmaY-0005vi-00 <= usere@??? H=(test.ex) [127.0.0.1] P=esmtp S=sss for userf@???
-1999-03-02 09:44:33 10HmaY-0005vi-00 => userf@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmaY-0005vi-00 => userf@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
1999-03-02 09:44:33 10HmaZ-0005vi-00 <= userc@??? H=(test.ex) [127.0.0.1] P=esmtp S=sss for userd@??? userd2@???
-1999-03-02 09:44:33 10HmaZ-0005vi-00 => userd@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
-1999-03-02 09:44:33 10HmaZ-0005vi-00 -> userd2@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmaZ-0005vi-00 => userd@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmaZ-0005vi-00 -> userd2@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
1999-03-02 09:44:33 10HmbA-0005vi-00 <= userc@??? H=(test.ex) [127.0.0.1] P=esmtp S=sss for userd3@??? userd2@???
-1999-03-02 09:44:33 10HmbA-0005vi-00 => userd3@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
-1999-03-02 09:44:33 10HmbA-0005vi-00 -> userd2@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmbA-0005vi-00 => userd3@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmbA-0005vi-00 -> userd2@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
1999-03-02 09:44:33 10HmbA-0005vi-00 Completed
1999-03-02 09:44:33 10HmbB-0005vi-00 <= userc@??? H=(test.ex) [127.0.0.1] P=esmtp S=sss for userd4@??? userd5@???
-1999-03-02 09:44:33 10HmbB-0005vi-00 => userd4@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
-1999-03-02 09:44:33 10HmbB-0005vi-00 -> userd5@??? R=r1 T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmbB-0005vi-00 => userd4@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
+1999-03-02 09:44:33 10HmbB-0005vi-00 -> userd5@??? R=r_remote T=t1 H=127.0.0.1 [127.0.0.1] C="250 yeah got that message"
1999-03-02 09:44:33 10HmbB-0005vi-00 Completed
diff --git a/test/log/0582 b/test/log/0582
index fd43181..179e80f 100644
--- a/test/log/0582
+++ b/test/log/0582
@@ -1,4 +1,4 @@
1999-03-02 09:44:33 U=CALLER F=<userg@???> temporarily rejected RCPT <userg@???>: Could not complete recipient verify callout: 127.0.0.1 [127.0.0.1] : SMTP error from remote mail server after RCPT TO:<userg@???>: 451 not right now
1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@??? U=CALLER P=local-smtp S=sss for userh@???
1999-03-02 09:44:33 10HmaX-0005vi-00 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 451 not right now
-1999-03-02 09:44:33 10HmaX-0005vi-00 == userh@??? R=r1 T=t1 defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 451 not right now
+1999-03-02 09:44:33 10HmaX-0005vi-00 == userh@??? R=r_remote T=t1 defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 451 not right now
diff --git a/test/mail/0580.local b/test/mail/0580.local
new file mode 100644
index 0000000..5ee7d9d
--- /dev/null
+++ b/test/mail/0580.local
@@ -0,0 +1,10 @@
+From CALLER@??? Tue Mar 02 09:44:33 1999
+Received: from CALLER by myhost.test.ex with local-smtp (Exim x.yz)
+ (envelope-from <CALLER@???>)
+ id 10HmbB-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
+Subject: test
+Message-Id: <E10HmbB-0005vi-00@???>
+From: CALLER_NAME <CALLER@???>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+
diff --git a/test/scripts/0000-Basic/0580 b/test/scripts/0000-Basic/0580
index 8d8a117..5cce3e8 100644
--- a/test/scripts/0000-Basic/0580
+++ b/test/scripts/0000-Basic/0580
@@ -19,7 +19,7 @@ QUIT
221 Bye
****
#
-exim -bs
+exim -bs -odi
mail from:<userx@???>
rcpt to:<usery@???>
data
@@ -29,7 +29,6 @@ body
.
quit
****
-sleep 1
#
#
# multiple recipients
@@ -62,7 +61,7 @@ QUIT
221 Bye
****
#
-exim -bs
+exim -bs -odi
mail from:<userx@???>
rcpt to:<usery@???>
rcpt to:<usery2@???>
@@ -73,7 +72,6 @@ body
.
quit
****
-sleep 1
#
#
# 2nd callout result is cached (above); should not activate LCC
@@ -105,7 +103,7 @@ QUIT
221 Bye
****
#
-exim -bs
+exim -bs -odi
mail from:<userx@???>
rcpt to:<usery3@???>
rcpt to:<usery@???>
@@ -116,7 +114,6 @@ body
.
quit
****
-sleep 1
#
#
# no cache hits; should do LCC
@@ -138,7 +135,7 @@ QUIT
221 Bye
****
#
-exim -bs
+exim -bs -odi
mail from:<userx@???>
rcpt to:<usery4@???>
rcpt to:<usery5@???>
@@ -149,8 +146,33 @@ body
.
quit
****
-sleep 1
#
+# cmdline -bs send, rmt conn timeout, also local rcpt
+server PORT_S
+220 Welcome
+EHLO
+250 Hi
+MAIL FROM
+250 OK
+RCPT TO
+250 OK
+DATA
+354 hit me
+.
+250 message accepted
+QUIT
+221 bye
+****
+exim -bs -odi
+mail from:<useri@???>
+rcpt to:<remote@???>
+rcpt to:<local@???>
+data
+Subject: test
+.
+quit
+****
+exim -bp
+****
#
-no_stdout_check
no_msglog_check
diff --git a/test/scripts/0000-Basic/0582 b/test/scripts/0000-Basic/0582
index 3eefcc9..6da2023 100644
--- a/test/scripts/0000-Basic/0582
+++ b/test/scripts/0000-Basic/0582
@@ -15,12 +15,11 @@ QUIT
221 Bye
****
#
-exim -bs
+exim -bs -odi
mail from:<userg@???>
rcpt to:<userg@???>
quit
****
-sleep 1
#
# cmdline -bs send, data-time defer
server PORT_S
@@ -39,7 +38,7 @@ QUIT
221 Bye
****
#
-exim -bs
+exim -bs -odi
mail from:<userh@???>
rcpt to:<userh@???>
data
@@ -49,7 +48,7 @@ body
.
quit
****
-sleep 1
+#
#
#
no_stdout_check
diff --git a/test/stdout/0580 b/test/stdout/0580
new file mode 100644
index 0000000..7dbc7d2
--- /dev/null
+++ b/test/stdout/0580
@@ -0,0 +1,191 @@
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250 OK
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaX-0005vi-00
+221 myhost.test.ex closing connection
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250 OK
+250 Accepted
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaY-0005vi-00
+221 myhost.test.ex closing connection
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250 OK
+250 Accepted
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaZ-0005vi-00
+221 myhost.test.ex closing connection
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250 OK
+250 Accepted
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbA-0005vi-00
+221 myhost.test.ex closing connection
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250 OK
+250 Accepted
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmbB-0005vi-00
+221 myhost.test.ex closing connection
+
+******** SERVER ********
+Listening on port 1224 ...
+Connection request from [127.0.0.1]
+220 Welcome
+EHLO myhost.test.ex
+250 Hi
+MAIL FROM:<userx@???>
+250 OK
+RCPT TO:<usery@???>
+250 OK
+DATA
+354 hit me
+Received: from CALLER by myhost.test.ex with local-smtp (Exim x.yz)
+ (envelope-from <CALLER@???>)
+ id 10HmaX-0005vi-00
+ for usery@???; Tue, 2 Mar 1999 09:44:33 +0000
+Subject: test
+Message-Id: <E10HmaX-0005vi-00@???>
+From: CALLER_NAME <CALLER@???>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+body
+.
+250 yeah got that message
+QUIT
+221 Bye
+End of script
+Listening on port 1224 ...
+Connection request from [127.0.0.1]
+220 Welcome
+EHLO myhost.test.ex
+250 Hi
+MAIL FROM:<userx@???>
+250 OK
+RCPT TO:<usery2@???>
+250 OK
+QUIT
+221 Bye
+Expected EOF read from client
+Listening on port 1224 ...
+Connection request from [127.0.0.1]
+220 Welcome
+EHLO myhost.test.ex
+250 Hi
+MAIL FROM:<CALLER@???>
+250 OK
+RCPT TO:<usery@???>
+250 OK
+RCPT TO:<usery2@???>
+250 OK
+DATA
+354 hit me
+Received: from CALLER by myhost.test.ex with local-smtp (Exim x.yz)
+ (envelope-from <CALLER@???>)
+ id 10HmaY-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
+Subject: test
+Message-Id: <E10HmaY-0005vi-00@???>
+From: CALLER_NAME <CALLER@???>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+body
+.
+250 yeah got that message
+QUIT
+221 Bye
+End of script
+Listening on port 1224 ...
+Connection request from [127.0.0.1]
+220 Welcome
+EHLO myhost.test.ex
+250 Hi
+MAIL FROM:<userx@???>
+250 OK
+RCPT TO:<usery3@???>
+250 OK
+QUIT
+221 Bye
+Expected EOF read from client
+Listening on port 1224 ...
+Connection request from [127.0.0.1]
+220 Welcome
+EHLO myhost.test.ex
+250 Hi
+MAIL FROM:<CALLER@???>
+250 OK
+RCPT TO:<usery3@???>
+250 OK
+RCPT TO:<usery@???>
+250 OK
+DATA
+354 hit me
+Received: from CALLER by myhost.test.ex with local-smtp (Exim x.yz)
+ (envelope-from <CALLER@???>)
+ id 10HmaZ-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
+Subject: test
+Message-Id: <E10HmaZ-0005vi-00@???>
+From: CALLER_NAME <CALLER@???>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+body
+.
+250 yeah got that message
+QUIT
+221 Bye
+End of script
+Listening on port 1224 ...
+Connection request from [127.0.0.1]
+220 Welcome
+EHLO myhost.test.ex
+250 Hi
+MAIL FROM:<userx@???>
+250 OK
+RCPT TO:<usery4@???>
+250 OK
+RCPT TO:<usery5@???>
+250 OK
+DATA
+354 hit me
+Received: from CALLER by myhost.test.ex with local-smtp (Exim x.yz)
+ (envelope-from <CALLER@???>)
+ id 10HmbA-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
+Subject: test
+Message-Id: <E10HmbA-0005vi-00@???>
+From: CALLER_NAME <CALLER@???>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+body
+.
+250 yeah got that message
+QUIT
+221 Bye
+End of script
+Listening on port 1224 ...
+Connection request from [127.0.0.1]
+220 Welcome
+EHLO myhost.test.ex
+250 Hi
+MAIL FROM:<useri@???>
+250 OK
+RCPT TO:<remote@???>
+250 OK
+DATA
+354 hit me
+Received: from CALLER by myhost.test.ex with local-smtp (Exim x.yz)
+ (envelope-from <CALLER@???>)
+ id 10HmbB-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
+Subject: test
+Message-Id: <E10HmbB-0005vi-00@???>
+From: CALLER_NAME <CALLER@???>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+.
+250 message accepted
+QUIT
+221 bye
+End of script