diff --git a/app/models.py b/app/models.py index f2fc5daa..17bd6dbd 100644 --- a/app/models.py +++ b/app/models.py @@ -1020,6 +1020,15 @@ class Alias(db.Model, ModelMixin): else: return self.user.email + def unsubscribe_link(self) -> (str, bool): + """return the unsubscribe link along with whether this is via email (mailto:) or Http POST + The mailto: method is preferred + """ + if UNSUBSCRIBER: + return f"mailto:{UNSUBSCRIBER}?subject={self.id}=", True + else: + return f"{URL}/dashboard/unsubscribe/{self.id}", False + def __repr__(self): return f"" diff --git a/email_handler.py b/email_handler.py index 3e1a9dc2..3e7555b2 100644 --- a/email_handler.py +++ b/email_handler.py @@ -654,12 +654,9 @@ def forward_email_to_mailbox( add_or_replace_header(msg, "To", to_header.strip()) # add List-Unsubscribe header - if UNSUBSCRIBER: - unsubscribe_link = f"mailto:{UNSUBSCRIBER}?subject={alias.id}=" - add_or_replace_header(msg, "List-Unsubscribe", f"<{unsubscribe_link}>") - else: - unsubscribe_link = f"{URL}/dashboard/unsubscribe/{alias.id}" - add_or_replace_header(msg, "List-Unsubscribe", f"<{unsubscribe_link}>") + unsubscribe_link, via_email = alias.unsubscribe_link() + add_or_replace_header(msg, "List-Unsubscribe", f"<{unsubscribe_link}>") + if not via_email: add_or_replace_header( msg, "List-Unsubscribe-Post", "List-Unsubscribe=One-Click" )