From: Frédéric Péters Date: Thu, 19 Jan 2023 13:44:59 +0000 (+0100) Subject: add support for subscribing to mailman3 X-Git-Tag: v2023^0 X-Git-Url: https://git.0d.be/?p=django-panik-newsletter.git;a=commitdiff_plain;h=1155d7d2aa8cd78f79cbba86cacb0e9bbfb543b9 add support for subscribing to mailman3 --- diff --git a/debian/control b/debian/control index 414e8e2..e8cd2d3 100644 --- a/debian/control +++ b/debian/control @@ -5,6 +5,7 @@ Maintainer: Frederic Peters Build-Depends: debhelper-compat (= 12), python3-all, python3-django, + python3-mechanize, python3-setuptools, dh-python Standards-Version: 3.9.1 diff --git a/newsletter/models.py b/newsletter/models.py index a689138..d24d36a 100644 --- a/newsletter/models.py +++ b/newsletter/models.py @@ -7,6 +7,7 @@ from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import html2text +import mechanize import requests from ckeditor.fields import RichTextField from django.conf import settings @@ -58,6 +59,8 @@ class Subscriber(models.Model): newsletter_service = getattr(settings, 'NEWSLETTER_SERVICE', 'mailman') if newsletter_service == 'mailman': return self.subscribe_in_mailman() + elif newsletter_service == 'mailman3': + return self.subscribe_in_mailman3() elif newsletter_service == 'mailchimp': return self.subscribe_in_mailchimp() @@ -76,6 +79,27 @@ class Subscriber(models.Model): self.is_registered = True self.save() + def subscribe_in_mailman3(self): + # emulate browser to login and subscribe user + br = mechanize.Browser() + br.open(settings.NEWSLETTER_MAILMAN3_LIST_URL) + br.follow_link(url_regex=re.compile('/accounts/login')) + br.select_form(action=lambda x: '/login/' in x) + br['login'] = settings.NEWSLETTER_MAILMAN3_LOGIN + br['password'] = settings.NEWSLETTER_MAILMAN3_PASSWORD + response = br.submit() + assert br.find_link(url_regex=re.compile('/accounts/logout')) + br.open(settings.NEWSLETTER_MAILMAN3_LIST_URL + 'mass_subscribe/') + br.select_form(action=lambda x: '/mass_subscribe/' in x) + br['emails'] = self.email + br['pre_confirmed'] = ['on'] + br['pre_approved'] = ['on'] + br['pre_verified'] = ['on'] + br['send_welcome_message'] = ['False'] + response = br.submit() + self.is_registered = True + self.save() + def subscribe_in_mailchimp(self): dc = settings.MAILCHIMP_DC apikey = settings.MAILCHIMP_APIKEY