Wietse Venema:
> > 3) sender did not request "DELAY" notification
> >     -> relay should not send a "relayed" (after delay)
> 
> I looked at the code, and while the existing "delayed" notifications
> can be suppressed with NOTIFY=FAILURE (i.e. without "DELAY"), it
> looks like the new "relayed" (after delay) notifications ignore
> that.  So that still needs to be fixed.

This is a minimal patch relative to the confirm_delay_cleared patch.
This suppresses the notification when the user requests NOTIFY=FAILURE,
or any NOTIFY features that do not include DELAY.

        Wietse

--- /var/tmp/postfix-2.12-20140921/src/global/sent.c    2014-09-07 
09:49:19.000000000 -0400
+++ ./sent.c    2014-09-22 17:12:45.000000000 -0400
@@ -140,10 +140,19 @@
      * Normal mail delivery. May also send a delivery record to the user.
      */
     else {
+
+       /*
+        * Readability macros: record all deliveries, or delayed deliveries.
+        */
+#define REC_ALL_SENT(flags) (flags & DEL_REQ_FLAG_RECORD)
+#define REC_DLY_SENT(flags, rcpt) \
+       ((flags & DEL_REQ_FLAG_REC_SENT) \
+       && (rcpt->dsn_notify == 0 || (rcpt->dsn_notify & DSN_NOTIFY_DELAY)))
+
        if (my_dsn.action == 0 || my_dsn.action[0] == 0)
            my_dsn.action = "delivered";
 
-       if (((flags & (DEL_REQ_FLAG_RECORD | DEL_REQ_FLAG_REC_SENT)) == 0
+       if (((REC_ALL_SENT(flags) == 0 && REC_DLY_SENT(flags, recipient) == 0)
          || trace_append(flags, id, stats, recipient, relay, &my_dsn) == 0)
            && ((recipient->dsn_notify & DSN_NOTIFY_SUCCESS) == 0
        || trace_append(flags, id, stats, recipient, relay, &my_dsn) == 0)) {

Reply via email to