Example #1
0
    def handle(self, *args, **options):
        limit = options.get("limit")
        frequency = options.get("frequency")

        contributors = Contributor.objects.filter(status=Contributor.ACTIVE, frequency=frequency).exclude(name=settings.ANONYMOUS_USER_NAME).order_by('-enquiry')[:limit]
        messages = []
        plaintext = get_template('email/newsletter.txt')
        html = get_template('email/newsletter.html')
        subject = _('Hello from Feowl')
        connection = get_connection()
        connection.open()
        for i, user in enumerate(contributors):
                if user.channel == EMAIL and is_valid_email(user.email):
                    d = Context({'name': user.name, 'newsletter_language': user.language})
                    text_content = plaintext.render(d)
                    html_content = html.render(d)
                    msg = EmailMultiAlternatives(subject, text_content, settings.NEWSLETTER_FROM, [user.email], connection=connection)
                    msg.attach_alternative(html_content, "text/html")
                    messages.append(msg)
                    logger.info("Poll Email sent to {0}".format(user.email))

                else:
                    if user.channel == SMS:
                        d = Context({'name': user.name, 'newsletter_language': user.language})
                        msg = get_template('sms.txt')
                        content = msg.render(d)
                        try:
                            mobile = Device.objects.get(contributor=user)
                            send_sms(mobile.phone_number, content)
                            logger.info("Poll SMS sent to {0}".format(mobile.phone_number))
                        except:
                            logger.error("Impossible to send an SMS")

                # Update the list of targeted users
                user.enquiry = datetime.today().date()
                user.total_enquiry += 1
                user.save()

        connection.send_messages(messages)
        connection.close()
        logger.info("Poll of {0} sent".format(datetime.today().date()))