aboutsummaryrefslogtreecommitdiffstats
path: root/Mailman/Handlers/Moderate.py
diff options
context:
space:
mode:
Diffstat (limited to 'Mailman/Handlers/Moderate.py')
-rw-r--r--Mailman/Handlers/Moderate.py41
1 files changed, 24 insertions, 17 deletions
diff --git a/Mailman/Handlers/Moderate.py b/Mailman/Handlers/Moderate.py
index 884030de..d901eb59 100644
--- a/Mailman/Handlers/Moderate.py
+++ b/Mailman/Handlers/Moderate.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2013 by the Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 by the Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -21,6 +21,7 @@
import re
from email.MIMEMessage import MIMEMessage
from email.MIMEText import MIMEText
+from email.Utils import parseaddr
from Mailman import mm_cfg
from Mailman import Utils
@@ -49,32 +50,38 @@ class ModeratedMemberPost(Hold.ModeratedPost):
def process(mlist, msg, msgdata):
if msgdata.get('approved'):
return
- # First of all, is the poster a member or not?
- for sender in msg.get_senders():
- if mlist.isMember(sender):
- break
- else:
- sender = None
- if sender:
- if Utils.IsDmarcProhibited(sender):
+ # Before anything else, check DMARC.
+ msgdata['from_is_list'] = 0
+ dn, addr = parseaddr(msg.get('from'))
+ if addr:
+ if Utils.IsDMARCProhibited(addr):
# Note that for dmarc_moderation_action, 0 = Accept,
- # 1 = Hold, 2 = Reject, 3 = Discard
+ # 1 = Wrap, 2 = Munge, 3 = Reject, 4 = Discard
if mlist.dmarc_moderation_action == 1:
- msgdata['sender'] = sender
- Hold.hold_for_approval(mlist, msg, msgdata,
- ModeratedMemberPost)
+ msgdata['from_is_list'] = 2
elif mlist.dmarc_moderation_action == 2:
+ msgdata['from_is_list'] = 1
+ elif mlist.dmarc_moderation_action == 3:
# Reject
text = mlist.dmarc_moderation_notice
if text:
text = Utils.wrap(text)
else:
- # Use the default RejectMessage notice string
- text = None
+ text = Utils.wrap(_(
+"""You are not allowed to post to this mailing list From: a domain which
+publishes a DMARC policy of reject or quarantine, and your message has been
+automatically rejected. If you think that your messages are being rejected in
+error, contact the mailing list owner at %(listowner)s."""))
raise Errors.RejectMessage, text
- elif mlist.dmarc_moderation_action == 3:
+ elif mlist.dmarc_moderation_action == 4:
raise Errors.DiscardMessage
-
+ # Then, is the poster a member or not?
+ for sender in msg.get_senders():
+ if mlist.isMember(sender):
+ break
+ else:
+ sender = None
+ if sender:
# If the member's moderation flag is on, then perform the moderation
# action.
if mlist.getMemberOption(sender, mm_cfg.Moderate):