Set headers for no auto response on most emails
authorMagnus Hagander <magnus@hagander.net>
Mon, 20 Apr 2020 08:47:56 +0000 (10:47 +0200)
committerMagnus Hagander <magnus@hagander.net>
Mon, 20 Apr 2020 08:49:33 +0000 (10:49 +0200)
Most of our auto-generated emails should not ask for auto replies (like
out of office messages or in particular, "held for moderation" notices
from our own list server), so set this header by default, and also the
header indicating if it's an auto submitted/auto replied message.

Specifically allow auto replies on moderation notices, since that's a
case where it might be really interesting for the moderator to see for
example an out of office message. At least for now that seems like a
good idea.

pgweb/mailqueue/util.py
pgweb/util/admin.py
pgweb/util/misc.py

index cd5e3eec3d1d304920a944b9bd6eb09a61777b5d..e2f3f7c6c6ee863c1690bcda0143fef4df2fd657 100644 (file)
@@ -15,7 +15,7 @@ def _encoded_email_header(name, email):
     return email
 
 
-def send_simple_mail(sender, receiver, subject, msgtxt, attachments=None, usergenerated=False, cc=None, replyto=None, sendername=None, receivername=None, messageid=None):
+def send_simple_mail(sender, receiver, subject, msgtxt, attachments=None, usergenerated=False, cc=None, replyto=None, sendername=None, receivername=None, messageid=None, suppress_auto_replies=True, is_auto_reply=False):
     # attachment format, each is a tuple of (name, mimetype,contents)
     # content should be *binary* and not base64 encoded, since we need to
     # use the base64 routines from the email library to get a properly
@@ -33,6 +33,16 @@ def send_simple_mail(sender, receiver, subject, msgtxt, attachments=None, userge
         msg['Message-ID'] = messageid
     else:
         msg['Message-ID'] = make_msgid()
+    if suppress_auto_replies:
+        # Do our best to set some headers to indicate that auto-replies like out of office
+        # messages should not be sent to this email.
+        msg['X-Auto-Response-Suppress'] = 'All'
+
+    # Is this email auto-generated or auto-replied?
+    if is_auto_reply:
+        msg['Auto-Submitted'] = 'auto-replied'
+    elif not usergenerated:
+        msg['Auto-Submitted'] = 'auto-generated'
 
     msg.attach(MIMEText(msgtxt, _charset='utf-8'))
 
index f86a692df33321330fe22a7639cb112e877675d4..9e02eddb5a36d60622ca8f2af1d97b471fc20288 100644 (file)
@@ -78,7 +78,8 @@ class PgwebAdmin(admin.ModelAdmin):
                 send_simple_mail(settings.NOTIFICATION_FROM,
                                  obj.org.email,
                                  "postgresql.org moderation notification",
-                                 msgstr)
+                                 msgstr,
+                                 suppress_auto_replies=False)
 
                 # Also generate a mail to the moderators
                 send_simple_mail(
index 5d45b7a073539fab2fcb6625cc2f86b6e59214cb..2698031e247e92129ab1162863c59d88bf8cda9e 100644 (file)
@@ -9,16 +9,20 @@ from pgweb.util.helpers import template_to_string
 import re
 
 
-def send_template_mail(sender, receiver, subject, templatename, templateattr={}, usergenerated=False, cc=None, replyto=None, receivername=None, sendername=None, messageid=None):
+def send_template_mail(sender, receiver, subject, templatename, templateattr={}, usergenerated=False, cc=None, replyto=None, receivername=None, sendername=None, messageid=None, suppress_auto_replies=True, is_auto_reply=False):
     d = {
         'link_root': settings.SITE_ROOT,
     }
     d.update(templateattr)
-    send_simple_mail(sender, receiver, subject,
-                     template_to_string(templatename, d),
-                     usergenerated=usergenerated, cc=cc, replyto=replyto,
-                     receivername=receivername, sendername=sendername,
-                     messageid=messageid)
+    send_simple_mail(
+        sender, receiver, subject,
+        template_to_string(templatename, d),
+        usergenerated=usergenerated, cc=cc, replyto=replyto,
+        receivername=receivername, sendername=sendername,
+        messageid=messageid,
+        suppress_auto_replies=suppress_auto_replies,
+        is_auto_reply=is_auto_reply,
+    )
 
 
 def get_client_ip(request):