contentdb/app/tasks/emails.py

92 lines
2.8 KiB
Python
Raw Normal View History

2020-07-12 17:34:25 +02:00
# ContentDB
2018-05-17 16:18:20 +02:00
# Copyright (C) 2018 rubenwardy
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
2020-12-04 03:23:04 +01:00
from flask import render_template
2018-05-14 01:40:34 +02:00
from flask_mail import Message
from app import mail
2020-12-05 20:15:33 +01:00
from app.models import Notification, db
2018-05-14 01:40:34 +02:00
from app.tasks import celery
2020-12-05 20:15:33 +01:00
from app.utils import abs_url_for, abs_url
2018-05-14 01:40:34 +02:00
@celery.task()
def sendVerifyEmail(newEmail, token):
2020-12-05 01:27:26 +01:00
msg = Message("Confirm email address", recipients=[newEmail])
2019-09-15 19:43:22 +02:00
msg.body = """
This email has been sent to you because someone (hopefully you)
has entered your email address as a user's email.
If it wasn't you, then just delete this email.
2020-12-05 01:27:26 +01:00
If this was you, then please click this link to confirm the address:
2019-09-15 19:43:22 +02:00
{}
""".format(abs_url_for('users.verify_email', token=token))
2019-09-15 19:43:22 +02:00
2018-07-06 23:52:19 +02:00
msg.html = render_template("emails/verify.html", token=token)
mail.send(msg)
2020-12-05 20:52:02 +01:00
2018-07-06 23:52:19 +02:00
@celery.task()
2020-12-05 20:52:02 +01:00
def send_email_with_reason(to, subject, text, html, reason):
2018-07-06 23:52:19 +02:00
from flask_mail import Message
msg = Message(subject, recipients=to)
2019-01-04 20:17:04 +01:00
msg.body = text
2019-01-04 20:17:04 +01:00
html = html or text
2020-12-05 20:52:02 +01:00
msg.html = render_template("emails/base.html", subject=subject, content=html, reason=reason)
2018-07-06 23:52:19 +02:00
mail.send(msg)
2020-12-05 20:15:33 +01:00
2020-12-05 20:52:02 +01:00
@celery.task()
def send_user_email(to, subject, text, html=None):
return send_email_with_reason(to, subject, text, html,
"You are receiving this email because you are a registered user of ContentDB.")
@celery.task()
def send_anon_email(to, subject, text, html=None):
return send_email_with_reason(to, subject, text, html,
"You are receiving this email because someone (hopefully you) entered your email address as a user's email.")
2020-12-05 20:15:33 +01:00
def sendNotificationEmail(notification):
msg = Message(notification.title, recipients=[notification.user.email])
msg.body = """
New notification: {}
View: {}
Manage email settings: {}
""".format(notification.title, abs_url(notification.url),
abs_url_for("users.email_notifications", username=notification.user.username))
msg.html = render_template("emails/notification.html", notification=notification)
mail.send(msg)
@celery.task()
def sendPendingNotifications():
for notification in Notification.query.filter_by(emailed=False).all():
if notification.can_send_email():
sendNotificationEmail(notification)
notification.emailed = True
db.session.commit()