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