unsubscribe from mailchimp
authorJan Szejko <janek37@gmail.com>
Tue, 27 Nov 2018 12:59:32 +0000 (13:59 +0100)
committerJan Szejko <janek37@gmail.com>
Tue, 27 Nov 2018 12:59:32 +0000 (13:59 +0100)
src/contact/mailing.py
src/newsletter/forms.py

index 2034766..2d578e6 100644 (file)
@@ -48,3 +48,26 @@ def subscribe(email, mailing_lists=None):
             'interests': interests,
         }
     )
+
+
+def unsubscribe(email, mailing_lists=None):
+    client = MailChimp(mc_api=settings.MAILCHIMP_API_KEY, timeout=10.0)
+    try:
+        member = client.lists.members.get(settings.MAILCHIMP_LIST_ID, subscriber_hash(email))
+    except MailChimpError:
+        return
+    else:
+        if member['status'] != 'subscribed':
+            return
+    mailing_lists = mailing_lists or settings.MAILCHIMP_GROUP_IDS
+    interests = {
+        settings.MAILCHIMP_GROUP_IDS[mailing_list]: False
+        for mailing_list in mailing_lists
+        if mailing_list in settings.MAILCHIMP_GROUP_IDS
+    }
+    client.lists.members.update(
+        settings.MAILCHIMP_LIST_ID, subscriber_hash(email),
+        data={
+            'interests': interests,
+        }
+    )
index 8cb19ee..d473cf3 100644 (file)
@@ -82,6 +82,7 @@ class UnsubscribeForm(Form):
         subscription = self.cleaned_data['subscription']
         subscription.active = False
         subscription.save()
+        mailing.unsubscribe(subscription.email)
 
         context = {'subscription': subscription}
         # refactor to send_noreply_mail