From 0adca6bd2e101deed58270ba4439f4dc31ce428e Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Thu, 16 Jul 2020 01:36:02 +0300 Subject: [PATCH] Mailjet --- kaehmy/views.py | 1 - members/views.py | 6 ++--- members/views/applications.py | 1 - members/views/members.py | 1 - members/views/payments.py | 1 - members/views/utils.py | 11 +-------- requirements.txt | 3 ++- sikweb/settings.py | 7 +++--- stack-compose-dev.yml | 14 ++++++++++++ webapp/utils.py | 42 ++++++++++++++++++++++++++--------- 10 files changed, 55 insertions(+), 32 deletions(-) diff --git a/kaehmy/views.py b/kaehmy/views.py index eb0f22c..8e7ab29 100644 --- a/kaehmy/views.py +++ b/kaehmy/views.py @@ -6,7 +6,6 @@ from django.views.decorators.csrf import ensure_csrf_cookie from django.http import HttpResponse, HttpResponseRedirect from django.contrib.auth.decorators import permission_required, login_required from django.conf import settings -from django.core.mail import send_mail import logging import requests diff --git a/members/views.py b/members/views.py index 678a32c..96a1cf6 100644 --- a/members/views.py +++ b/members/views.py @@ -11,7 +11,7 @@ import logging from smtplib import SMTPAuthenticationError from members.models import Member, Request -from members.views.utils import send_mail_wrapper +from webapp.utils import send_email @receiver(post_save, sender=Request) @@ -24,7 +24,7 @@ def email_on_request(sender, instance, created, **kwargs): if created: subject = 'Test1' message = 'Please validate your email address\r\n' - send_mail_wrapper(subject, message, instance.email) + send_email(instance.email, subject, message) except SMTPAuthenticationError: logging.error('Failed to send email to accepted request!') @@ -39,6 +39,6 @@ def email_on_accept(sender, instance, created, **kwargs): if created: subject = 'Test2' message = 'Jäsenhakemuksesi on hyväksytty!!!\r\n' - send_mail_wrapper(subject, message, instance.email) + send_email(instance.email, subject, message) except SMTPAuthenticationError: logging.error('Failed to send email to accepted member!') diff --git a/members/views/applications.py b/members/views/applications.py index 104e113..5f4bfd0 100644 --- a/members/views/applications.py +++ b/members/views/applications.py @@ -3,7 +3,6 @@ from django.contrib.auth.decorators import permission_required, login_required from django.views.decorators.http import require_http_methods from django.views.decorators.csrf import ensure_csrf_cookie from django.http import HttpResponse, HttpResponseRedirect -from django.core.mail import send_mail from django.conf import settings from django.utils.translation import ugettext as _ from django.forms.models import model_to_dict diff --git a/members/views/members.py b/members/views/members.py index dbd42dc..7ab784d 100644 --- a/members/views/members.py +++ b/members/views/members.py @@ -4,7 +4,6 @@ from django.utils.decorators import method_decorator from django.views.decorators.http import require_http_methods from django.views.decorators.csrf import ensure_csrf_cookie from django.http import HttpResponse, HttpResponseRedirect, JsonResponse, HttpResponseForbidden -from django.core.mail import send_mail from django.conf import settings from django.utils.translation import ugettext as _ from django.forms.models import model_to_dict diff --git a/members/views/payments.py b/members/views/payments.py index c9a4ab5..47b73eb 100644 --- a/members/views/payments.py +++ b/members/views/payments.py @@ -3,7 +3,6 @@ from django.contrib.auth.decorators import permission_required, login_required from django.views.decorators.http import require_http_methods from django.views.decorators.csrf import ensure_csrf_cookie from django.http import HttpResponse, HttpResponseRedirect -from django.core.mail import send_mail from django.conf import settings from django.utils.translation import ugettext as _ from django.forms.models import model_to_dict diff --git a/members/views/utils.py b/members/views/utils.py index d6c1f8f..d55f5ca 100644 --- a/members/views/utils.py +++ b/members/views/utils.py @@ -3,7 +3,7 @@ from django.contrib.auth.decorators import permission_required, login_required from django.views.decorators.http import require_http_methods from django.views.decorators.csrf import ensure_csrf_cookie from django.http import HttpResponse, HttpResponseRedirect, HttpResponseBadRequest -from django.core.mail import send_mail +from webapp.utils import send_email from django.conf import settings from django.utils.translation import ugettext as _ from django.forms.models import model_to_dict @@ -145,15 +145,6 @@ def import_csv(request, *args, **kwargs): return render(request, 'member_add_many_confirm.html', context) -def send_mail_wrapper(subject, message, email_to): - """Send mail to default email.""" - send_mail(subject, - message, - settings.DEFAULT_EMAIL_FROM, - [email_to], - fail_silently=False) - - def make_excel_response(Resource): res = Resource() dataset = res.export() diff --git a/requirements.txt b/requirements.txt index 9abc3cc..fcd9cb6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -29,7 +29,7 @@ django-auditlog==0.4.5 phonenumbers==8.11.4 django-phonenumber-field[phonenumbers]==4.0.0 django-autocomplete-light==3.4.1 -six==1.11.0 +six==1.12.0 django-suit==0.2.26 telepot==12.3 pyexcel==0.5.14 @@ -40,3 +40,4 @@ django-app-namespace-template-loader==0.4.1 django-filter==2.0.0 whitenoise==4.1.4 jsonschema==3.2.0 +mailjet-rest==1.3.3 diff --git a/sikweb/settings.py b/sikweb/settings.py index e553b25..459a56f 100644 --- a/sikweb/settings.py +++ b/sikweb/settings.py @@ -30,9 +30,10 @@ GOOGLE_RECAPTCHA_SITE_KEY = os.getenv("GOOGLE_RECAPTCHA_SITE_KEY", "YOUR-PUBLIC- GOOGLE_RECAPTCHA_SECRET_KEY = os.getenv("GOOGLE_RECAPTCHA_SECRET_KEY", "YOUR-PRIVATE-KEY") # Email settings (more settings in base.py) -EMAIL_HOST_USER = os.getenv('EMAIL_HOST', 'sikviestinta@gmail.com') -EMAIL_HOST_PASSWORD = os.getenv('EMAIL_PASSWD', '') -DEFAULT_EMAIL_FROM = 'SIK Viestintä ' +EMAIL_API_KEY = os.getenv('EMAIL_API_KEY', '') +EMAIL_API_SECRET = os.getenv('EMAIL_API_SECRET', '') +DEFAULT_EMAIL_FROM = 'SIK' +DEFAULT_EMAIL_FROM_ADDR = 'noreply@sahkoinsinoorikilta.fi' ENABLE_AUTOMATIC_EMAILS = True # Token for Telegram bot diff --git a/stack-compose-dev.yml b/stack-compose-dev.yml index 1cd9da7..0ffffb2 100644 --- a/stack-compose-dev.yml +++ b/stack-compose-dev.yml @@ -29,6 +29,20 @@ services: environment: - HOST=api.dev.sik.party - DEBUG=True + - EMAIL_API_KEY_FILE=/run/secrets/DJANGO_EMAIL_API_KEY + - EMAIL_API_SECRET_FILE=/run/secrets/DJANGO_EMAIL_API_SECRET + - DB_HOST=db + - DB_PORT=5432 + + secrets: + - DJANGO_EMAIL_API_KEY + - DJANGO_EMAIL_API_SECRET + +secrets: + DJANGO_EMAIL_API_KEY: + external: true + DJANGO_EMAIL_API_SECRET: + external: true volumes: dbdata: diff --git a/webapp/utils.py b/webapp/utils.py index 25d6bc0..79e5f01 100644 --- a/webapp/utils.py +++ b/webapp/utils.py @@ -1,13 +1,15 @@ """Webapp utils.""" from django.utils import timezone -from django.core.mail import send_mail +# from django.core.mail import send_mail +import os +from mailjet_rest import Client from datetime import timedelta import logging from django.conf import settings from django.template.loader import render_to_string -from sikweb.settings import URL +from sikweb.settings import URL, EMAIL_API_KEY, EMAIL_API_SECRET, DEFAULT_EMAIL_FROM, DEFAULT_EMAIL_FROM_ADDR def month_from_now(): @@ -17,18 +19,36 @@ def month_from_now(): def send_email(to, subject, body, fail_silently=False): try: - success = send_mail( - subject, - body, - settings.DEFAULT_EMAIL_FROM, - [to], - fail_silently=fail_silently, - ) - if success == 0: - raise Exception('Failed to send email!') + mailjet = Client(auth=(EMAIL_API_KEY, EMAIL_API_SECRET), version='v3.1') + + data = { + 'Messages': [ + { + "From": { + "Email": DEFAULT_EMAIL_FROM_ADDR, + "Name": DEFAULT_EMAIL_FROM + }, + "To": [ + { + "Email": to, + "Name": "You" + } + ], + "Subject": subject, + # "TextPart": "Greetings from Mailjet!", + "HTMLPart": body + } + ] + } + success = mailjet.send.create(data=data) + + if success.status_code != 201: + raise Exception(f'Failed to send email: {success.json()}') except Exception as ex: logging.exception('Failed to send email.') + logging.debug(EMAIL_API_KEY) + logging.debug(EMAIL_API_SECRET) def send_signup_email(to, subject, id, uuid):