Example #1
0
    def send_day_before_reminder(self) -> None:
        if not self.should_send_reminder():
            return

        # guarantee that we never send an email twice
        self.day_before_notification_sent = True
        self.save()

        template_vars = self._common_email_vars()

        text_body = render_to_string('events/email/day_before_reminder.txt',
                                     template_vars)
        html_body = mjml2html(
            render_to_string('events/email/day_before_reminder.mjml',
                             template_vars))

        logger.info(
            f'Sending reminder to {self.user.email} about {self.event.id} ({self.event.title})'
        )
        send_mail(
            subject=f'Напоминание о событии: {self.event.title}',
            from_email='Кочерга <*****@*****.**>',
            message=text_body,
            html_message=html_body,
            recipient_list=[self.user.email],
        )
Example #2
0
    def resolve(self, _, info, input):
        email = input['email']

        try:
            validate_email(email)
        except django.core.exceptions.ValidationError as e:
            return {
                'ok': False,
                'error': '\n'.join(e.messages),
            }

        magic_token = get_magic_token(email)
        params_str = urllib.parse.urlencode({
            'token': magic_token,
            'next': input.get('next', '/')
        })
        magic_link = info.context.build_absolute_uri('/login/magic-link' +
                                                     '?' + params_str)

        html_email_message = mjml2html(
            render_to_string('auth/email/login.mjml',
                             {'magic_link': magic_link}))
        plain_email_message = render_to_string('auth/email/login.txt',
                                               {'magic_link': magic_link})

        send_mail(
            subject='Войти на сайт Кочерги',
            from_email='*****@*****.**',
            html_message=html_email_message,
            message=plain_email_message,
            recipient_list=[email],
        )

        return {'ok': True}
Example #3
0
    def get_mailchimp_content(self, text_before, text_after, image_url):
        events = self.events()

        date2events = {}
        for event in events:
            d = timezone.localtime(event.start).strftime('%Y-%m-%d')
            if d not in date2events:
                date2events[d] = []
            date2events[d].append(event)

        events_by_date = [
            {"date": d, "events": date2events[d]} for d in sorted(date2events.keys())
        ]

        start_month = kocherga.dateutils.inflected_month(self.start)
        end_month = kocherga.dateutils.inflected_month(self.end)

        title_dates = ''
        if start_month == end_month:
            title_dates = f'{self.start.day} – {self.end.day} {start_month}'
        else:
            title_dates = f'{self.start.day} {start_month} – {self.end.day} {end_month}'

        def date2day(d):
            dt = datetime.strptime(d, '%Y-%m-%d')
            weekday = kocherga.dateutils.weekday(dt).capitalize()
            month = kocherga.dateutils.inflected_month(dt)
            return f"{weekday}, {dt.day} {month}"

        mjml = render_to_string(
            'events/email/weekly_digest.mjml',
            {
                'text_before': markdown.markdown(
                    text_before, extensions=['markdown.extensions.nl2br']
                ),
                'text_after': markdown.markdown(
                    text_after, extensions=['markdown.extensions.nl2br']
                ),
                'image_url': image_url,
                'title_dates': title_dates,
                'events_by_date': events_by_date,
                'date2day': date2day,
                'utmify': get_utmify('weekly-digest', 'kocherga-newsletter'),
            },
        )

        html = mjml2html(mjml)

        return {
            'title': f'Расписание мероприятий Кочерги на {title_dates}',
            'html': html,
        }
Example #4
0
def create_any_draft(training,
                     title,
                     main_md,
                     utm_campaign='email',
                     utm_source='email'):
    logger.info('Creating campaign draft')
    campaign = kocherga.mailchimp.api_call(
        'POST',
        'campaigns',
        {
            'type': 'regular',
            'recipients': training_recipients(training),
            'settings': common_settings(title),
        },
    )

    campaign_id = campaign['id']

    logger.info('Generating html content')

    main_html = markdown.markdown(main_md)

    mjml = render_to_string(
        'ratio/email/campaign.mjml',
        {
            'title': title,
            'text': main_html,
            'utmify': get_utmify(utm_campaign,
                                 utm_source),  # TODO - training id
        },
    )

    html = mjml2html(mjml)

    logger.info('Filling campaign content')
    kocherga.mailchimp.api_call('PUT', f'campaigns/{campaign_id}/content',
                                {'html': html})

    return {
        'draft_link': kocherga.mailchimp.campaign_web_link(campaign['web_id']),
    }
Example #5
0
    def send_promocode_email(self, email: str, promocode: Promocode):
        template_name = self.promocode_email
        folder = 'promocode'
        if not template_name:
            raise Exception("email template is not configured")
        check_safe_path(template_name)

        html_message = mjml2html(
            render_to_string(
                f'ratio/email/{folder}/{template_name}.mjml',
                {'code': promocode.code},
            ))
        title = extract_email_title(html_message)

        send_mail(
            subject=title,
            from_email='Кочерга <*****@*****.**>',
            html_message=html_message,
            message=html2text(html_message),
            recipient_list=[email],
        )
Example #6
0
    def send_cancellation_emails(self, notification_message: str):
        start_local = timezone.localtime(self.start)
        template_vars = {
            'event': self,
            'notification_message': notification_message,
            'event_date': f"{start_local.day} {inflected_month(start_local)}",
        }
        message = mjml2html(
            render_to_string('events/email/cancelled.mjml', template_vars))

        for ticket in self.tickets.all():
            logger.info(
                f'Sending cancellation email to {ticket.user.email} about event {self.pk} ({self.title})'
            )
            send_mail(
                subject=f'{self.title}: ОТМЕНА',
                from_email='Кочерга <*****@*****.**>',
                message=html2text(message),
                html_message=message,
                recipient_list=[ticket.user.email],
            )
Example #7
0
    def send_confirmation_email(self,
                                signed_in: Optional[bool] = None) -> None:
        if self.from_timepad:
            return

        template_vars = self._common_email_vars(signed_in=signed_in)

        text_body = render_to_string('events/email/registered.txt',
                                     template_vars)
        html_body = mjml2html(
            render_to_string('events/email/registered.mjml', template_vars))

        logger.info(
            f'Sending confirmation email to {self.user.email} for event {self.event.uuid} ({self.event.title})'
        )
        send_mail(
            subject=f'Регистрация на событие: {self.event.title}',
            from_email='Кочерга <*****@*****.**>',
            message=text_body,
            html_message=html_body,
            recipient_list=[self.user.email],
        )
        logger.info(f'Confirmation email sent to {self.user.email}')
Example #8
0
    def send_notion_created_email(self, ticket):
        template_name = self.notion_created_email
        folder = 'notion_created'
        if not template_name:
            raise Exception("email template is not configured")
        check_safe_path(template_name)

        html_message = mjml2html(
            render_to_string(
                f'ratio/email/{folder}/{template_name}.mjml',
                {
                    "ticket": ticket,
                    "link": ticket.notion_link
                },
            ))
        title = extract_email_title(html_message)

        send_mail(
            subject=title,
            from_email='Кочерга <*****@*****.**>',
            html_message=html_message,
            message=html2text(html_message),
            recipient_list=[ticket.email],
        )