when the 'X-Spam' flag is set in the mail header, set the state to 'pending_suspected_spam' and do not send auto-reply
All checks were successful
/ test (push) Successful in 2m37s
All checks were successful
/ test (push) Successful in 2m37s
This commit is contained in:
parent
9395226c5f
commit
554bc70413
3 changed files with 55 additions and 6 deletions
|
@ -103,7 +103,7 @@ async def send_smtp(message):
|
|||
await aiosmtplib.send(message, hostname="127.0.0.1", port=25, use_tls=False, start_tls=False)
|
||||
|
||||
|
||||
def find_active_issue_thread(in_reply_to, address, subject, event):
|
||||
def find_active_issue_thread(in_reply_to, address, subject, event, spam=False):
|
||||
from re import match
|
||||
uuid_match = match(r'^ticket\+([a-f0-9-]{36})@', address)
|
||||
if uuid_match:
|
||||
|
@ -114,7 +114,8 @@ def find_active_issue_thread(in_reply_to, address, subject, event):
|
|||
if reply_to.exists():
|
||||
return reply_to.first().issue_thread, False
|
||||
else:
|
||||
issue = IssueThread.objects.create(name=subject, event=event)
|
||||
issue = IssueThread.objects.create(name=subject, event=event,
|
||||
initial_state='pending_suspected_spam' if spam else 'pending_new')
|
||||
return issue, True
|
||||
|
||||
|
||||
|
@ -213,6 +214,8 @@ def receive_email(envelope, log=None):
|
|||
header_to = parsed.get('To')
|
||||
header_in_reply_to = ascii_strip(parsed.get('In-Reply-To'))
|
||||
header_message_id = ascii_strip(parsed.get('Message-ID'))
|
||||
maybe_spam = parsed.get('X-Spam')
|
||||
suspected_spam = (maybe_spam and maybe_spam.lower() == 'yes')
|
||||
|
||||
if match(r'^([a-zA-Z ]*<)?MAILER-DAEMON@', header_from) and envelope.mail_from.strip("<>") == "":
|
||||
log.warning("Ignoring mailer daemon")
|
||||
|
@ -232,7 +235,8 @@ def receive_email(envelope, log=None):
|
|||
sender = decode_inline_encodings(sender)
|
||||
target_event = find_target_event(recipient)
|
||||
|
||||
active_issue_thread, new = find_active_issue_thread(header_in_reply_to, recipient, subject, target_event)
|
||||
active_issue_thread, new = find_active_issue_thread(
|
||||
header_in_reply_to, recipient, subject, target_event, suspected_spam)
|
||||
|
||||
from hashlib import sha256
|
||||
random_filename = 'mail-' + sha256(envelope.content).hexdigest()
|
||||
|
@ -250,7 +254,7 @@ def receive_email(envelope, log=None):
|
|||
if new:
|
||||
# auto reply if new issue
|
||||
references = collect_references(active_issue_thread)
|
||||
if not sender.startswith('noreply'):
|
||||
if not sender.startswith('noreply') and not sender.startswith('no-reply') and not suspected_spam:
|
||||
subject = f"Re: {subject} [#{active_issue_thread.short_uuid()}]"
|
||||
body = '''Your request (#{}) has been received and will be reviewed by our lost&found angels.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue