def handle(self, *args, **options):
        # look for emailing to be sent
        self.verbosity = int(options.get("verbosity", 1))

        # if len(args)>0:
        #     dests = args[0].split(";")
        # else:
        #     print 'usage: python manage.py post_newsletter [email protected];[email protected]'

        dests = []
        tags = []

        translation.activate(settings.LANGUAGE_CODE)

        # METHODE LIGNE DE COMMANDE AVEC FICHIER TEXTE

        if options["filename"] and options["newsletter"]:
            if not os.path.isfile(options["filename"]):
                raise CommandError("File does not exist at the specified path.")

            news = Newsletter.objects.get(id=options["newsletter"])

            try:

                in_file = open(options["filename"], "r")
                tags.append(options["filename"])
                for mail in in_file.readlines():
                    dests.append({"email": mail.rstrip("\n"), "name": None, "uuid": None})

                nb_sent = send_newsletter(news, dests, tags)
                if self.verbosity >= 1:
                    print nb_sent, "emails sent"

            finally:
                in_file.close()

        # METHODE NORMALE (DEPUIS ADMIN MAILING)

        elif options["newsletter"]:

            news = Newsletter.objects.get(id=options["newsletter"])

            for ml in news.lists.all():
                tags.append(ml.name)
                for dest in ml.dest_dicts():
                    dests.append(dest)

            if self.verbosity >= 1:
                print u"send_newsletter %d to %d addresses" % (news.id, len(dests))
                if self.verbosity >= 3:
                    for d in dests:
                        print "email : %s" % d["email"]
                nb_sent = send_newsletter(news, dests, tags, self.verbosity)
                if self.verbosity >= 1:
                    print nb_sent, "emails sent"

        else:

            print "usage: python manage.py post_newsletter --news=15 --file=adresses.txt"
Exemple #2
0
def test_newsletter(request, newsletter_id):
    newsletter = get_object_or_404(Newsletter, id=newsletter_id)

    if not request.user.has_perm('can_edit_newsletter', newsletter):
        raise PermissionDenied

    dests = settings.COOP_CMS_TEST_EMAILS

    if request.method == "POST":
        try:
            nb_sent = send_newsletter(newsletter, dests)

            messages.success(request,
                _(u"The test email has been sent to {0} addresses: {1}").format(nb_sent, u', '.join(dests)))
            return HttpResponseRedirect(newsletter.get_edit_url())
        except Exception, msg:
            messages.error(request, _(u"An error has occured.") + u'<br>' + unicode(msg))
            logger = getLogger('django.request')
            logger.error('Internal Server Error: %s' % request.path,
                exc_info=sys.exc_info,
                extra={
                    'status_code': 500,
                    'request': request
                }
            )
            return HttpResponseRedirect(newsletter.get_edit_url())
    def handle(self, *args, **options):
        #look for emailing to be sent
        self.verbosity = int(options.get('verbosity', 1))
        # if len(args)>0:
        #     dests = args[0].split(";")
        # else:
        #     print 'usage: python manage.py send_newsletter [email protected];[email protected]'

        sendings = NewsletterSending.objects.filter(scheduling_dt__lte=datetime.now(), sending_dt=None)
        for sending in sendings:
            dests = map(lambda x: x.email, sending.newsletter.lists.all())
            if self.verbosity >= 2:
                print 'send_newsletter {1} to {0} addresses'.format(len(dests), sending.newsletter)
            if self.verbosity >= 3:
                for d in dests:
                    print 'address %s' % d

            nb_sent = send_newsletter(sending.newsletter, dests)
            if self.verbosity >= 2:
                print nb_sent, "emails sent"

            sending.sending_dt = datetime.now()
            sending.save()