Переподписать пользователя в список MailChimp после отписки

Мой сайт позволяет пользователям подписываться на списки MailChimp с помощью API через модуль Drupal MailChimp. Но если пользователь отписывается, перейдя по ссылке в электронном письме, и впоследствии решает повторно подписаться, посетив мой веб-сайт и установив флажок "подписаться", MailChimp отвечает:

xxx@xxx.xxx находится в состоянии соответствия из-за отказа от подписки, отказа или проверки соответствия и не может быть подписан.

Какое решение предполагает, что пользователь действительно хочет повторно подписаться?

4 ответа

Установите статус участника в pending, Это должно повторно отправить электронное письмо с подпиской.

Если нам нужно повторно подписаться на электронную почту, которая была отписана,

Нам нужно сделать колл-опцион с одной из следующих опций:

  1. {"status" : "subscribed"}Перепишу письмо
  2. {"status" : "pending"}Отправит подтверждение по электронной почте для повторной подписки.

Конечная точка API должна состоять из хеша типа md5 (/lists/list_id/members/md5hash)

Один из вариантов — использовать API: сначала установите для них статус ожидания, а затем — подписку. При установке пользователя в режим ожидания, очевидно, будет отправлено электронное письмо с подтверждением, но вы можете обеспечить подтверждение, установив его как подписавшегося.

Ниже я включил скрипт Python для повторной подписки на список электронных писем.

      import hashlib
import requests
import time

# Replace these with your API key and List ID
API_KEY = 'cc2355555555555555555555555555-us1'
LIST_ID = 'c555555555'

# Replace this with your datacenter, e.g. 'us6'
DATACENTER = 'us1'

# List of email addresses to resubscribe
email_addresses = ['email@address.com','email2@address.com']

# Get the total number of email addresses
total_addresses = len(email_addresses)

# Loop through email addresses
for index, email in enumerate(email_addresses):
    # Create md5 hash of the lowercase email address
    email_hash = hashlib.md5(email.lower().encode()).hexdigest()

    # API URL to update the member
    url = f'https://{DATACENTER}.api.mailchimp.com/3.0/lists/{LIST_ID}/members/{email_hash}'

    # Data to update (set status to 'pending' to send opt-in confirmation email)
    data_pending = {
        'status': 'pending',
        'email_address': email
    }

    # Make a PUT request to update the member to pending
    response = requests.put(url, json=data_pending, auth=('anystring', API_KEY))
    
    # Print the response
    print(f'Response for {email} (pending): {response.status_code} - {response.text}')

    # Optional: Wait for a few seconds before updating the status to subscribed
    time.sleep(5)

    # Data to update (set status to 'subscribed')
    data_subscribed = {
        'status': 'subscribed',
        'email_address': email
    }

    # Make a PUT request to update the member to subscribed
    response = requests.put(url, json=data_subscribed, auth=('anystring', API_KEY))

    # Print the response
    print(f'Response for {email} (subscribed): {response.status_code} - {response.text}')

    # Calculate and print the progress percentage
    progress_percentage = (index + 1) / total_addresses * 100
    print(f'Progress: {progress_percentage:.2f}%')

Сначала получите статус из ответа, если он отписался, обновите список. Это поможет;)

      const mailchimp = require("@mailchimp/mailchimp_marketing");
const md5 = require("md5");

router.post("/newsletter-subscribe", asyncWrapper(async (req, res) => {

mailchimp.setConfig({
apiKey: "e4ef******62c481-us17",
server: "us17",
});

const subscriber_hash = md5(email.toLowerCase());
const list_id = '44b****47';
let response = await mailchimp.lists.setListMember(
  list_id,
  subscriber_hash,
  {
    email_address: email,
    status_if_new: 'subscribed',
  }
);
if(response.status=='unsubscribed'){
    response = await mailchimp.lists.updateListMember(
        list_id,
        subscriber_hash,
        {status: 'subscribed'}
      );
}
 return res.json({'subscribed': response.status});


}));
Другие вопросы по тегам