[exim-cvs] Avoid sending DSN when message was accepted under…

Top Page
Delete this message
Reply to this message
Author: Exim Git Commits Mailing List
Date:  
To: exim-cvs
Subject: [exim-cvs] Avoid sending DSN when message was accepted under fakereject or fakedefer. Bug 3016
Gitweb: https://git.exim.org/exim.git/commitdiff/92914be2140997c19f610d7f5f17fa0d9c347b9c
Commit:     92914be2140997c19f610d7f5f17fa0d9c347b9c
Parent:     578c0ad36e07b49f0403c12402672d8768d19cb5
Author:     Jeremy Harris <jgh146exb@???>
AuthorDate: Thu Aug 31 15:16:09 2023 +0100
Committer:  Jeremy Harris <jgh146exb@???>
CommitDate: Thu Aug 31 16:50:03 2023 +0100


    Avoid sending DSN when message was accepted under fakereject or fakedefer.  Bug 3016
---
 doc/doc-txt/ChangeLog         |   6 ++-
 src/src/acl.c                 |   2 +-
 src/src/deliver.c             |   6 +--
 src/src/receive.c             |  25 +++++++---
 test/confs/0612               |   8 ++--
 test/log/0612                 | 106 +++++++++++++++++++++++++-----------------
 test/mail/0612.rmt_fakereject |  16 +++++++
 test/scripts/0000-Basic/0612  |  35 ++++++++++++++
 test/stdout/0612              |  39 ++++++++++++++--
 9 files changed, 182 insertions(+), 61 deletions(-)


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@??? R=r2 T=smtp defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<rmt_defer@???>: 451 Temporary local problem - please try later
+1999-03-02 09:44:33 10HmbB-000000005vi-0000 ** rmt_fakereject@??? 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@???: 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@??? 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@??? R=r2 T=smtp defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<rmt_defer@???>: 451 Temporary local problem - please try later
+1999-03-02 09:44:33 10HmbC-000000005vi-0000 => rmt_fakereject <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@??? 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@???
-1999-03-02 09:44:33 10HmbC-000000005vi-0000 == rmt_defer@??? 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: <c@???> 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@??? R=r2 T=smtp defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<rmt_defer@???>: 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@??? 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@??? R=r2 T=smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<rmt_reject@???>: 550 Administrative prohibition
-1999-03-02 09:44:33 10HmbF-000000005vi-0000 <= <> R=10HmbE-000000005vi-0000 U=EXIMUSER P=local S=sss for e@???
-1999-03-02 09:44:33 10HmbE-000000005vi-0000 Completed
+1999-03-02 09:44:33 10HmbE-000000005vi-0000 == rmt_defer@??? R=r2 T=smtp defer (-44) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<rmt_defer@???>: 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@??? 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@???
+1999-03-02 09:44:33 10HmbE-000000005vi-0000 == rmt_defer@??? 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: <e@???> 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: <c@???> 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@??? R=r2 T=smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<rmt_reject@???>: 550 Administrative prohibition
+1999-03-02 09:44:33 10HmbH-000000005vi-0000 <= <> R=10HmbG-000000005vi-0000 U=EXIMUSER P=local S=sss for e@???
+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: <e@???> 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@??? H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_reject@???
 1999-03-02 09:44:33 H=localhost (myhost.test.ex) [127.0.0.1] F=<a@???> rejected RCPT <rmt_reject@???>
 1999-03-02 09:44:33 10HmaY-000000005vi-0000 <= b@??? H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_accept@???
 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= b@??? H=localhost (myhost.test.ex) [127.0.0.1] P=esmtp S=sss for rmt_accept@???
-1999-03-02 09:44:33 10HmbB-000000005vi-0000 <= c@??? H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_defer@???
+1999-03-02 09:44:33 10HmbB-000000005vi-0000 <= b2@??? H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_fakereject@???
+1999-03-02 09:44:33 10HmbC-000000005vi-0000 (= b2@??? H=localhost (myhost.test.ex) [127.0.0.1] P=esmtp S=sss for rmt_fakereject@???
+1999-03-02 09:44:33 10HmbD-000000005vi-0000 <= c@??? H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_defer@???
 1999-03-02 09:44:33 H=localhost (myhost.test.ex) [127.0.0.1] F=<c@???> temporarily rejected RCPT <rmt_defer@???>
-1999-03-02 09:44:33 10HmbC-000000005vi-0000 <= d@??? H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_defer@???
+1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= d@??? H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_defer@???
 1999-03-02 09:44:33 H=localhost (myhost.test.ex) [127.0.0.1] F=<d@???> temporarily rejected RCPT <rmt_defer@???>
-1999-03-02 09:44:33 10HmbE-000000005vi-0000 <= e@??? H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_reject@???
+1999-03-02 09:44:33 10HmbG-000000005vi-0000 <= e@??? H=(testclient) [ip4.ip4.ip4.ip4] P=esmtp S=sss for rmt_reject@???
 1999-03-02 09:44:33 H=localhost (myhost.test.ex) [127.0.0.1] F=<e@???> rejected RCPT <rmt_reject@???>
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@??? 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 <b2@???>)
+    id 10HmbC-000000005vi-0000
+    for rmt_fakereject@???;
+    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 <b2@???>)
+    id 10HmbB-000000005vi-0000
+    for rmt_fakereject@???;
+    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:<b2@???>
+??? 250
+RCPT TO:<rmt_fakereject@???> 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:<b2@???>
+??? 250
+<<< 250 OK
+>>> RCPT TO:<rmt_fakereject@???> 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:<c@???>

??? 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

--
## subscription configuration (requires account):
## https://lists.exim.org/mailman3/postorius/lists/exim-cvs.lists.exim.org/
## unsubscribe (doesn't require an account):
## exim-cvs-unsubscribe@???
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/