add mail for registration

prod
Dmitriy Shesterkin 9 years ago
parent 877ab9b8bf
commit 665be60d15
  1. 4
      src/commons/utils.py
  2. 2
      src/customer/models.py
  3. 2
      src/customer/tasks.py
  4. 14
      src/customer/utils.py
  5. 37
      src/customer/views/profile.py
  6. 7
      src/dokumentor/settings/common.py
  7. 37
      src/myauth/emails.py
  8. 15
      src/myauth/views.py
  9. 13
      templates/emails/greeting.txt
  10. 3
      templates/emails/license_activated.txt
  11. 2
      templates/emails/license_ended.txt
  12. 2
      templates/emails/license_ends.txt
  13. 1
      templates/emails/license_to_pay.txt
  14. 4
      templates/emails/registration_email.txt
  15. 4
      templates/emails/reset_key_email.txt
  16. 2
      templates/emails/reset_new_password_email.txt

@ -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()}'

@ -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)

@ -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',

@ -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)

@ -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})

@ -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 = \

@ -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)

@ -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)

@ -0,0 +1,13 @@
Здравствуйте!
Вас приветствует почтовый робот сайта Документор.
Спасибо Вам за регистрацию!
Для вас создана бесплатная лицензия на 45 дней, чтобы вы могли попробовать, насколько удобной бывает работа с документами.
С адреса {{ robot_email }} Вам будут приходить созданные Вами документы и служебные уведомления. Пожалуйста, добавьте его в список своих контактов, чтобы не пропустить ничего важного.
По всем вопросам можно писать на почту {{ support_email }} или в форму "обратная связь", расположенную внизу всех страниц сайте Документор ({{ site_url|default:'https://dokumentor.ru' }}).
---
Это письмо отправлено роботом. Пожалуйста не отвечайте на него. По всем вопросам пишите на {{ support_email }}

@ -1,7 +1,6 @@
Здравствуйте!
Ваш профиль на сайте Документор (http://www.dokumentor.ru) был активирован.
Ваш профиль на сайте Документор ({{ site_url|default:'https://dokumentor.ru' }}) был активирован.
Срок действия лицензии с {{ license_starts }} по {{ license_ends }}.
Это письмо написано роботом. Отвечать на него не нужно.

@ -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 %}
Это письмо написано роботом. Отвечать на него не нужно.

@ -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 %}
Это письмо написано роботом. Отвечать на него не нужно.

@ -4,5 +4,4 @@
Это письмо написано роботом. Отвечать на него не нужно.
Связаться со службой поддержки сайта Документор Вы можете по адресу {{ support_email }}

@ -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 }} или скопируйте ее в окно браузера.
Это письмо написано роботом. Отвечать на него не нужно.

@ -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 }} или скопируйте ее в окно браузера.
Это письмо написано роботом. Отвечать на него не нужно.

@ -1,6 +1,6 @@
Здравствуйте!
Был установлен новый пароль для адреса {{ user_email }} на сайте Документор (http://www.dokumentor.ru).
Был установлен новый пароль для адреса {{ user_email }} на сайте Документор ({{ site_url|default:'https://dokumentor.ru' }}).
Пароль: {{ new_password }}

Loading…
Cancel
Save