From 28fa59a769cf4e67fc6ae34418635cb1e4d0e37c Mon Sep 17 00:00:00 2001 From: rimu <3310831+rimu@users.noreply.github.com> Date: Sat, 24 Feb 2024 14:15:38 +1300 Subject: [PATCH] unsubscribe to email newsletter --- app/email.py | 6 ++++-- app/main/routes.py | 5 ++++- app/templates/email/welcome.html | 2 +- app/templates/email/welcome.txt | 3 ++- app/templates/user/newsletter_unsubscribed.html | 17 +++++++++++++++++ app/user/routes.py | 9 +++++++++ 6 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 app/templates/user/newsletter_unsubscribed.html diff --git a/app/email.py b/app/email.py index e71fd52a..70dcc9ed 100644 --- a/app/email.py +++ b/app/email.py @@ -41,10 +41,13 @@ def send_welcome_email(user, application_required): def send_async_email(subject, sender, recipients, text_body, html_body, reply_to): if 'ngrok.app' in sender: # for local development sender = 'PieFed ' + return_path = 'bounces@piefed.social' + else: + return_path = 'bounces@' + current_app.config['SERVER_NAME'] + # NB email will not be sent if you have not verified your domain name as an 'Identity' inside AWS SES if type(recipients) == str: recipients = [recipients] with current_app.app_context(): - return_path = 'bounces@' + current_app.config['SERVER_NAME'] try: # Create a new SES resource and specify a region. amazon_client = boto3.client('ses', region_name=AWS_REGION) @@ -87,7 +90,6 @@ def send_async_email(subject, sender, recipients, text_body, html_body, reply_to ReturnPath=return_path, ReplyToAddresses=[reply_to]) # message.attach_alternative("...AMPHTML content...", "text/x-amp-html") - except ClientError as e: current_app.logger.error('Failed to send email. ' + e.response['Error']['Message']) return e.response['Error']['Message'] diff --git a/app/main/routes.py b/app/main/routes.py index 90987f2c..ff474e70 100644 --- a/app/main/routes.py +++ b/app/main/routes.py @@ -10,7 +10,7 @@ from app import db, cache from app.activitypub.util import default_context, make_image_sizes_async, refresh_user_profile, find_actor_or_create from app.constants import SUBSCRIPTION_PENDING, SUBSCRIPTION_MEMBER, POST_TYPE_IMAGE, POST_TYPE_LINK, \ SUBSCRIPTION_OWNER, SUBSCRIPTION_MODERATOR -from app.email import send_email +from app.email import send_email, send_welcome_email from app.inoculation import inoculation from app.main import bp from flask import g, session, flash, request, current_app, url_for, redirect, make_response, jsonify @@ -259,6 +259,9 @@ def list_files(directory): @bp.route('/test') def test(): + u = User.query.get(1) + send_welcome_email(u, False) + return '' users_to_notify = User.query.join(Notification, User.id == Notification.user_id).filter( User.ap_id == None, diff --git a/app/templates/email/welcome.html b/app/templates/email/welcome.html index 43382828..4d4c025a 100644 --- a/app/templates/email/welcome.html +++ b/app/templates/email/welcome.html @@ -14,4 +14,4 @@

Rimu Atkinson
Founder

 

-

Unsubscribe from PieFed newsletter

+

Unsubscribe from PieFed newsletter

diff --git a/app/templates/email/welcome.txt b/app/templates/email/welcome.txt index 08b3e82d..559d49cf 100644 --- a/app/templates/email/welcome.txt +++ b/app/templates/email/welcome.txt @@ -15,4 +15,5 @@ PieFed is entirely self-funded so donations are much appreciated https://liberap Warm regards, Rimu Atkinson -Founder \ No newline at end of file +Founder + diff --git a/app/templates/user/newsletter_unsubscribed.html b/app/templates/user/newsletter_unsubscribed.html new file mode 100644 index 00000000..4f8dc26a --- /dev/null +++ b/app/templates/user/newsletter_unsubscribed.html @@ -0,0 +1,17 @@ +{% extends 'base.html' %} +{% from 'bootstrap/form.html' import render_form %} + +{% block app_content %} +
+ +
+ +{% endblock %} diff --git a/app/user/routes.py b/app/user/routes.py index 6d378c90..94c0c4e0 100644 --- a/app/user/routes.py +++ b/app/user/routes.py @@ -692,3 +692,12 @@ def user_settings_filters_delete(filter_id): cache.delete_memoized(user_filters_replies, current_user.id) flash(_('Filter deleted.')) return redirect(url_for('user.user_settings_filters')) + + +@bp.route('/user/newsletter///unsubscribe', methods=['GET', 'POST']) +def user_newsletter_unsubscribe(user_id, token): + user = User.query.filter(User.id == user_id, User.verification_token == token).first() + if user: + user.newsletter = False + db.session.commit() + return render_template('user/newsletter_unsubscribed.html')