Exemplo n.º 1
0
    def send(self):
        if getattr(settings, 'DRIP_USE_CREATESEND', False):

            template_name = self.drip_model.template_name
            segment_name = 'Drip Segment %s' % self.drip_model.name.replace("'",'').replace('"','')
            from createsend import Campaign, Segment,  CreateSend, BadRequest, Client

            CreateSend.api_key = settings.CREATESEND_API

            client = Client(settings.CREATESEND_CLIENT_ID)

            template_id = None
            for template in client.templates():
                if template.Name == template_name:
                    template_id = template.TemplateID

            if template_id is None:
                raise Exception("Template with the name '%s' does not exist" % template_name)

            segment_id = None
            for segment in client.segments():
                if segment.Title == segment_name and segment.ListID == settings.CREATESEND_LIST_ID:
                    segment_id = segment.SegmentID

            rules = []
            count = 0

            qs = self.get_queryset()
            clauses = []

            for user in qs:
                clauses.append("EQUALS %s" % user.email)
                count += 1
            rules = [{
                    
                    'Subject' : 'EmailAddress',
                    'Clauses' : clauses,
                    }]


            if count:
                if segment_id is not None:
                    segment = Segment(segment_id)
                    segment.clear_rules()
                    segment.update(segment_name, rules)
                else:
                    segment_id = Segment().create(settings.CREATESEND_LIST_ID, segment_name, rules)
                    segment = Segment(segment_id)

                subject = Template(self.subject_template).render(Context())
                body = Template(self.body_template).render(Context())
                name    = 'Drip Campaign %s %s' % (self.drip_model.name, datetime.now().isoformat())

                from_address = getattr(settings, 'DRIP_FROM_EMAIL', settings.EMAIL_HOST_USER)

                template_content = {
                    "Multilines" : [{
                        'Content': body,
                        },],
                    }


                campaign_id = Campaign().create_from_template(settings.CREATESEND_CLIENT_ID, 
                                                              subject, 
                                                              name, 
                                                              from_address, 
                                                              from_address, 
                                                              from_address, 
                                                              [], 
                                                              [segment.details().SegmentID], 
                                                              template_id, 
                                                              template_content,
                                                              )
                campaign = Campaign(campaign_id)
                failed = False
                try:
                    campaign.send(settings.CREATESEND_CONFIRMATION_EMAIL)
                except BadRequest as br:
                    print "ERROR: Could not send Drip %s: %s" % (self.drip_model.name, br)
                    failed = True
                
                if not failed:
                    for user in qs:
                        sd = SentDrip.objects.create(
                            drip=self.drip_model,
                            user=user,
                            subject=subject,
                            body=body
                            )

            return count

            

        else:
            """
            Send the email to each user on the queryset.

            Add that user to the SentDrip.

            Returns a list of created SentDrips.
            """

            count = 0
            for user in self.get_queryset():
                msg = self.build_email(user, send=True)
                count += 1

            return count