commit 92914be2140997c19f610d7f5f17fa0d9c347b9c Author: Jeremy Harris Date: Thu Aug 31 15:16:09 2023 +0100 Avoid sending DSN when message was accepted under fakereject or fakedefer. Bug 3016 diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index 625c6d426..f2802d2fb 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -179,7 +179,11 @@ JH/34 Bug 3013: Fix use of $recipients within arguments for ${run...}. JH/35 Bug 3014: GnuTLS: fix expiry date for an auto-generated server certificate. Find and fix by Andreas Metzler. -JH/36 Add ARC info to DMARC hostory recordsl +JH/36 Add ARC info to DMARC hostory records. + +JH/37 Bug 3016: Avoid sending DSN when message was accepted under fakereject + or fakedefer. Previously the sender could discover that the message + had in fact been accepted. Exim version 4.96 diff --git a/src/src/acl.c b/src/src/acl.c index ab991ef41..118e4b35d 100644 --- a/src/src/acl.c +++ b/src/src/acl.c @@ -3428,7 +3428,7 @@ for (; cb; cb = cb->next) case CONTROL_FAKEREJECT: cancel_cutthrough_connection(TRUE, US"fakereject"); case CONTROL_FAKEDEFER: - fake_response = (control_type == CONTROL_FAKEDEFER) ? DEFER : FAIL; + fake_response = control_type == CONTROL_FAKEDEFER ? DEFER : FAIL; if (*p == '/') { const uschar *pp = p + 1; diff --git a/src/src/deliver.c b/src/src/deliver.c index 52270368e..c9a1d074b 100644 --- a/src/src/deliver.c +++ b/src/src/deliver.c @@ -6193,11 +6193,11 @@ return child_close(pid, 0) == 0; *************************************************/ static void -maybe_send_dsn(void) +maybe_send_dsn(const address_item * const addr_succeed) { address_item * addr_senddsn = NULL; -for (address_item * a = addr_succeed; a; a = a->next) +for (const address_item * a = addr_succeed; a; a = a->next) { /* af_ignore_error not honored here. it's not an error */ DEBUG(D_deliver) debug_printf("DSN: processing router : %s\n" @@ -8136,7 +8136,7 @@ else if (!f.dont_deliver) /* Send DSN for successful messages if requested */ -maybe_send_dsn(); +maybe_send_dsn(addr_succeed); /* If any addresses failed, we must send a message to somebody, unless af_ignore_error is set, in which case no action is taken. It is possible for diff --git a/src/src/receive.c b/src/src/receive.c index 14038f2ec..3c139b3af 100644 --- a/src/src/receive.c +++ b/src/src/receive.c @@ -514,7 +514,7 @@ Returns: nothing */ void -receive_add_recipient(uschar *recipient, int pno) +receive_add_recipient(uschar * recipient, int pno) { if (recipients_count >= recipients_list_max) { @@ -2669,7 +2669,7 @@ if (extract_recip) that this has happened, in order to give a better error if there are no recipients left. */ - else if (recipient != NULL) + else if (recipient) { if (tree_search(tree_nonrecipients, recipient) == NULL) receive_add_recipient(recipient, -1); @@ -2679,7 +2679,7 @@ if (extract_recip) /* Move on past this address */ - s = ss + (*ss? 1:0); + s = ss + (*ss ? 1 : 0); while (isspace(*s)) s++; } /* Next address */ @@ -3861,10 +3861,10 @@ the spool file gets corrupted. Ensure that all recipients are qualified. */ if (rc == LOCAL_SCAN_ACCEPT) { if (local_scan_data) - for (uschar * s = local_scan_data; *s != 0; s++) if (*s == '\n') *s = ' '; - for (int i = 0; i < recipients_count; i++) + for (uschar * s = local_scan_data; *s; s++) if (*s == '\n') *s = ' '; + for (recipient_item * r = recipients_list; + r < recipients_list + recipients_count; r++) { - recipient_item *r = recipients_list + i; r->address = rewrite_address_qualify(r->address, TRUE); if (r->errors_to) r->errors_to = rewrite_address_qualify(r->errors_to, TRUE); @@ -3946,6 +3946,19 @@ signal(SIGTERM, SIG_IGN); signal(SIGINT, SIG_IGN); #endif /* HAVE_LOCAL_SCAN */ +/* If we are faking a reject or defer, avoid sennding a DSN for the +actually-accepted message */ + +if (fake_response != OK) + for (recipient_item * r = recipients_list; + r < recipients_list + recipients_count; r++) + { + DEBUG(D_receive) if (r->dsn_flags & (rf_notify_success | rf_notify_delay)) + debug_printf("DSN: clearing flags due to fake-response for message\n"); + r->dsn_flags = r->dsn_flags & ~(rf_notify_success | rf_notify_delay) + | rf_notify_never; + } + /* Ensure the first time flag is set in the newly-received message. */ diff --git a/test/confs/0612 b/test/confs/0612 index b3174aabc..786b2e58e 100644 --- a/test/confs/0612 +++ b/test/confs/0612 @@ -34,10 +34,12 @@ ev_log: accept logwrite = event $event_name rcpt: - accept hosts = HOSTIPV4 + accept hosts = HOSTIPV4 - deny local_parts = rmt_reject - defer local_parts = rmt_defer + deny local_parts = rmt_reject + defer local_parts = rmt_defer + accept local_parts = rmt_fakereject + control = fakereject accept # ----- Routers ----- diff --git a/test/log/0612 b/test/log/0612 index 060240719..e022b5071 100644 --- a/test/log/0612 +++ b/test/log/0612 @@ -33,72 +33,94 @@ 1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbA-000000005vi-0000 event msg:complete 1999-03-02 09:44:33 End queue run: pid=p1237 -1999-03-02 09:44:33 defer/delay +1999-03-02 09:44:33 fakereject/success 1999-03-02 09:44:33 Start queue run: pid=p1238 1999-03-02 09:44:33 10HmbB-000000005vi-0000 event tcp:connect 1999-03-02 09:44:33 10HmbB-000000005vi-0000 event smtp:connect 1999-03-02 09:44:33 10HmbB-000000005vi-0000 event smtp:ehlo -1999-03-02 09:44:33 10HmbB-000000005vi-0000 event msg:rcpt:host:defer -1999-03-02 09:44:33 10HmbB-000000005vi-0000 event msg:rcpt:defer 1999-03-02 09:44:33 10HmbB-000000005vi-0000 event tcp:close -1999-03-02 09:44:33 10HmbB-000000005vi-0000 == rmt_defer@test.ex R=r2 T=smtp defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary local problem - please try later +1999-03-02 09:44:33 10HmbB-000000005vi-0000 ** rmt_fakereject@test.ex R=r2 T=smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 550-Your message has been rejected but is being kept for evaluation.\n550-If it was a legitimate message, it may still be delivered to the target\n550 recipient(s). +1999-03-02 09:44:33 10HmbB-000000005vi-0000 event msg:fail:delivery +1999-03-02 09:44:33 10HmbB-000000005vi-0000 rmt_fakereject@test.ex: error ignored: RFC 3461 DSN, failure notify not requested +1999-03-02 09:44:33 10HmbB-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbB-000000005vi-0000 event msg:complete 1999-03-02 09:44:33 End queue run: pid=p1238 -1999-03-02 09:44:33 defer/never 1999-03-02 09:44:33 Start queue run: pid=p1239 -1999-03-02 09:44:33 10HmbB-000000005vi-0000 == rmt_defer@test.ex routing defer (-52): retry time not reached -1999-03-02 09:44:33 10HmbC-000000005vi-0000 event tcp:connect -1999-03-02 09:44:33 10HmbC-000000005vi-0000 event smtp:connect -1999-03-02 09:44:33 10HmbC-000000005vi-0000 event smtp:ehlo -1999-03-02 09:44:33 10HmbC-000000005vi-0000 event msg:rcpt:host:defer -1999-03-02 09:44:33 10HmbC-000000005vi-0000 event msg:rcpt:defer -1999-03-02 09:44:33 10HmbC-000000005vi-0000 event tcp:close -1999-03-02 09:44:33 10HmbC-000000005vi-0000 == rmt_defer@test.ex R=r2 T=smtp defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary local problem - please try later +1999-03-02 09:44:33 10HmbC-000000005vi-0000 => rmt_fakereject R=r1 T=tofile +1999-03-02 09:44:33 10HmbC-000000005vi-0000 event msg:delivery +1999-03-02 09:44:33 10HmbC-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbC-000000005vi-0000 event msg:complete 1999-03-02 09:44:33 End queue run: pid=p1239 -1999-03-02 09:44:33 playout 1999-03-02 09:44:33 Start queue run: pid=p1240 -1999-03-02 09:44:33 10HmbB-000000005vi-0000 == rmt_defer@test.ex routing defer (-52): retry time not reached -1999-03-02 09:44:33 10HmbD-000000005vi-0000 <= <> R=10HmbB-000000005vi-0000 U=EXIMUSER P=local S=sss for c@dump.ex -1999-03-02 09:44:33 10HmbC-000000005vi-0000 == rmt_defer@test.ex routing defer (-52): retry time not reached 1999-03-02 09:44:33 End queue run: pid=p1240 -1999-03-02 09:44:33 10HmbB-000000005vi-0000 event msg:fail:internal -1999-03-02 09:44:33 10HmbB-000000005vi-0000 event msg:complete -1999-03-02 09:44:33 10HmbB-000000005vi-0000 removed by CALLER -1999-03-02 09:44:33 10HmbB-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbC-000000005vi-0000 event msg:fail:internal -1999-03-02 09:44:33 10HmbC-000000005vi-0000 event msg:complete -1999-03-02 09:44:33 10HmbC-000000005vi-0000 removed by CALLER -1999-03-02 09:44:33 10HmbC-000000005vi-0000 Completed -1999-03-02 09:44:33 rej/failure+delay +1999-03-02 09:44:33 defer/delay 1999-03-02 09:44:33 Start queue run: pid=p1241 -1999-03-02 09:44:33 10HmbD-000000005vi-0000 => :blackhole: R=r_dump -1999-03-02 09:44:33 10HmbD-000000005vi-0000 Completed -1999-03-02 09:44:33 10HmbD-000000005vi-0000 event msg:complete +1999-03-02 09:44:33 10HmbD-000000005vi-0000 event tcp:connect +1999-03-02 09:44:33 10HmbD-000000005vi-0000 event smtp:connect +1999-03-02 09:44:33 10HmbD-000000005vi-0000 event smtp:ehlo +1999-03-02 09:44:33 10HmbD-000000005vi-0000 event msg:rcpt:host:defer +1999-03-02 09:44:33 10HmbD-000000005vi-0000 event msg:rcpt:defer +1999-03-02 09:44:33 10HmbD-000000005vi-0000 event tcp:close +1999-03-02 09:44:33 10HmbD-000000005vi-0000 == rmt_defer@test.ex R=r2 T=smtp defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary local problem - please try later +1999-03-02 09:44:33 End queue run: pid=p1241 +1999-03-02 09:44:33 defer/never +1999-03-02 09:44:33 Start queue run: pid=p1242 +1999-03-02 09:44:33 10HmbD-000000005vi-0000 == rmt_defer@test.ex routing defer (-52): retry time not reached 1999-03-02 09:44:33 10HmbE-000000005vi-0000 event tcp:connect 1999-03-02 09:44:33 10HmbE-000000005vi-0000 event smtp:connect 1999-03-02 09:44:33 10HmbE-000000005vi-0000 event smtp:ehlo +1999-03-02 09:44:33 10HmbE-000000005vi-0000 event msg:rcpt:host:defer +1999-03-02 09:44:33 10HmbE-000000005vi-0000 event msg:rcpt:defer 1999-03-02 09:44:33 10HmbE-000000005vi-0000 event tcp:close -1999-03-02 09:44:33 10HmbE-000000005vi-0000 ** rmt_reject@test.ex R=r2 T=smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 550 Administrative prohibition -1999-03-02 09:44:33 10HmbF-000000005vi-0000 <= <> R=10HmbE-000000005vi-0000 U=EXIMUSER P=local S=sss for e@dump.ex -1999-03-02 09:44:33 10HmbE-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbE-000000005vi-0000 == rmt_defer@test.ex R=r2 T=smtp defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 451 Temporary local problem - please try later +1999-03-02 09:44:33 End queue run: pid=p1242 +1999-03-02 09:44:33 playout +1999-03-02 09:44:33 Start queue run: pid=p1243 +1999-03-02 09:44:33 10HmbD-000000005vi-0000 == rmt_defer@test.ex routing defer (-52): retry time not reached +1999-03-02 09:44:33 10HmbF-000000005vi-0000 <= <> R=10HmbD-000000005vi-0000 U=EXIMUSER P=local S=sss for c@dump.ex +1999-03-02 09:44:33 10HmbE-000000005vi-0000 == rmt_defer@test.ex routing defer (-52): retry time not reached +1999-03-02 09:44:33 End queue run: pid=p1243 +1999-03-02 09:44:33 10HmbD-000000005vi-0000 event msg:fail:internal +1999-03-02 09:44:33 10HmbD-000000005vi-0000 event msg:complete +1999-03-02 09:44:33 10HmbD-000000005vi-0000 removed by CALLER +1999-03-02 09:44:33 10HmbD-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbE-000000005vi-0000 event msg:fail:internal 1999-03-02 09:44:33 10HmbE-000000005vi-0000 event msg:complete -1999-03-02 09:44:33 End queue run: pid=p1241 -1999-03-02 09:44:33 deliver DSN -1999-03-02 09:44:33 Start queue run: pid=p1242 -1999-03-02 09:44:33 10HmbF-000000005vi-0000 => :blackhole: R=r_dump +1999-03-02 09:44:33 10HmbE-000000005vi-0000 removed by CALLER +1999-03-02 09:44:33 10HmbE-000000005vi-0000 Completed +1999-03-02 09:44:33 rej/failure+delay +1999-03-02 09:44:33 Start queue run: pid=p1244 +1999-03-02 09:44:33 10HmbF-000000005vi-0000 => :blackhole: R=r_dump 1999-03-02 09:44:33 10HmbF-000000005vi-0000 Completed 1999-03-02 09:44:33 10HmbF-000000005vi-0000 event msg:complete -1999-03-02 09:44:33 End queue run: pid=p1242 +1999-03-02 09:44:33 10HmbG-000000005vi-0000 event tcp:connect +1999-03-02 09:44:33 10HmbG-000000005vi-0000 event smtp:connect +1999-03-02 09:44:33 10HmbG-000000005vi-0000 event smtp:ehlo +1999-03-02 09:44:33 10HmbG-000000005vi-0000 event tcp:close +1999-03-02 09:44:33 10HmbG-000000005vi-0000 ** rmt_reject@test.ex R=r2 T=smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:: 550 Administrative prohibition +1999-03-02 09:44:33 10HmbH-000000005vi-0000 <= <> R=10HmbG-000000005vi-0000 U=EXIMUSER P=local S=sss for e@dump.ex +1999-03-02 09:44:33 10HmbG-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbG-000000005vi-0000 event msg:complete +1999-03-02 09:44:33 End queue run: pid=p1244 +1999-03-02 09:44:33 deliver DSN +1999-03-02 09:44:33 Start queue run: pid=p1245 +1999-03-02 09:44:33 10HmbH-000000005vi-0000 => :blackhole: R=r_dump +1999-03-02 09:44:33 10HmbH-000000005vi-0000 Completed +1999-03-02 09:44:33 10HmbH-000000005vi-0000 event msg:complete +1999-03-02 09:44:33 End queue run: pid=p1245 ******** SERVER ******** -1999-03-02 09:44:33 exim x.yz daemon started: pid=p1243, no queue runs, listening for SMTP on port PORT_D -1999-03-02 09:44:33 exim x.yz daemon started: pid=p1244, no queue runs, listening for SMTP on port PORT_D +1999-03-02 09:44:33 exim x.yz daemon started: pid=p1246, no queue runs, listening for SMTP on port PORT_D +1999-03-02 09:44:33 exim x.yz daemon started: pid=p1247, no queue runs, listening for SMTP on port PORT_D 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= a@dump.ex H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_reject@test.ex 1999-03-02 09:44:33 H=localhost (myhost.test.ex) [127.0.0.1] F= rejected RCPT 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= b@dump.ex H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_accept@test.ex 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= b@dump.ex H=localhost (myhost.test.ex) [127.0.0.1] P=esmtp S=sss for rmt_accept@test.ex -1999-03-02 09:44:33 10HmbB-000000005vi-0000 <= c@dump.ex H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_defer@test.ex +1999-03-02 09:44:33 10HmbB-000000005vi-0000 <= b2@dump.ex H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_fakereject@test.ex +1999-03-02 09:44:33 10HmbC-000000005vi-0000 (= b2@dump.ex H=localhost (myhost.test.ex) [127.0.0.1] P=esmtp S=sss for rmt_fakereject@test.ex +1999-03-02 09:44:33 10HmbD-000000005vi-0000 <= c@dump.ex H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_defer@test.ex 1999-03-02 09:44:33 H=localhost (myhost.test.ex) [127.0.0.1] F= temporarily rejected RCPT -1999-03-02 09:44:33 10HmbC-000000005vi-0000 <= d@dump.ex H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_defer@test.ex +1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= d@dump.ex H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_defer@test.ex 1999-03-02 09:44:33 H=localhost (myhost.test.ex) [127.0.0.1] F= temporarily rejected RCPT -1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= e@dump.ex H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_reject@test.ex +1999-03-02 09:44:33 10HmbG-000000005vi-0000 <= e@dump.ex H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_reject@test.ex 1999-03-02 09:44:33 H=localhost (myhost.test.ex) [127.0.0.1] F= rejected RCPT diff --git a/test/mail/0612.rmt_fakereject b/test/mail/0612.rmt_fakereject new file mode 100644 index 000000000..1eb2c339f --- /dev/null +++ b/test/mail/0612.rmt_fakereject @@ -0,0 +1,16 @@ +From b2@dump.ex Tue Mar 02 09:44:33 1999 +Received: from localhost ([127.0.0.1] helo=myhost.test.ex) + by myhost.test.ex with esmtp (Exim x.yz) + (envelope-from ) + id 10HmbC-000000005vi-0000 + for rmt_fakereject@test.ex; + Tue, 2 Mar 1999 09:44:33 +0000 +Received: from [ip4.ip4.ip4.ip4] (helo=testclient) + by myhost.test.ex with esmtp (Exim x.yz) + (envelope-from ) + id 10HmbB-000000005vi-0000 + for rmt_fakereject@test.ex; + Tue, 2 Mar 1999 09:44:33 +0000 +Subject: test + + diff --git a/test/scripts/0000-Basic/0612 b/test/scripts/0000-Basic/0612 index 69a53c691..c5e3bfba1 100644 --- a/test/scripts/0000-Basic/0612 +++ b/test/scripts/0000-Basic/0612 @@ -74,6 +74,41 @@ exim -q exim -q **** # +# Client requests delivery notification; the MSA & MDA supports DSN +# but MDA fake-rejects msg. +# The MDA should not send a delivery notification for this case. +exim -z fakereject/success +**** +client HOSTIPV4 PORT_D +??? 220 +EHLO testclient +??? 250- +??? 250-SIZE +??? 250-DSN +??? 250 HELP +MAIL FROM: +??? 250 +RCPT TO: NOTIFY=success +??? 250 +DATA +??? 354 +Subject: test +. +??? 250 +QUIT +??? 221 +**** +# MSA (try to) send msg to MDA; should see a reject +exim -q +**** +# due to fake, should be a msg to deliver at MDA +# no DSN should be generated +exim -q +**** +# should be no notification to deliver from MDA +exim -q +**** +# # Client requests notification of deferral. First time of trying, we get # a defer but queue-time probably has not hit the 1st retry time yet, so no DSN # will be sent and the message remains queued. Then, claiming time has elapsed, diff --git a/test/stdout/0612 b/test/stdout/0612 index 74c73019b..92b95b4e5 100644 --- a/test/stdout/0612 +++ b/test/stdout/0612 @@ -82,6 +82,35 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected <<< 250-DSN ??? 250 HELP <<< 250 HELP +>>> MAIL FROM: +??? 250 +<<< 250 OK +>>> RCPT TO: NOTIFY=success +??? 250 +<<< 250 Accepted +>>> DATA +??? 354 +<<< 354 Enter message, ending with "." on a line by itself +>>> Subject: test +>>> . +??? 250 +<<< 250 OK id=10HmbB-000000005vi-0000 +>>> QUIT +??? 221 +<<< 221 myhost.test.ex closing connection +End of script +Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected +??? 220 +<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +>>> EHLO testclient +??? 250- +<<< 250-myhost.test.ex Hello testclient [ip4.ip4.ip4.ip4] +??? 250-SIZE +<<< 250-SIZE 52428800 +??? 250-DSN +<<< 250-DSN +??? 250 HELP +<<< 250 HELP >>> MAIL FROM: ??? 250 <<< 250 OK @@ -94,7 +123,7 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected >>> Subject: test >>> . ??? 250 -<<< 250 OK id=10HmbB-000000005vi-0000 +<<< 250 OK id=10HmbD-000000005vi-0000 >>> QUIT ??? 221 <<< 221 myhost.test.ex closing connection @@ -123,13 +152,13 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected >>> Subject: test >>> . ??? 250 -<<< 250 OK id=10HmbC-000000005vi-0000 +<<< 250 OK id=10HmbE-000000005vi-0000 >>> QUIT ??? 221 <<< 221 myhost.test.ex closing connection End of script -Message 10HmbB-000000005vi-0000 has been removed -Message 10HmbC-000000005vi-0000 has been removed +Message 10HmbD-000000005vi-0000 has been removed +Message 10HmbE-000000005vi-0000 has been removed Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected ??? 220 <<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 @@ -154,7 +183,7 @@ Connecting to ip4.ip4.ip4.ip4 port 1225 ... connected >>> Subject: test >>> . ??? 250 -<<< 250 OK id=10HmbE-000000005vi-0000 +<<< 250 OK id=10HmbG-000000005vi-0000 >>> QUIT ??? 221 <<< 221 myhost.test.ex closing connection