aboutsummaryrefslogtreecommitdiff
path: root/ihatemoney
diff options
context:
space:
mode:
Diffstat (limited to 'ihatemoney')
-rw-r--r--ihatemoney/messages.pot19
-rw-r--r--ihatemoney/tests/tests.py129
-rw-r--r--ihatemoney/translations/cs/LC_MESSAGES/messages.po26
-rw-r--r--ihatemoney/translations/de/LC_MESSAGES/messages.po26
-rw-r--r--ihatemoney/translations/el/LC_MESSAGES/messages.po26
-rw-r--r--ihatemoney/translations/es_419/LC_MESSAGES/messages.po26
-rw-r--r--ihatemoney/translations/fr/LC_MESSAGES/messages.po36
-rw-r--r--ihatemoney/translations/id/LC_MESSAGES/messages.po26
-rw-r--r--ihatemoney/translations/it/LC_MESSAGES/messages.po44
-rw-r--r--ihatemoney/translations/nb_NO/LC_MESSAGES/messages.po26
-rw-r--r--ihatemoney/translations/nl/LC_MESSAGES/messages.po26
-rw-r--r--ihatemoney/translations/pl/LC_MESSAGES/messages.po39
-rw-r--r--ihatemoney/translations/ru/LC_MESSAGES/messages.po26
-rw-r--r--ihatemoney/translations/tr/LC_MESSAGES/messages.po26
-rw-r--r--ihatemoney/translations/uk/LC_MESSAGES/messages.po26
-rw-r--r--ihatemoney/translations/zh_HANS-CN/LC_MESSAGES/messages.po40
-rw-r--r--ihatemoney/utils.py18
-rw-r--r--ihatemoney/web.py66
18 files changed, 548 insertions, 103 deletions
diff --git a/ihatemoney/messages.pot b/ihatemoney/messages.pot
index dcf16b3..9569d05 100644
--- a/ihatemoney/messages.pot
+++ b/ihatemoney/messages.pot
@@ -157,13 +157,24 @@ msgstr ""
msgid "You have just created '%(project)s' to share your expenses"
msgstr ""
-msgid "Error while sending reminder email"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr ""
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr ""
@@ -192,6 +203,12 @@ msgstr ""
msgid "Your invitations have been sent"
msgstr ""
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr ""
diff --git a/ihatemoney/tests/tests.py b/ihatemoney/tests/tests.py
index 4cdf316..dc6c455 100644
--- a/ihatemoney/tests/tests.py
+++ b/ihatemoney/tests/tests.py
@@ -5,6 +5,8 @@ import io
import json
import os
import re
+import smtplib
+import socket
from time import sleep
import unittest
from unittest.mock import MagicMock, patch
@@ -51,10 +53,10 @@ class BaseTestCase(TestCase):
follow_redirects=True,
)
- def post_project(self, name):
+ def post_project(self, name, follow_redirects=True):
"""Create a fake project"""
# create the project
- self.client.post(
+ return self.client.post(
"/create",
data={
"name": name,
@@ -63,6 +65,7 @@ class BaseTestCase(TestCase):
"contact_email": f"{name}@notmyidea.org",
"default_currency": "USD",
},
+ follow_redirects=follow_redirects,
)
def create_project(self, name):
@@ -141,10 +144,15 @@ class BudgetTestCase(IhatemoneyTestCase):
self.login("raclette")
self.post_project("raclette")
- self.client.post(
- "/raclette/invite", data={"emails": "zorglub@notmyidea.org"}
+ resp = self.client.post(
+ "/raclette/invite",
+ data={"emails": "zorglub@notmyidea.org"},
+ follow_redirects=True,
)
+ # success notification
+ self.assertIn("Your invitations have been sent", resp.data.decode("utf-8"))
+
self.assertEqual(len(outbox), 2)
self.assertEqual(outbox[0].recipients, ["raclette@notmyidea.org"])
self.assertEqual(outbox[1].recipients, ["zorglub@notmyidea.org"])
@@ -225,7 +233,15 @@ class BudgetTestCase(IhatemoneyTestCase):
self.create_project("raclette")
# Get password resetting link from mail
with self.app.mail.record_messages() as outbox:
- self.client.post("/password-reminder", data={"id": "raclette"})
+ resp = self.client.post(
+ "/password-reminder", data={"id": "raclette"}, follow_redirects=True
+ )
+ # Check that we are redirected to the right page
+ self.assertIn(
+ "A link to reset your password has been sent to you",
+ resp.data.decode("utf-8"),
+ )
+ # Check that an email was sent
self.assertEqual(len(outbox), 1)
url_start = outbox[0].body.find("You can reset it here: ") + 23
url_end = outbox[0].body.find(".\n", url_start)
@@ -250,17 +266,26 @@ class BudgetTestCase(IhatemoneyTestCase):
def test_project_creation(self):
with self.app.test_client() as c:
- # add a valid project
- c.post(
- "/create",
- data={
- "name": "The fabulous raclette party",
- "id": "raclette",
- "password": "party",
- "contact_email": "raclette@notmyidea.org",
- "default_currency": "USD",
- },
- )
+ with self.app.mail.record_messages() as outbox:
+ # add a valid project
+ resp = c.post(
+ "/create",
+ data={
+ "name": "The fabulous raclette party",
+ "id": "raclette",
+ "password": "party",
+ "contact_email": "raclette@notmyidea.org",
+ "default_currency": "USD",
+ },
+ follow_redirects=True,
+ )
+ # an email is sent to the owner with a reminder of the password
+ self.assertEqual(len(outbox), 1)
+ self.assertEqual(outbox[0].recipients, ["raclette@notmyidea.org"])
+ self.assertIn(
+ "A reminder email has just been sent to you",
+ resp.data.decode("utf-8"),
+ )
# session is updated
self.assertTrue(session["raclette"])
@@ -2265,6 +2290,78 @@ class ModelsTestCase(IhatemoneyTestCase):
self.assertEqual(bill.pay_each(), pay_each_expected)
+class EmailFailureTestCase(IhatemoneyTestCase):
+ def test_creation_email_failure_smtp(self):
+ self.login("raclette")
+ with patch.object(
+ self.app.mail, "send", MagicMock(side_effect=smtplib.SMTPException)
+ ):
+ resp = self.post_project("raclette")
+ # Check that an error message is displayed
+ self.assertIn(
+ "We tried to send you an reminder email, but there was an error",
+ resp.data.decode("utf-8"),
+ )
+ # Check that we were redirected to the home page anyway
+ self.assertIn(
+ 'You probably want to <a href="/raclette/members/add"',
+ resp.data.decode("utf-8"),
+ )
+
+ def test_creation_email_failure_socket(self):
+ self.login("raclette")
+ with patch.object(self.app.mail, "send", MagicMock(side_effect=socket.error)):
+ resp = self.post_project("raclette")
+ # Check that an error message is displayed
+ self.assertIn(
+ "We tried to send you an reminder email, but there was an error",
+ resp.data.decode("utf-8"),
+ )
+ # Check that we were redirected to the home page anyway
+ self.assertIn(
+ 'You probably want to <a href="/raclette/members/add"',
+ resp.data.decode("utf-8"),
+ )
+
+ def test_password_reset_email_failure(self):
+ self.create_project("raclette")
+ for exception in (smtplib.SMTPException, socket.error):
+ with patch.object(self.app.mail, "send", MagicMock(side_effect=exception)):
+ resp = self.client.post(
+ "/password-reminder", data={"id": "raclette"}, follow_redirects=True
+ )
+ # Check that an error message is displayed
+ self.assertIn(
+ "there was an error while sending you an email",
+ resp.data.decode("utf-8"),
+ )
+ # Check that we were not redirected to the success page
+ self.assertNotIn(
+ "A link to reset your password has been sent to you",
+ resp.data.decode("utf-8"),
+ )
+
+ def test_invitation_email_failure(self):
+ self.login("raclette")
+ self.post_project("raclette")
+ for exception in (smtplib.SMTPException, socket.error):
+ with patch.object(self.app.mail, "send", MagicMock(side_effect=exception)):
+ resp = self.client.post(
+ "/raclette/invite",
+ data={"emails": "toto@notmyidea.org"},
+ follow_redirects=True,
+ )
+ # Check that an error message is displayed
+ self.assertIn(
+ "there was an error while trying to send the invitation emails",
+ resp.data.decode("utf-8"),
+ )
+ # Check that we are still on the same page (no redirection)
+ self.assertIn(
+ "Invite people to join this project", resp.data.decode("utf-8"),
+ )
+
+
def em_surround(string, regex_escape=False):
if regex_escape:
return r'<em class="font-italic">%s<\/em>' % string
diff --git a/ihatemoney/translations/cs/LC_MESSAGES/messages.po b/ihatemoney/translations/cs/LC_MESSAGES/messages.po
index bb137ee..96703ac 100644
--- a/ihatemoney/translations/cs/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/cs/LC_MESSAGES/messages.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-09 21:41+0200\n"
+"POT-Creation-Date: 2020-05-18 15:11+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language: cs\n"
@@ -12,7 +12,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.7.0\n"
+"Generated-By: Babel 2.8.0\n"
msgid ""
"Not a valid amount or expression. Only numbers and + - * / operators are "
@@ -173,13 +173,24 @@ msgstr ""
msgid "You have just created '%(project)s' to share your expenses"
msgstr ""
-msgid "Error while sending reminder email"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr ""
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr ""
@@ -208,6 +219,12 @@ msgstr ""
msgid "Your invitations have been sent"
msgstr ""
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr ""
@@ -757,3 +774,6 @@ msgstr ""
#~ msgid "each"
#~ msgstr ""
+#~ msgid "Error while sending reminder email"
+#~ msgstr ""
+
diff --git a/ihatemoney/translations/de/LC_MESSAGES/messages.po b/ihatemoney/translations/de/LC_MESSAGES/messages.po
index 502793b..74eed89 100644
--- a/ihatemoney/translations/de/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/de/LC_MESSAGES/messages.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-09 21:41+0200\n"
+"POT-Creation-Date: 2020-05-18 15:11+0200\n"
"PO-Revision-Date: 2020-02-12 10:50+0000\n"
"Last-Translator: flolilo <flolilo@mailbox.org>\n"
"Language: de\n"
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.7.0\n"
+"Generated-By: Babel 2.8.0\n"
msgid ""
"Not a valid amount or expression. Only numbers and + - * / operators are "
@@ -182,13 +182,24 @@ msgstr ""
"Du hast gerade das Projekt '%(project)s' erstellt, um deine Ausgaben zu "
"teilen"
-msgid "Error while sending reminder email"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr ""
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr "Kein Token zur Verfügung gestellt"
@@ -217,6 +228,12 @@ msgstr "Du wurdest eingeladen, deine Ausgaben für %(project)s zu teilen"
msgid "Your invitations have been sent"
msgstr "Deine Einladungen wurden versendet"
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr ""
@@ -785,3 +802,6 @@ msgstr ""
#~ msgid "each"
#~ msgstr "alles"
+#~ msgid "Error while sending reminder email"
+#~ msgstr ""
+
diff --git a/ihatemoney/translations/el/LC_MESSAGES/messages.po b/ihatemoney/translations/el/LC_MESSAGES/messages.po
index 23fc2ee..df8c2ae 100644
--- a/ihatemoney/translations/el/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/el/LC_MESSAGES/messages.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-09 21:41+0200\n"
+"POT-Creation-Date: 2020-05-18 15:11+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language: el\n"
@@ -12,7 +12,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.7.0\n"
+"Generated-By: Babel 2.8.0\n"
msgid ""
"Not a valid amount or expression. Only numbers and + - * / operators are "
@@ -173,13 +173,24 @@ msgstr ""
msgid "You have just created '%(project)s' to share your expenses"
msgstr ""
-msgid "Error while sending reminder email"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr ""
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr ""
@@ -208,6 +219,12 @@ msgstr ""
msgid "Your invitations have been sent"
msgstr ""
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr ""
@@ -757,3 +774,6 @@ msgstr ""
#~ msgid "each"
#~ msgstr ""
+#~ msgid "Error while sending reminder email"
+#~ msgstr ""
+
diff --git a/ihatemoney/translations/es_419/LC_MESSAGES/messages.po b/ihatemoney/translations/es_419/LC_MESSAGES/messages.po
index b8d6c30..b446ff8 100644
--- a/ihatemoney/translations/es_419/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/es_419/LC_MESSAGES/messages.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-09 21:41+0200\n"
+"POT-Creation-Date: 2020-05-18 15:11+0200\n"
"PO-Revision-Date: 2020-05-03 15:20+0000\n"
"Last-Translator: Fabian Rodriguez <fabian@fabianrodriguez.com>\n"
"Language: es_419\n"
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.7.0\n"
+"Generated-By: Babel 2.8.0\n"
msgid ""
"Not a valid amount or expression. Only numbers and + - * / operators are "
@@ -182,13 +182,24 @@ msgstr "Este código privado no es el correcto"
msgid "You have just created '%(project)s' to share your expenses"
msgstr "Acabas de crear '%(project)s' para compartir tus gastos"
-msgid "Error while sending reminder email"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr ""
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr "No se proporciono ningún token"
@@ -217,6 +228,12 @@ msgstr "Usted ha sido invitado a compartir sus gastos para %(project)s"
msgid "Your invitations have been sent"
msgstr "Sus invitaciones han sido enviadas"
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr "Se añadieron %(member)s"
@@ -806,3 +823,6 @@ msgstr "Período"
#~ msgid "each"
#~ msgstr "Cada"
+#~ msgid "Error while sending reminder email"
+#~ msgstr ""
+
diff --git a/ihatemoney/translations/fr/LC_MESSAGES/messages.po b/ihatemoney/translations/fr/LC_MESSAGES/messages.po
index 79faf70..7ac363d 100644
--- a/ihatemoney/translations/fr/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/fr/LC_MESSAGES/messages.po
@@ -7,18 +7,17 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2020-05-09 21:41+0200\n"
+"POT-Creation-Date: 2020-05-18 15:11+0200\n"
"PO-Revision-Date: 2020-05-15 20:41+0000\n"
"Last-Translator: Glandos <bugs-github@antipoul.fr>\n"
-"Language-Team: French <https://hosted.weblate.org/projects/i-hate-money/"
-"i-hate-money/fr/>\n"
"Language: fr\n"
+"Language-Team: French <https://hosted.weblate.org/projects/i-hate-money/i"
+"-hate-money/fr/>\n"
+"Plural-Forms: nplurals=2; plural=n > 1\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.1-dev\n"
-"Generated-By: Babel 2.7.0\n"
+"Generated-By: Babel 2.8.0\n"
msgid ""
"Not a valid amount or expression. Only numbers and + - * / operators are "
@@ -185,13 +184,24 @@ msgstr "Le code que vous avez entré n’est pas correct"
msgid "You have just created '%(project)s' to share your expenses"
msgstr "Vous venez de créer « %(project)s » pour partager vos dépenses"
-msgid "Error while sending reminder email"
-msgstr "Erreur lors de l’envoi du courriel de rappel"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
+msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr "L’identifiant de ce projet est %(project)s"
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr "Aucun token n’a été fourni"
@@ -220,6 +230,12 @@ msgstr "Vous avez été invité à partager vos dépenses pour %(project)s"
msgid "Your invitations have been sent"
msgstr "Vos invitations ont bien été envoyées"
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr "%(member)s a été ajouté"
@@ -1019,3 +1035,7 @@ msgstr "Période"
#~ msgid "each"
#~ msgstr "chacun"
+
+#~ msgid "Error while sending reminder email"
+#~ msgstr "Erreur lors de l’envoi du courriel de rappel"
+
diff --git a/ihatemoney/translations/id/LC_MESSAGES/messages.po b/ihatemoney/translations/id/LC_MESSAGES/messages.po
index 543d982..cff90b3 100644
--- a/ihatemoney/translations/id/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/id/LC_MESSAGES/messages.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-09 21:41+0200\n"
+"POT-Creation-Date: 2020-05-18 15:11+0200\n"
"PO-Revision-Date: 2019-11-16 10:04+0000\n"
"Last-Translator: Muhammad Fauzi <fauzi.padlaw@gmail.com>\n"
"Language: id\n"
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.7.0\n"
+"Generated-By: Babel 2.8.0\n"
msgid ""
"Not a valid amount or expression. Only numbers and + - * / operators are "
@@ -178,13 +178,24 @@ msgstr "Kode pribadi ini tidak benar"
msgid "You have just created '%(project)s' to share your expenses"
msgstr "Anda baru saja membuat %(project)s untuk membagikan harga Anda"
-msgid "Error while sending reminder email"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr ""
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr "Belum ada token diberikan"
@@ -213,6 +224,12 @@ msgstr "Anda telah diundang untuk membagikan harga Anda untuk %(project)s"
msgid "Your invitations have been sent"
msgstr "Undangan Anda telah dikirim"
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr ""
@@ -785,3 +802,6 @@ msgstr ""
#~ msgid "each"
#~ msgstr "setiap"
+#~ msgid "Error while sending reminder email"
+#~ msgstr ""
+
diff --git a/ihatemoney/translations/it/LC_MESSAGES/messages.po b/ihatemoney/translations/it/LC_MESSAGES/messages.po
index 270b8a2..5966120 100644
--- a/ihatemoney/translations/it/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/it/LC_MESSAGES/messages.po
@@ -1,19 +1,19 @@
+
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-09 21:41+0200\n"
+"POT-Creation-Date: 2020-05-18 15:11+0200\n"
"PO-Revision-Date: 2020-05-18 13:02+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"
-"Language-Team: Italian <https://hosted.weblate.org/projects/i-hate-money/"
-"i-hate-money/it/>\n"
"Language: it\n"
+"Language-Team: Italian <https://hosted.weblate.org/projects/i-hate-"
+"money/i-hate-money/it/>\n"
+"Plural-Forms: nplurals=2; plural=n != 1\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.1-dev\n"
-"Generated-By: Babel 2.7.0\n"
+"Generated-By: Babel 2.8.0\n"
msgid ""
"Not a valid amount or expression. Only numbers and + - * / operators are "
@@ -167,12 +167,13 @@ msgstr "Troppi tentativi di accesso non riusciti. Riprova più tardi."
#, python-format
msgid "This admin password is not the right one. Only %(num)d attempts left."
msgstr ""
-"Questa password di amministrazione non è corretta. Solo %(num)d tentativi "
-"rimasti."
+"Questa password di amministrazione non è corretta. Solo %(num)d tentativi"
+" rimasti."
msgid "You either provided a bad token or no project identifier."
msgstr ""
-"Hai fornito un token invalido o l'identificatore del progetto non è valido."
+"Hai fornito un token invalido o l'identificatore del progetto non è "
+"valido."
msgid "This private code is not the right one"
msgstr "Questo codice privato non è quello corretto"
@@ -181,13 +182,24 @@ msgstr "Questo codice privato non è quello corretto"
msgid "You have just created '%(project)s' to share your expenses"
msgstr "Hai appena creato '%(project)s' per condividere le tue spese"
-msgid "Error while sending reminder email"
-msgstr "Errore durante l'invio dell'email di promemoria"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
+msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr "L'identificatore del progetto è %(project)s"
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr "Nessun token fornito"
@@ -216,6 +228,12 @@ msgstr "Sei stato invitato a condividere le tue spese per %(project)s"
msgid "Your invitations have been sent"
msgstr "I tuoi inviti sono stati spediti"
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr "%(member)s è stato aggiunto"
@@ -764,3 +782,7 @@ msgstr ""
#~ msgid "each"
#~ msgstr ""
+
+#~ msgid "Error while sending reminder email"
+#~ msgstr "Errore durante l'invio dell'email di promemoria"
+
diff --git a/ihatemoney/translations/nb_NO/LC_MESSAGES/messages.po b/ihatemoney/translations/nb_NO/LC_MESSAGES/messages.po
index 899bc0e..d8223b3 100644
--- a/ihatemoney/translations/nb_NO/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/nb_NO/LC_MESSAGES/messages.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-09 21:41+0200\n"
+"POT-Creation-Date: 2020-05-18 15:11+0200\n"
"PO-Revision-Date: 2019-11-12 09:04+0000\n"
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
"Language: nb_NO\n"
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.7.0\n"
+"Generated-By: Babel 2.8.0\n"
msgid ""
"Not a valid amount or expression. Only numbers and + - * / operators are "
@@ -182,13 +182,24 @@ msgstr "Denne private koden er ikke rett"
msgid "You have just created '%(project)s' to share your expenses"
msgstr "Du har akkurat opprettet \"%(project)s\" for å dele dine utgifter"
-msgid "Error while sending reminder email"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr ""
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr "Inget symbol angitt"
@@ -221,6 +232,12 @@ msgstr ""
msgid "Your invitations have been sent"
msgstr "Invitasjonene dine har blitt sendt"
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr ""
@@ -916,3 +933,6 @@ msgstr ""
#~ msgid "each"
#~ msgstr "hver"
+#~ msgid "Error while sending reminder email"
+#~ msgstr ""
+
diff --git a/ihatemoney/translations/nl/LC_MESSAGES/messages.po b/ihatemoney/translations/nl/LC_MESSAGES/messages.po
index d80861b..c0917c9 100644
--- a/ihatemoney/translations/nl/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/nl/LC_MESSAGES/messages.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2020-05-09 21:41+0200\n"
+"POT-Creation-Date: 2020-05-18 15:11+0200\n"
"PO-Revision-Date: 2019-10-07 22:56+0000\n"
"Last-Translator: Heimen Stoffels <vistausss@outlook.com>\n"
"Language: nl\n"
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.7.0\n"
+"Generated-By: Babel 2.8.0\n"
msgid ""
"Not a valid amount or expression. Only numbers and + - * / operators are "
@@ -176,13 +176,24 @@ msgstr ""
"Je hebt zojuist het project '%(project)s' aangemaakt om je uitgaven te "
"verdelen"
-msgid "Error while sending reminder email"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr ""
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr "Geen toegangssleutel opgegeven"
@@ -211,6 +222,12 @@ msgstr "Je bent uitgenodigd om je uitgaven te delen met %(project)s"
msgid "Your invitations have been sent"
msgstr "Je uitnodigingen zijn verstuurd"
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr ""
@@ -774,3 +791,6 @@ msgstr ""
#~ msgid "each"
#~ msgstr "per persoon"
+#~ msgid "Error while sending reminder email"
+#~ msgstr ""
+
diff --git a/ihatemoney/translations/pl/LC_MESSAGES/messages.po b/ihatemoney/translations/pl/LC_MESSAGES/messages.po
index f2709cf..aa2d19b 100644
--- a/ihatemoney/translations/pl/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/pl/LC_MESSAGES/messages.po
@@ -1,20 +1,20 @@
+
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-09 21:41+0200\n"
+"POT-Creation-Date: 2020-05-18 15:11+0200\n"
"PO-Revision-Date: 2020-05-13 15:41+0000\n"
"Last-Translator: Szylu <chipolade@gmail.com>\n"
-"Language-Team: Polish <https://hosted.weblate.org/projects/i-hate-money/"
-"i-hate-money/pl/>\n"
"Language: pl\n"
+"Language-Team: Polish <https://hosted.weblate.org/projects/i-hate-money/i"
+"-hate-money/pl/>\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && "
+"(n%100<10 || n%100>=20) ? 1 : 2\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.1-dev\n"
-"Generated-By: Babel 2.7.0\n"
+"Generated-By: Babel 2.8.0\n"
msgid ""
"Not a valid amount or expression. Only numbers and + - * / operators are "
@@ -179,13 +179,24 @@ msgstr "Ten prywatny kod jest niewłaściwy"
msgid "You have just created '%(project)s' to share your expenses"
msgstr "Właśnie utworzyłeś „%(project)s”, aby podzielić się wydatkami"
-msgid "Error while sending reminder email"
-msgstr "Błąd podczas wysyłania wiadomości e-mail z przypomnieniem"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
+msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr "Identyfikator projektu to %(project)s"
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr "Nie podano tokena"
@@ -214,6 +225,12 @@ msgstr "Zostałeś zaproszony do podzielenia się swoimi wydatkami w %(project)s
msgid "Your invitations have been sent"
msgstr "Twoje zaproszenia zostały wysłane"
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr "%(member)s został dodany"
@@ -799,3 +816,7 @@ msgstr "Okres"
#~ msgid "each"
#~ msgstr "każdy"
+
+#~ msgid "Error while sending reminder email"
+#~ msgstr "Błąd podczas wysyłania wiadomości e-mail z przypomnieniem"
+
diff --git a/ihatemoney/translations/ru/LC_MESSAGES/messages.po b/ihatemoney/translations/ru/LC_MESSAGES/messages.po
index a1cd590..7daaa26 100644
--- a/ihatemoney/translations/ru/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/ru/LC_MESSAGES/messages.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-09 21:41+0200\n"
+"POT-Creation-Date: 2020-05-18 15:11+0200\n"
"PO-Revision-Date: 2020-04-28 07:11+0000\n"
"Last-Translator: Vsevolod <sevauserg.com@gmail.com>\n"
"Language: ru\n"
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.7.0\n"
+"Generated-By: Babel 2.8.0\n"
msgid ""
"Not a valid amount or expression. Only numbers and + - * / operators are "
@@ -181,13 +181,24 @@ msgstr "Этот приватный код не подходит"
msgid "You have just created '%(project)s' to share your expenses"
msgstr "Вы только что создали '%(project)s' , чтобы разделить расходы"
-msgid "Error while sending reminder email"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr ""
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr "Не предоставлен токен"
@@ -216,6 +227,12 @@ msgstr "Вас пригласили разделить расходы в про
msgid "Your invitations have been sent"
msgstr "Ваш код приглашения был отправлен"
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr "%(member)s был добавлен"
@@ -795,3 +812,6 @@ msgstr "Период"
#~ msgid "each"
#~ msgstr "каждый"
+#~ msgid "Error while sending reminder email"
+#~ msgstr ""
+
diff --git a/ihatemoney/translations/tr/LC_MESSAGES/messages.po b/ihatemoney/translations/tr/LC_MESSAGES/messages.po
index 6343b8a..04fbbf7 100644
--- a/ihatemoney/translations/tr/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/tr/LC_MESSAGES/messages.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-09 21:41+0200\n"
+"POT-Creation-Date: 2020-05-18 15:11+0200\n"
"PO-Revision-Date: 2019-08-07 13:24+0000\n"
"Last-Translator: Mesut Akcan <makcan@gmail.com>\n"
"Language: tr\n"
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.7.0\n"
+"Generated-By: Babel 2.8.0\n"
msgid ""
"Not a valid amount or expression. Only numbers and + - * / operators are "
@@ -178,13 +178,24 @@ msgstr ""
msgid "You have just created '%(project)s' to share your expenses"
msgstr ""
-msgid "Error while sending reminder email"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr ""
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr ""
@@ -213,6 +224,12 @@ msgstr ""
msgid "Your invitations have been sent"
msgstr ""
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr ""
@@ -762,3 +779,6 @@ msgstr ""
#~ msgid "each"
#~ msgstr ""
+#~ msgid "Error while sending reminder email"
+#~ msgstr ""
+
diff --git a/ihatemoney/translations/uk/LC_MESSAGES/messages.po b/ihatemoney/translations/uk/LC_MESSAGES/messages.po
index 737add3..6327534 100644
--- a/ihatemoney/translations/uk/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/uk/LC_MESSAGES/messages.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-09 21:41+0200\n"
+"POT-Creation-Date: 2020-05-18 15:11+0200\n"
"PO-Revision-Date: 2019-12-08 16:26+0000\n"
"Last-Translator: Tymofij Lytvynenko <till.svit@gmail.com>\n"
"Language: uk\n"
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.7.0\n"
+"Generated-By: Babel 2.8.0\n"
msgid ""
"Not a valid amount or expression. Only numbers and + - * / operators are "
@@ -175,13 +175,24 @@ msgstr ""
msgid "You have just created '%(project)s' to share your expenses"
msgstr ""
-msgid "Error while sending reminder email"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr ""
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr ""
@@ -210,6 +221,12 @@ msgstr ""
msgid "Your invitations have been sent"
msgstr ""
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr ""
@@ -759,3 +776,6 @@ msgstr ""
#~ msgid "each"
#~ msgstr ""
+#~ msgid "Error while sending reminder email"
+#~ msgstr ""
+
diff --git a/ihatemoney/translations/zh_HANS-CN/LC_MESSAGES/messages.po b/ihatemoney/translations/zh_HANS-CN/LC_MESSAGES/messages.po
index 9409c51..d78604c 100644
--- a/ihatemoney/translations/zh_HANS-CN/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/zh_HANS-CN/LC_MESSAGES/messages.po
@@ -1,19 +1,20 @@
+
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-09 21:41+0200\n"
+"POT-Creation-Date: 2020-05-18 15:11+0200\n"
"PO-Revision-Date: 2020-05-13 15:41+0000\n"
"Last-Translator: Muge Niu <mugeniu12138@gmail.com>\n"
-"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
-"i-hate-money/i-hate-money/zh_Hans/>\n"
-"Language: zh_HANS-CN\n"
+"Language: zh_HANS_CN\n"
+"Language-Team: Chinese (Simplified) "
+"<https://hosted.weblate.org/projects/i-hate-money/i-hate-money/zh_Hans/>"
+"\n"
+"Plural-Forms: nplurals=1; plural=0\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.1-dev\n"
-"Generated-By: Babel 2.7.0\n"
+"Generated-By: Babel 2.8.0\n"
msgid ""
"Not a valid amount or expression. Only numbers and + - * / operators are "
@@ -174,13 +175,24 @@ msgstr "专用码不正确"
msgid "You have just created '%(project)s' to share your expenses"
msgstr "你新建了一个‘%(project)s'来分担你的花费"
-msgid "Error while sending reminder email"
-msgstr "发送提醒邮件时出错"
+msgid "A reminder email has just been sent to you"
+msgstr ""
+
+msgid ""
+"We tried to send you an reminder email, but there was an error. You can "
+"still use the project normally."
+msgstr ""
#, python-format
msgid "The project identifier is %(project)s"
msgstr "项目的标识符是%(project)s"
+msgid ""
+"Sorry, there was an error while sending you an email with password reset "
+"instructions. Please check the email configuration of the server or "
+"contact the administrator."
+msgstr ""
+
msgid "No token provided"
msgstr "没有符号"
@@ -209,6 +221,12 @@ msgstr "你被邀请进入 %(project)s来分担你的花费"
msgid "Your invitations have been sent"
msgstr "你的申请已发出"
+msgid ""
+"Sorry, there was an error while trying to send the invitation emails. "
+"Please check the email configuration of the server or contact the "
+"administrator."
+msgstr ""
+
#, python-format
msgid "%(member)s has been added"
msgstr "已添加%(member)s"
@@ -771,3 +789,7 @@ msgstr "期间"
#~ msgid "each"
#~ msgstr "每一个·"
+
+#~ msgid "Error while sending reminder email"
+#~ msgstr "发送提醒邮件时出错"
+
diff --git a/ihatemoney/utils.py b/ihatemoney/utils.py
index 175b762..adced8f 100644
--- a/ihatemoney/utils.py
+++ b/ihatemoney/utils.py
@@ -7,6 +7,8 @@ from json import JSONEncoder, dumps
import operator
import os
import re
+import smtplib
+import socket
from babel import Locale
from babel.numbers import get_currency_name, get_currency_symbol
@@ -28,6 +30,22 @@ def slugify(value):
return re.sub(r"[-\s]+", "-", value)
+def send_email(mail_message):
+ """Send an email using Flask-Mail, with proper error handling.
+
+ Return True if everything went well, and False if there was an error.
+ """
+ # Since Python 3.4, SMTPException and socket.error are actually
+ # identical, but this was not the case before. Also, it is more clear
+ # to check for both.
+ try:
+ current_app.mail.send(mail_message)
+ except (smtplib.SMTPException, socket.error):
+ return False
+ # Email was sent successfully
+ return True
+
+
class Redirect303(HTTPException, RoutingException):
"""Raise if the map requests a redirect. This is for example the case if
diff --git a/ihatemoney/web.py b/ihatemoney/web.py
index ae124ac..6575720 100644
--- a/ihatemoney/web.py
+++ b/ihatemoney/web.py
@@ -12,7 +12,6 @@ from datetime import datetime
from functools import wraps
import json
import os
-from smtplib import SMTPRecipientsRefused
from dateutil.parser import parse
from dateutil.relativedelta import relativedelta
@@ -60,6 +59,7 @@ from ihatemoney.utils import (
list_of_dicts2json,
render_localized_template,
same_bill,
+ send_email,
)
main = Blueprint("main", __name__)
@@ -308,11 +308,21 @@ def create_project():
msg = Message(
message_title, body=message_body, recipients=[project.contact_email]
)
- try:
- current_app.mail.send(msg)
- except SMTPRecipientsRefused:
- flash(_("Error while sending reminder email"), category="danger")
-
+ success = send_email(msg)
+ if success:
+ flash(
+ _("A reminder email has just been sent to you"), category="success"
+ )
+ else:
+ # Display the error as a simple "info" alert, because it's
+ # not critical and doesn't prevent using the project.
+ flash(
+ _(
+ "We tried to send you an reminder email, but there was an error. "
+ "You can still use the project normally."
+ ),
+ category="info",
+ )
# redirect the user to the next step (invite)
flash(_("The project identifier is %(project)s", project=project.id))
return redirect(url_for(".list_bills", project_id=project.id))
@@ -328,17 +338,25 @@ def remind_password():
# get the project
project = Project.query.get(form.id.data)
# send a link to reset the password
- current_app.mail.send(
- Message(
- "password recovery",
- body=render_localized_template(
- "password_reminder", project=project
+ remind_message = Message(
+ "password recovery",
+ body=render_localized_template("password_reminder", project=project),
+ recipients=[project.contact_email],
+ )
+ success = send_email(remind_message)
+ if success:
+ return redirect(url_for(".password_reminder_sent"))
+ else:
+ flash(
+ _(
+ "Sorry, there was an error while sending you an email "
+ "with password reset instructions. "
+ "Please check the email configuration of the server "
+ "or contact the administrator."
),
- recipients=[project.contact_email],
+ category="danger",
)
- )
- return redirect(url_for(".password_reminder_sent"))
-
+ # Fall-through: we stay on the same page and display the form again
return render_template("password_reminder.html", form=form)
@@ -585,10 +603,20 @@ def invite():
body=message_body,
recipients=[email.strip() for email in form.emails.data.split(",")],
)
- current_app.mail.send(msg)
- flash(_("Your invitations have been sent"))
- return redirect(url_for(".list_bills"))
-
+ success = send_email(msg)
+ if success:
+ flash(_("Your invitations have been sent"), category="success")
+ return redirect(url_for(".list_bills"))
+ else:
+ flash(
+ _(
+ "Sorry, there was an error while trying to send the invitation emails. "
+ "Please check the email configuration of the server "
+ "or contact the administrator."
+ ),
+ category="danger",
+ )
+ # Fall-through: we stay on the same page and display the form again
return render_template("send_invites.html", form=form)