From 665be60d154ceac533f8a4d79d24f803bce0f092 Mon Sep 17 00:00:00 2001 From: Dmitriy Shesterkin Date: Mon, 26 Jun 2017 22:45:50 +0300 Subject: [PATCH] add mail for registration --- src/commons/utils.py | 4 ++ src/customer/models.py | 2 +- src/customer/tasks.py | 2 +- src/customer/utils.py | 14 ++++--- src/customer/views/profile.py | 37 ++----------------- src/dokumentor/settings/common.py | 7 ++++ src/myauth/emails.py | 37 ++++++++++++++----- src/myauth/views.py | 15 ++++++-- templates/emails/greeting.txt | 13 +++++++ templates/emails/license_activated.txt | 3 +- templates/emails/license_ended.txt | 2 +- templates/emails/license_ends.txt | 2 +- templates/emails/license_to_pay.txt | 1 - templates/emails/registration_email.txt | 4 +- templates/emails/reset_key_email.txt | 4 +- templates/emails/reset_new_password_email.txt | 2 +- 16 files changed, 84 insertions(+), 65 deletions(-) create mode 100644 templates/emails/greeting.txt diff --git a/src/commons/utils.py b/src/commons/utils.py index a1cefbe..a54da69 100644 --- a/src/commons/utils.py +++ b/src/commons/utils.py @@ -21,3 +21,7 @@ def only_numerics(value): Убирает из переданной строки все не цифровые символы. """ return u''.join(c for c in value if c.isdigit()) + + +def get_site_url(request): + return f'{request.scheme}://{request.get_host()}' diff --git a/src/customer/models.py b/src/customer/models.py index d36c8c2..f792a5d 100644 --- a/src/customer/models.py +++ b/src/customer/models.py @@ -588,7 +588,7 @@ class License(models.Model): self.company.active = True self.company.save() self.status = 1 - utils.check_one_profile(self.company, License, datetime.now(), manual=True) + utils.check_one_profile(self.company, datetime.now(), manual=True) super(License, self).save(*args, **kwargs) diff --git a/src/customer/tasks.py b/src/customer/tasks.py index f4b5894..148328e 100644 --- a/src/customer/tasks.py +++ b/src/customer/tasks.py @@ -31,7 +31,7 @@ def check_license(): for profile in profiles: try: - check_one_profile(profile, License, now) + check_one_profile(profile, now) except Exception as e: mail_admins( subject='customer: check_license error', diff --git a/src/customer/utils.py b/src/customer/utils.py index da24e9a..ebcf400 100644 --- a/src/customer/utils.py +++ b/src/customer/utils.py @@ -5,10 +5,11 @@ from django.conf import settings from django.core.mail import EmailMessage from django.template.loader import render_to_string -SUPPORT_EMAIL = getattr(settings, 'SUPPORT_EMAIL') +def check_one_profile(profile, now, manual=False): + + from customer.models import License -def check_one_profile(profile, License, now, manual=False): profile_is_active = profile.active licenses = License.objects.\ filter(company=profile, date_from__lte=now, date_to__gte=now, @@ -27,7 +28,7 @@ def check_one_profile(profile, License, now, manual=False): template_name = 'emails/license_activated.txt' subject = 'Документор: Профиль активирован' dict_context = {'user_email': user_email, - 'support_email': SUPPORT_EMAIL, + 'support_email': settings.SUPPORT_EMAIL, 'license_starts': licenses[0].date_from, 'license_ends': licenses[0].date_to, } @@ -48,7 +49,7 @@ def check_one_profile(profile, License, now, manual=False): template_name = 'emails/license_ended.txt' subject = 'Документор: срок действия лицензии окончен' dict_context = {'user_email': user_email, - 'support_email': SUPPORT_EMAIL, + 'support_email': settings.SUPPORT_EMAIL, 'license_ends': licenses[0].date_to, 'licenses_to_pay': licenses_to_pay, } @@ -63,7 +64,7 @@ def check_one_profile(profile, License, now, manual=False): template_name = 'emails/license_ends.txt' subject = 'Документор: окончание срока действия лицензии' dict_context = {'user_email': user_email, - 'support_email': SUPPORT_EMAIL, + 'support_email': settings.SUPPORT_EMAIL, 'license_ends': licenses[0].date_to, 'licenses_to_pay': licenses_to_pay, } @@ -79,7 +80,8 @@ def check_one_profile(profile, License, now, manual=False): template_name = 'emails/license_to_pay.txt' subject = 'Документор: есть неоплаченные счета' dict_context = {'user_email': user_email, - 'support_email': SUPPORT_EMAIL, + 'support_email': settings.SUPPORT_EMAIL, + } email_body = render_to_string(template_name, dict_context) email = EmailMessage(subject=subject, to=(user_email,), body=email_body) diff --git a/src/customer/views/profile.py b/src/customer/views/profile.py index e28b995..13bb564 100644 --- a/src/customer/views/profile.py +++ b/src/customer/views/profile.py @@ -23,7 +23,6 @@ from django.utils.encoding import smart_str from django.conf import settings from django.http import HttpResponse -# from easy_thumbnails.files import get_thumbnailer from commons.pdf_tools import render_pdf_to_string, pdf_to_response @@ -31,8 +30,6 @@ from customer import models, forms from customer.utils import raise_if_no_profile PDF_PROFILE_NAME = 'Реквизиты.pdf' -SUPPORT_EMAIL = getattr(settings, 'SUPPORT_EMAIL', '') - @login_required @csrf_protect @@ -146,34 +143,6 @@ def profile_edit(request): return render(request, template_name, dictionary) -# def tmp_upload(request): -# key = '' -# SIZES = {'id_boss_sign': (170, 65), -# 'id_glavbuh_sign': (170, 65), -# 'id_stamp': (170, 170), -# 'id_logo': (170, 170)} -# elm_id = request.REQUEST['elm_id'] -# for k in request.FILES.keys(): -# key = k -# file_ = request.FILES.get(key) -# if not file_.content_type.startswith('image'): -# return {'res': 'bad'} -# if not os.path.exists(settings.MEDIA_ROOT + '/cache/imgs/'): -# os.makedirs(settings.MEDIA_ROOT + '/cache/imgs/') -# tmp_dir = tempfile.mkdtemp('img_tmp', settings.MEDIA_ROOT + '/cache/imgs/') -# os.chmod(tmp_dir, 755) -# open(tmp_dir + '/' + file_.name, "wb+").write(file_.read()) -# tmp_url_partial = os.path.basename(tmp_dir) + '/' + file_.name -# thumbnailer = get_thumbnailer(tmp_dir + '/' + file_.name) -# thumbnail_options = {'size': SIZES[elm_id]} -# # Возвращает в url полный путь, поэтому придётся резать -# im = thumbnailer.get_thumbnail(thumbnail_options) -# im_url = os.path.join(settings.MEDIA_URL, os.path.relpath(im.url, settings.MEDIA_ROOT)) -# data = {'res': 'ok', 'pic': im_url, 'full_pic': tmp_url_partial} -# data.update(request.REQUEST) -# return HttpResponse(json.dumps(data), content_type='application/json') - - def save_file(path, file): fs = FileSystemStorage() file_path = fs.save(path, file) @@ -250,7 +219,7 @@ def profile_as_pdf(request, profile=None, account=None, filters=None): def _send_profile_email(subject, to, body, pdf_content): """Отправка письма.""" template_name = 'customer/profile/profile_email.txt' - dict_context = {'body': body, 'support_email': SUPPORT_EMAIL} + dict_context = {'body': body, 'support_email': settings.SUPPORT_EMAIL} email_body = render_to_string(template_name, dict_context) email = EmailMessage( subject=subject, @@ -288,7 +257,7 @@ def profile_email(request): form = form_class(data=request.POST) if form.is_valid(): _send_profile_email( - subject='Реквизиты %s' % profile.get_company_name(), + subject=f'Реквизиты {profile.get_company_name()}', to=form.cleaned_data['to'], body=form.cleaned_data['body'], pdf_content=_profile_get_pdf(request, profile, filters.bank_account, filters) @@ -297,4 +266,4 @@ def profile_email(request): else: form = form_class() - return render(request, template_name, {'form': form, 'profile': profile, }) + return render(request, template_name, {'form': form, 'profile': profile}) diff --git a/src/dokumentor/settings/common.py b/src/dokumentor/settings/common.py index b116165..9a8d26a 100644 --- a/src/dokumentor/settings/common.py +++ b/src/dokumentor/settings/common.py @@ -217,6 +217,9 @@ LOGGING = { SERVER_EMAIL = 'dokumentor@localhost' EMAIL_SUBJECT_PREFIX = '[DOKUMENTOR.RU] ' +# for template emails in mailing +EMAIL_ROBOT = e.get('DJANGO_EMAIL_USER') + REGISTRATION_OPEN = True LOGIN_URL = '/user/login/' @@ -266,6 +269,10 @@ CELERYBEAT_SCHEDULE = { 'task': 'src.customer.tasks.check_license', 'schedule': timedelta(days=1), }, + 'not_activated_users': { + 'task': 'src.customer.tasks.delete_not_activated_users', + 'schedule': timedelta(days=1), + }, } CAPTCHA_OUTPUT_FORMAT = \ diff --git a/src/myauth/emails.py b/src/myauth/emails.py index 484738d..86884ad 100644 --- a/src/myauth/emails.py +++ b/src/myauth/emails.py @@ -5,18 +5,35 @@ from django.conf import settings from celery import task -SUPPORT_EMAIL = getattr(settings, 'SUPPORT_EMAIL', '') - - @task -def send_registration_email(user_email, confirm_url): +def send_registration_email(user_email, confirm_url, site_url): """Отправить письмо о регистрации нового пользователя.""" template_name = 'emails/registration_email.txt' subject = 'Регистрация на Документоре: подтверждение e-mail' dict_context = { 'user_email': user_email, 'confirm_url': confirm_url, - 'support_email': SUPPORT_EMAIL + 'support_email': settings.SUPPORT_EMAIL, + 'site_url': site_url + } + email_body = render_to_string(template_name, dict_context) + email = EmailMessage(subject=subject, to=(user_email,), body=email_body) + return email.send() + + +@task +def send_greeting_email(user_email, site_url): + """ + A greeting letter after signing up a new user on the create test licenses + """ + template_name = 'emails/greeting.txt' + subject = 'Документор: Добро пожаловать!' + + dict_context = { + 'user_email': user_email, + 'support_email': settings.SUPPORT_EMAIL, + 'robot_email': settings.EMAIL_ROBOT, + 'site_url': site_url } email_body = render_to_string(template_name, dict_context) email = EmailMessage(subject=subject, to=(user_email,), body=email_body) @@ -24,14 +41,15 @@ def send_registration_email(user_email, confirm_url): @task -def send_reset_password_email(user_email, confirm_url): +def send_reset_password_email(user_email, confirm_url, site_url): """Отправить письмо с ключём для восстановления пароля.""" template_name = 'emails/reset_key_email.txt' subject = 'Документор: восстановление пароля' dict_context = { 'user_email': user_email, 'confirm_url': confirm_url, - 'support_email': SUPPORT_EMAIL + 'support_email': settings.SUPPORT_EMAIL, + 'site_url': site_url } email_body = render_to_string(template_name, dict_context) email = EmailMessage(subject=subject, to=(user_email,), body=email_body) @@ -39,14 +57,15 @@ def send_reset_password_email(user_email, confirm_url): @task -def send_new_password_email(user_email, new_password): +def send_new_password_email(user_email, new_password, site_url): """Отправить письмо с новым паролем.""" template_name = 'emails/reset_new_password_email.txt' subject = 'Документор: новый пароль' dict_context = { 'user_email': user_email, 'new_password': new_password, - 'support_email': SUPPORT_EMAIL + 'support_email': settings.SUPPORT_EMAIL, + 'site_url': site_url } email_body = render_to_string(template_name, dict_context) email = EmailMessage(subject=subject, to=(user_email,), body=email_body) diff --git a/src/myauth/views.py b/src/myauth/views.py index 6118762..dc3b8c0 100644 --- a/src/myauth/views.py +++ b/src/myauth/views.py @@ -14,6 +14,7 @@ from django.contrib import messages from django.conf import settings from django.contrib.auth.views import logout as django_logout +from commons.utils import get_site_url from customer.models import UserProfile, UserProfileFilters, License from myauth import forms, models, emails @@ -76,7 +77,11 @@ def register(request): if form.is_valid(): new_user = _create_user(request, **form.cleaned_data) confirm_url = reverse('myauth_confirm_email', args=[new_user.username]) - emails.send_registration_email.delay(new_user.email, confirm_url) + emails.send_registration_email.delay( + new_user.email, + confirm_url, + get_site_url(request) + ) messages.add_message(request, messages.INFO, success_msg) return redirect(success_url) else: @@ -89,7 +94,7 @@ def register(request): def confirm_registered_email(request, key): """Подтверждение зарегистрированного email.""" success_url = 'customer_profile_edit' - success_msg = u'Ваш e-mail подтверждён. Спасибо за регистрацию.' + success_msg = 'Ваш e-mail подтверждён. Спасибо за регистрацию.' # ключ = имя пользователя user = get_object_or_404(models.DokUser, username__iexact=key) models.ConfirmEmail.objects.confirm(user) @@ -108,6 +113,8 @@ def confirm_registered_email(request, key): user.profile.confirmed = True user.profile.active = True user.profile.save() + emails.send_greeting_email.delay(user.email, get_site_url(request)) + auth.logout(request) return redirect(success_url) @@ -129,7 +136,7 @@ def reset(request): user = form.get_user() key = models.ResetKey.objects.create_key(user) confirm_url = reverse('myauth_confirm_reset', args=[key.key, ]) - emails.send_reset_password_email.delay(user.email, confirm_url) + emails.send_reset_password_email.delay(user.email, confirm_url, get_site_url(request)) return redirect(success_url) else: form = form_class(prefix=form_prefix) @@ -151,7 +158,7 @@ def confirm_reset(request, key): new_password = models.DokUser.objects.make_random_password() key.user.set_password(new_password) key.user.save() - emails.send_new_password_email.delay(key.user.email, new_password) + emails.send_new_password_email.delay(key.user.email, new_password, get_site_url(request)) # удалить ключ восстановления пароля key.delete() messages.add_message(request, messages.INFO, success_msg) diff --git a/templates/emails/greeting.txt b/templates/emails/greeting.txt new file mode 100644 index 0000000..37eccc9 --- /dev/null +++ b/templates/emails/greeting.txt @@ -0,0 +1,13 @@ +Здравствуйте! + +Вас приветствует почтовый робот сайта Документор. + +Спасибо Вам за регистрацию! + +Для вас создана бесплатная лицензия на 45 дней, чтобы вы могли попробовать, насколько удобной бывает работа с документами. +С адреса {{ robot_email }} Вам будут приходить созданные Вами документы и служебные уведомления. Пожалуйста, добавьте его в список своих контактов, чтобы не пропустить ничего важного. +По всем вопросам можно писать на почту {{ support_email }} или в форму "обратная связь", расположенную внизу всех страниц сайте Документор ({{ site_url|default:'https://dokumentor.ru' }}). + +--- + +Это письмо отправлено роботом. Пожалуйста не отвечайте на него. По всем вопросам пишите на {{ support_email }} diff --git a/templates/emails/license_activated.txt b/templates/emails/license_activated.txt index 59b568c..d8c3a5c 100644 --- a/templates/emails/license_activated.txt +++ b/templates/emails/license_activated.txt @@ -1,7 +1,6 @@ Здравствуйте! - -Ваш профиль на сайте Документор (http://www.dokumentor.ru) был активирован. +Ваш профиль на сайте Документор ({{ site_url|default:'https://dokumentor.ru' }}) был активирован. Срок действия лицензии с {{ license_starts }} по {{ license_ends }}. Это письмо написано роботом. Отвечать на него не нужно. diff --git a/templates/emails/license_ended.txt b/templates/emails/license_ended.txt index 4f916b6..8efdb58 100644 --- a/templates/emails/license_ended.txt +++ b/templates/emails/license_ended.txt @@ -1,6 +1,6 @@ Здравствуйте! -Закончилось действие вашего аккаунта на сайте Документор (http://www.dokumentor.ru). Вы не сможете создавать новые документы. {% if licenses_to_pay %}У Вас есть неоплаченные счета, которые можно оплатить, чтобы продлить действие услуги.{% else %}Чтобы продлить действие услуги, войдите в свой профиль и приобретите лицензию на дальнейшее пользование сайтом.{% endif %} +Закончилось действие вашего аккаунта на сайте Документор ({{ site_url|default:'https://dokumentor.ru' }}). Вы не сможете создавать новые документы. {% if licenses_to_pay %}У Вас есть неоплаченные счета, которые можно оплатить, чтобы продлить действие услуги.{% else %}Чтобы продлить действие услуги, войдите в свой профиль и приобретите лицензию на дальнейшее пользование сайтом.{% endif %} Это письмо написано роботом. Отвечать на него не нужно. diff --git a/templates/emails/license_ends.txt b/templates/emails/license_ends.txt index 9fb20e3..4353b51 100644 --- a/templates/emails/license_ends.txt +++ b/templates/emails/license_ends.txt @@ -1,6 +1,6 @@ Здравствуйте! -Через 1 день заканчивается действие вашего аккаунта на сайте Документор (http://www.dokumentor.ru). Вы не сможете создавать новые документы. {% if licenses_to_pay %}У Вас есть неоплаченные счета, которые можно оплатить, чтобы продлить действие услуги.{% else %}Чтобы продлить действие услуги, войдите в свой профиль и приобретите лицензию на дальнейшее пользование сайтом.{% endif %} +Через 1 день заканчивается действие вашего аккаунта на сайте Документор ({{ site_url|default:'https://dokumentor.ru' }}). Вы не сможете создавать новые документы. {% if licenses_to_pay %}У Вас есть неоплаченные счета, которые можно оплатить, чтобы продлить действие услуги.{% else %}Чтобы продлить действие услуги, войдите в свой профиль и приобретите лицензию на дальнейшее пользование сайтом.{% endif %} Это письмо написано роботом. Отвечать на него не нужно. diff --git a/templates/emails/license_to_pay.txt b/templates/emails/license_to_pay.txt index 73ccda5..b4c009f 100644 --- a/templates/emails/license_to_pay.txt +++ b/templates/emails/license_to_pay.txt @@ -4,5 +4,4 @@ Это письмо написано роботом. Отвечать на него не нужно. - Связаться со службой поддержки сайта Документор Вы можете по адресу {{ support_email }} diff --git a/templates/emails/registration_email.txt b/templates/emails/registration_email.txt index ffa5fb7..bb16d04 100644 --- a/templates/emails/registration_email.txt +++ b/templates/emails/registration_email.txt @@ -1,10 +1,10 @@ Здравствуйте! -Данный адрес {{ user_email }} был использован для регистрации на сайте Документор (http://www.dokumentor.ru). +Данный адрес {{ user_email }} был использован для регистрации на сайте Документор ({{ site_url|default:'https://dokumentor.ru' }}). Если Вы этого не делали, просто УДАЛИТЕ это письмо. -Для подтверждения адреса нажмите ссылку: http://www.dokumentor.ru{{ confirm_url }} или скопируйте ее в окно браузера. +Для подтверждения адреса нажмите ссылку: {{ site_url|default:'https://dokumentor.ru' }}{{ confirm_url }} или скопируйте ее в окно браузера. Это письмо написано роботом. Отвечать на него не нужно. diff --git a/templates/emails/reset_key_email.txt b/templates/emails/reset_key_email.txt index a427c13..dfbc17c 100644 --- a/templates/emails/reset_key_email.txt +++ b/templates/emails/reset_key_email.txt @@ -1,10 +1,10 @@ Здравствуйте! -Было запрошено (возможно, вами) восстановление пароля для адреса {{ user_email }} на сайте Документор (http://www.dokumentor.ru). +Было запрошено (возможно, вами) восстановление пароля для адреса {{ user_email }} на сайте Документор ({{ site_url|default:'https://dokumentor.ru' }}). Если Вы этого не делали, просто УДАЛИТЕ это письмо. -Для подтверждения запроса и получения нового пароля нажмите ссылку: http://www.dokumentor.ru{{ confirm_url }} или скопируйте ее в окно браузера. +Для подтверждения запроса и получения нового пароля нажмите ссылку: {{ site_url|default:'https://dokumentor.ru' }}{{ confirm_url }} или скопируйте ее в окно браузера. Это письмо написано роботом. Отвечать на него не нужно. diff --git a/templates/emails/reset_new_password_email.txt b/templates/emails/reset_new_password_email.txt index 4e53492..afd96fd 100644 --- a/templates/emails/reset_new_password_email.txt +++ b/templates/emails/reset_new_password_email.txt @@ -1,6 +1,6 @@ Здравствуйте! -Был установлен новый пароль для адреса {{ user_email }} на сайте Документор (http://www.dokumentor.ru). +Был установлен новый пароль для адреса {{ user_email }} на сайте Документор ({{ site_url|default:'https://dokumentor.ru' }}). Пароль: {{ new_password }}