diff --git a/smash/smash/local_settings.py.template b/smash/smash/local_settings.py.template index b5c398c064b0b58992f6adf380bdb94b6ebc15a9..ba1dcda662d69f97380d284555e5284a86898335 100644 --- a/smash/smash/local_settings.py.template +++ b/smash/smash/local_settings.py.template @@ -6,6 +6,14 @@ DEBUG = True WSGI_APPLICATION = 'smash.wsgi.application' +EMAIL_USE_TLS = False +EMAIL_USE_SSL = False +EMAIL_HOST = 'smtp.uni.lu' +EMAIL_HOST_USER = '' +EMAIL_HOST_PASSWORD = '' +EMAIL_PORT = 25 +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +DEFAULT_FROM_EMAIL = 'prc-scheduling-admin@uni.lu' # Database # https://docs.djangoproject.com/en/1.10/ref/settings/#databases diff --git a/smash/smash/settings.py b/smash/smash/settings.py index fd634ff83188a8b9950da2f5b35871f8e9eaaf68..0e57c97649286fdad18830070e20f69a20303d03 100644 --- a/smash/smash/settings.py +++ b/smash/smash/settings.py @@ -22,6 +22,13 @@ ALLOWED_HOSTS = ['prc.parkinson.lu', 'localhost'] DEBUG = True +EMAIL_HOST = 'smtp.uni.lu' +EMAIL_HOST_USER = '' +EMAIL_HOST_PASSWORD = '' +EMAIL_PORT = 25 +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +DEFAULT_FROM_EMAIL = 'prc-scheduling-admin@uni.lu' + # Application definition INSTALLED_APPS = [ diff --git a/smash/web/email.py b/smash/web/email.py new file mode 100644 index 0000000000000000000000000000000000000000..6ed3208b503036cf40acde5bef6290fd7cad1b34 --- /dev/null +++ b/smash/web/email.py @@ -0,0 +1,26 @@ +# coding=utf-8 + +from django.conf import settings +from django.core.mail import send_mail +from django.core.mail import EmailMessage + + +class EmailSender(object): + def send_email(self, subject, body, recipients, cc_recipients=[]): + email_from = getattr(settings, "DEFAULT_FROM_EMAIL", None) + recipient_list = [] + for recipient in recipients.split(";"): + recipient_list.append(recipient) + cc_recipients.append(email_from) + + message = EmailMessage( + subject, + body, + email_from, + recipient_list, + cc=cc_recipients + ) + message.content_subtype = "html" + message.send() + +# send_mail(subject, "", email_from, recipient_list, cc=cc_recipients, html_message=body) diff --git a/smash/web/migrations/0032_configurationitem_email_items.py b/smash/web/migrations/0032_configurationitem_email_items.py new file mode 100644 index 0000000000000000000000000000000000000000..1e2142aa414c08d1a33589fd2044a13238b391e2 --- /dev/null +++ b/smash/web/migrations/0032_configurationitem_email_items.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-04-04 09:43 +from __future__ import unicode_literals + +from django.db import migrations + +from web.models.constants import KIT_RECIPIENT_EMAIL_CONFIGURATION_TYPE, \ + KIT_EMAIL_HOUR_CONFIGURATION_TYPE, \ + KIT_EMAIL_DAY_OF_WEEK_CONFIGURATION_TYPE + + +def create_item(apps, type, value, name): + # We can't import the ConfigurationItem model directly as it may be a newer + # version than this migration expects. We use the historical version. + ConfigurationItem = apps.get_model("web", "ConfigurationItem") + item = ConfigurationItem.objects.create() + item.type = type + item.value = value + item.name = name + item.save() + + +def configuration_items(apps, schema_editor): + create_item(apps, KIT_RECIPIENT_EMAIL_CONFIGURATION_TYPE, "kit.receipents@lu;with.semicolon@separation.lu", + "Recipients of kit requests email") + create_item(apps, KIT_EMAIL_HOUR_CONFIGURATION_TYPE, "17:00", + "At what time kit request emails should be sent") + create_item(apps, KIT_EMAIL_DAY_OF_WEEK_CONFIGURATION_TYPE, "FRIDAY", + "At what weekday kit request emails should be sent") + + +class Migration(migrations.Migration): + dependencies = [ + ('web', '0031_appointment_post_mail_sent'), + ] + + operations = [ + migrations.RunPython(configuration_items), + ] diff --git a/smash/web/models/constants.py b/smash/web/models/constants.py index cb52bd3aba0b11d401ed4b118ad0c36db26338fb..5d7ac193bc9e18e59b15e858bafb2a92ee8e15aa 100644 --- a/smash/web/models/constants.py +++ b/smash/web/models/constants.py @@ -30,3 +30,7 @@ CONTACT_TYPES_CHOICES = ( CANCELLED_APPOINTMENT_COLOR_CONFIGURATION_TYPE = "CANCELLED_APPOINTMENT_COLOR" NO_SHOW_APPOINTMENT_COLOR_CONFIGURATION_TYPE = "NO_SHOW_APPOINTMENT_COLOR" + +KIT_RECIPIENT_EMAIL_CONFIGURATION_TYPE = "KIT_RECIPIENT_EMAIL_CONFIGURATION_TYPE" +KIT_EMAIL_HOUR_CONFIGURATION_TYPE = "KIT_DAILY_EMAIL_HOUR_CONFIGURATION_TYPE" +KIT_EMAIL_DAY_OF_WEEK_CONFIGURATION_TYPE = "KIT_EMAIL_DAY_OF_WEEK_CONFIGURATION_TYPE" diff --git a/smash/web/tests/test_email.py b/smash/web/tests/test_email.py new file mode 100644 index 0000000000000000000000000000000000000000..879acc7e3b4164b87d40d6c7cbc150f8c3ac9349 --- /dev/null +++ b/smash/web/tests/test_email.py @@ -0,0 +1,19 @@ +# coding=utf-8 + +from django.core import mail +from django.test import TestCase + +from web.email import EmailSender + + +class TestEmailSender(TestCase): + def test_send_email(self): + self.assertEqual(0, len(mail.outbox)) + + email_sender = EmailSender() + email_sender.send_email("test", "test body<br/>and content", "piotr.gawron@uni.lu") + self.assertEqual(1, len(mail.outbox)) + + # console test that actually send email + # > manage.py shell + # from web.email import EmailSender; EmailSender().send_email("test","<h1>body</h1>","piotr.gawron@uni.lu");