def update_subscription(profile, old_email): """ Update a profile subscription on campaign monitor. If the old email is not on CM this will not subscribe the user to CM. """ if api_key and client_id: user = profile.user for group in profile.get_groups(): for listmap in group.listmap_set.all(): subscriber = Subscriber(auth, listmap.list_id, old_email) try: subscriber.update(user.email, user.get_full_name(), [], False) except BadRequest as e: print(e)
def sync_cm_subscriber(sender, instance=None, created=False, **kwargs): """Subscribe the subscriber to the campaign monitor list Check if sync_newsletters is True. Do nothing if False. """ from django.core.validators import email_re if instance and instance.group and not instance.group.sync_newsletters: return (name, email) = get_name_email(instance) if email and email_re.match(email): add_list = False add_subscriber = True list_map = None # Append custom fields from the profile profile = None if hasattr(instance, 'member'): profile = instance.member.profile custom_data = [] if profile: fields = ['city', 'state', 'zipcode', 'country', 'sex', 'member_number'] for field in fields: data = {} data['Key'] = field data['Value'] = getattr(profile, field) if not data['Value']: data['Clear'] = True custom_data.append(data) try: list_map = ListMap.objects.get(group=instance.group) list_id = list_map.list_id list = List(list_id) if list: # subscriber setup subscriber_obj = Subscriber(list_id) try: list_stats = list.stats() # check if this user has already subscribed, if not, subscribe it try: subscriber = subscriber_obj.get(list_id, email) if str(subscriber.State).lower() == 'active': subscriber = subscriber_obj.update(email, name, custom_data, True) add_subscriber = False except BadRequest as br: pass except Unauthorized as e: list = List() add_list = True except ListMap.DoesNotExist: list = List() add_list = True try: if add_list: # this list might be deleted on campaign monitor, add it back list_id = list.create(cm_client_id, instance.group.name, "", False, "") # custom fields setup setup_custom_fields(list) subscriber_obj = Subscriber(list_id) if not list_map: list_map = ListMap() list_map.group = instance.group list_map.list_id = list_id list_map.save() if add_subscriber: email_address = subscriber_obj.add(list_id, email, name, custom_data, True) except BadRequest as br: pass
def sync_cm_subscriber(sender, instance=None, created=False, **kwargs): """Subscribe the subscriber to the campaign monitor list Check if sync_newsletters is True. Do nothing if False. """ from tendenci.apps.base.utils import validate_email from tendenci.apps.profiles.models import Profile if instance and instance.group and not instance.group.sync_newsletters: return (name, email) = get_name_email(instance) if email and validate_email(email): add_list = False add_subscriber = True list_map = None # Append custom fields from the profile profile = None if hasattr(instance, 'member'): try: profile = instance.member.profile except Profile.DoesNotExist: profile = None custom_data = [] if profile: fields = ['city', 'state', 'zipcode', 'country', 'sex', 'member_number'] for field in fields: data = {} data['Key'] = field data['Value'] = getattr(profile, field) if not data['Value']: data['Clear'] = True custom_data.append(data) try: list_map = ListMap.objects.get(group=instance.group) list_id = list_map.list_id alist = List(auth, list_id) if alist: # subscriber setup subscriber_obj = Subscriber(auth, list_id) try: # check if this user has already subscribed, if not, subscribe it try: subscriber = subscriber_obj.get(list_id, email) if str(subscriber.State).lower() == 'active': subscriber = subscriber_obj.update(email, name, custom_data, True) add_subscriber = False except BadRequest: pass except Unauthorized: alist = List(auth) add_list = True except ServerError: pass except ListMap.DoesNotExist: alist = List(auth) add_list = True try: if add_list: # this list might be deleted on campaign monitor, add it back list_id = alist.create(cm_client_id, instance.group.name, "", False, "") # custom fields setup setup_custom_fields(alist) subscriber_obj = Subscriber(auth, list_id) if not list_map: list_map = ListMap() list_map.group = instance.group list_map.list_id = list_id list_map.save() if add_subscriber: subscriber_obj.add(list_id, email, name, custom_data, True) # Returns email_address except BadRequest: pass
def sync_cm_subscriber(sender, instance=None, created=False, **kwargs): """Subscribe the subscriber to the campaign monitor list """ from django.core.validators import email_re (name, email) = get_name_email(instance) if email and email_re.match(email): add_list = False add_subscriber = True list_map = None # Append custom fields from the profile profile = None if hasattr(instance, 'member'): profile = instance.member.profile custom_data = [] if profile: fields = ['city', 'state', 'zipcode', 'country', 'sex', 'member_number'] for field in fields: data = {} data['Key'] = field data['Value'] = getattr(profile, field) if not data['Value']: data['Clear'] = True custom_data.append(data) try: list_map = ListMap.objects.get(group=instance.group) list_id = list_map.list_id list = List(list_id) if list: # subscriber setup subscriber_obj = Subscriber(list_id) try: list_stats = list.stats() # check if this user has already subscribed, if not, subscribe it try: subscriber = subscriber_obj.get(list_id, email) if str(subscriber.State).lower() == 'active': subscriber = subscriber_obj.update(email, name, custom_data, True) add_subscriber = False except BadRequest as br: pass except Unauthorized as e: list = List() add_list = True except ListMap.DoesNotExist: list = List() add_list = True try: if add_list: # this list might be deleted on campaign monitor, add it back list_id = list.create(cm_client_id, instance.group.name, "", False, "") # custom fields setup setup_custom_fields(list) subscriber_obj = Subscriber(list_id) if not list_map: list_map = ListMap() list_map.group = instance.group list_map.list_id = list_id list_map.save() if add_subscriber: email_address = subscriber_obj.add(list_id, email, name, custom_data, True) except BadRequest as br: pass