Skip to content

Commit

Permalink
Do not replace unsubs that go to UNSUBSCRIBER (#2051)
Browse files Browse the repository at this point in the history
  • Loading branch information
acasajus committed Mar 6, 2024
1 parent a7d4bd1 commit 9719a36
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
6 changes: 6 additions & 0 deletions app/handler/unsubscribe_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from email.message import Message

from app.email import headers
from app import config
from app.email_utils import add_or_replace_header, delete_header
from app.handler.unsubscribe_encoder import (
UnsubscribeEncoder,
Expand Down Expand Up @@ -47,6 +48,11 @@ def _generate_header_with_original_behaviour(
method = raw_method[start + 1 : end]
url_data = urllib.parse.urlparse(method)
if url_data.scheme == "mailto":
if url_data.path == config.UNSUBSCRIBER:
LOG.debug(
f"Skipping replacing unsubscribe since the original email already points to {config.UNSUBSCRIBER}"
)
return message
query_data = urllib.parse.parse_qs(url_data.query)
mailto_unsubs = (url_data.path, query_data.get("subject", [""])[0])
LOG.debug(f"Unsub is mailto to {mailto_unsubs}")
Expand Down
23 changes: 21 additions & 2 deletions tests/handler/test_unsubscribe_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@
)
from app.handler.unsubscribe_generator import UnsubscribeGenerator
from app.models import Alias, Contact, UnsubscribeBehaviourEnum
from tests.utils import create_new_user

from tests.utils import create_new_user, random_email

TEST_UNSUB_EMAIL = "unsub@sl.com"

Expand Down Expand Up @@ -204,3 +203,23 @@ def test_unsub_preserve_original(
assert message[headers.LIST_UNSUBSCRIBE_POST] is None
else:
assert "List-Unsubscribe=One-Click" == message[headers.LIST_UNSUBSCRIBE_POST]


def test_unsub_preserves_sl_unsubscriber():
user = create_new_user()
user.unsub_behaviour = UnsubscribeBehaviourEnum.PreserveOriginal
alias = Alias.create_new_random(user)
Session.commit()
config.UNSUBSCRIBER = random_email()
contact = Contact.create(
user_id=user.id,
alias_id=alias.id,
website_email="contact@example.com",
reply_email="rep@sl.local",
commit=True,
)
message = Message()
original_header = f"<mailto:{config.UNSUBSCRIBER}?subject=dummysubject>"
message[headers.LIST_UNSUBSCRIBE] = original_header
message = UnsubscribeGenerator().add_header_to_message(alias, contact, message)
assert original_header == message[headers.LIST_UNSUBSCRIBE]

0 comments on commit 9719a36

Please sign in to comment.