From b75cb16df742a9f01342c86d35152cde728f2f74 Mon Sep 17 00:00:00 2001 From: Cédric Bonhomme Date: Thu, 20 Nov 2014 07:08:48 +0100 Subject: Notifications functions and functions to send emails are now in separated files. --- pyaggr3g470r/crawler.py | 4 +-- pyaggr3g470r/emails.py | 56 ---------------------------------- pyaggr3g470r/notifications.py | 71 +++++++++++++++++++++++++++++++++++++++++++ pyaggr3g470r/views.py | 10 +++--- 4 files changed, 78 insertions(+), 63 deletions(-) create mode 100644 pyaggr3g470r/notifications.py (limited to 'pyaggr3g470r') diff --git a/pyaggr3g470r/crawler.py b/pyaggr3g470r/crawler.py index 5e7a111c..6472e35d 100644 --- a/pyaggr3g470r/crawler.py +++ b/pyaggr3g470r/crawler.py @@ -45,7 +45,7 @@ from gevent.pool import Pool import utils import conf -import emails +import notifications from pyaggr3g470r import db from pyaggr3g470r.models import User, Article if not conf.ON_HEROKU: @@ -282,5 +282,5 @@ class FeedGetter(object): logger.info("Starting mail notification.") for element in new_articles: if element.source.email_notification: - emails.new_article_notification(self.user, element.source, element) + notifications.new_article_notification(self.user, element.source, element) return True diff --git a/pyaggr3g470r/emails.py b/pyaggr3g470r/emails.py index 9ebd8414..088cb2af 100644 --- a/pyaggr3g470r/emails.py +++ b/pyaggr3g470r/emails.py @@ -26,7 +26,6 @@ from email.mime.text import MIMEText from postmark import PMMail -from pyaggr3g470r import utils import conf from pyaggr3g470r.decorators import async @@ -64,10 +63,6 @@ def send_smtp(to="", bcc="", subject="", plaintext="", html=""): """ Send an email. """ - # Create the body of the message (a plain-text and an HTML version). - if plaintext == "": - plaintext = utils.clear_string(html) - # Create message container - the correct MIME type is multipart/alternative. msg = MIMEMultipart('alternative') msg['Subject'] = subject @@ -113,54 +108,3 @@ def send_postmark(to="", bcc="", subject="", plaintext=""): except Exception as e: logger.exception("send_postmark raised:") raise e - - -# -# Notifications -# -def information_message(subject, plaintext): - """ - Send an information message to the users of the platform. - """ - from pyaggr3g470r.models import User - users = User.query.all() - # Only send email for activated accounts. - emails = [user.email for user in users if user.activation_key == ""] - # Postmark has a limit of twenty recipients per message in total. - for i in xrange(0, len(emails), 19): - send(to=conf.NOTIFICATION_EMAIL, bcc=", ".join(emails[i:i+19]), subject=subject, plaintext=plaintext) - -def new_account_notification(user): - """ - Account creation notification. - """ - plaintext = """Hello,\n\nYour account has been created. Click on the following link to confirm it:\n%s\n\nSee you,""" % \ - (conf.PLATFORM_URL + 'confirm_account/' + user.activation_key) - send(to=conf.NOTIFICATION_EMAIL, bcc=user.email, subject="[pyAggr3g470r] Account creation", plaintext=plaintext) - -def new_account_activation(user): - """ - Account activation notification. - """ - plaintext = """Hello,\n\nYour account has been activated. You can now connect to the platform:\n%s\n\nSee you,""" % \ - (conf.PLATFORM_URL) - send(to=conf.NOTIFICATION_EMAIL, bcc=user.email, subject="[pyAggr3g470r] Account activated", plaintext=plaintext) - -def new_password_notification(user, password): - """ - New password notification. - """ - plaintext = """Hello,\n\nA new password has been generated at your request:\n\n%s""" % \ - (password, ) - plaintext += "\n\nIt is advised to replace it as soon as connected to pyAggr3g470r.\n\nSee you," - send(to=conf.NOTIFICATION_EMAIL, bcc=user.email, subject="[pyAggr3g470r] New password", plaintext=plaintext) - -def new_article_notification(user, feed, article): - """ - New article notification. - """ - subject = '[pyAggr3g470r] ' + feed.title + ": " + article.title - html = """\n\n%s\n\n\n%s\n\n""" % \ - (feed.title + ": " + article.title, article.content) - plaintext = utils.clear_string(html) - send(to=conf.NOTIFICATION_EMAIL, bcc=user.email, subject=subject, plaintext=plaintext, html=html) diff --git a/pyaggr3g470r/notifications.py b/pyaggr3g470r/notifications.py new file mode 100644 index 00000000..ee9a1830 --- /dev/null +++ b/pyaggr3g470r/notifications.py @@ -0,0 +1,71 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- + +# pyAggr3g470r - A Web based news aggregator. +# Copyright (C) 2010-2014 Cédric Bonhomme - https://www.cedricbonhomme.org +# +# For more information : https://bitbucket.org/cedricbonhomme/pyaggr3g470r/ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import utils +import conf +from pyaggr3g470r import emails + +def information_message(subject, plaintext): + """ + Send an information message to the users of the platform. + """ + from pyaggr3g470r.models import User + users = User.query.all() + # Only send email for activated accounts. + emails = [user.email for user in users if user.activation_key == ""] + # Postmark has a limit of twenty recipients per message in total. + for i in xrange(0, len(emails), 19): + emails.send(to=conf.NOTIFICATION_EMAIL, bcc=", ".join(emails[i:i+19]), subject=subject, plaintext=plaintext) + +def new_account_notification(user): + """ + Account creation notification. + """ + plaintext = """Hello,\n\nYour account has been created. Click on the following link to confirm it:\n%s\n\nSee you,""" % \ + (conf.PLATFORM_URL + 'confirm_account/' + user.activation_key) + emails.send(to=conf.NOTIFICATION_EMAIL, bcc=user.email, subject="[pyAggr3g470r] Account creation", plaintext=plaintext) + +def new_account_activation(user): + """ + Account activation notification. + """ + plaintext = """Hello,\n\nYour account has been activated. You can now connect to the platform:\n%s\n\nSee you,""" % \ + (conf.PLATFORM_URL) + emails.send(to=conf.NOTIFICATION_EMAIL, bcc=user.email, subject="[pyAggr3g470r] Account activated", plaintext=plaintext) + +def new_password_notification(user, password): + """ + New password notification. + """ + plaintext = """Hello,\n\nA new password has been generated at your request:\n\n%s""" % \ + (password, ) + plaintext += "\n\nIt is advised to replace it as soon as connected to pyAggr3g470r.\n\nSee you," + emails.send(to=conf.NOTIFICATION_EMAIL, bcc=user.email, subject="[pyAggr3g470r] New password", plaintext=plaintext) + +def new_article_notification(user, feed, article): + """ + New article notification. + """ + subject = '[pyAggr3g470r] ' + feed.title + ": " + article.title + html = """\n\n%s\n\n\n%s\n\n""" % \ + (feed.title + ": " + article.title, article.content) + plaintext = utils.clear_string(html) + emails.send(to=conf.NOTIFICATION_EMAIL, bcc=user.email, subject=subject, plaintext=plaintext, html=html) \ No newline at end of file diff --git a/pyaggr3g470r/views.py b/pyaggr3g470r/views.py index 9a2b2811..ad0cc914 100644 --- a/pyaggr3g470r/views.py +++ b/pyaggr3g470r/views.py @@ -42,7 +42,7 @@ from sqlalchemy.exc import IntegrityError from werkzeug import generate_password_hash import conf -from pyaggr3g470r import utils, emails, export +from pyaggr3g470r import utils, notifications, export from pyaggr3g470r import app, db, allowed_file, babel from pyaggr3g470r.models import User, Feed, Article, Role from pyaggr3g470r.decorators import feed_access_required @@ -206,7 +206,7 @@ def signup(): # Send the confirmation email try: - emails.new_account_notification(user) + notifications.new_account_notification(user) except Exception as e: flash(gettext('Problem while sending activation email') + ': ' + str(e), 'danger') return redirect(url_for('home')) @@ -782,7 +782,7 @@ def recover(): # Send the confirmation email try: - emails.new_password_notification(user, password) + notifications.new_password_notification(user, password) flash(gettext('New password sent to your address.'), 'success') except Exception as e: flash(gettext('Problem while sending your new password.') + ': ' + str(e), 'danger') @@ -808,7 +808,7 @@ def dashboard(): if request.method == 'POST': if form.validate(): try: - emails.information_message(form.subject.data, form.message.data) + notifications.information_message(form.subject.data, form.message.data) except Exception as e: flash(gettext('Problem while sending email') + ': ' + str(e), 'danger') @@ -904,7 +904,7 @@ def disable_user(user_id=None): # Send the confirmation email try: - emails.new_account_activation(user) + notifications.new_account_activation(user) user.activation_key = "" flash(gettext('Account of the user') + ' ' + user.nickname + ' ' + gettext('successfully activated.'), 'success') except Exception as e: -- cgit