Переподписать пользователя в список MailChimp после отписки
Мой сайт позволяет пользователям подписываться на списки MailChimp с помощью API через модуль Drupal MailChimp. Но если пользователь отписывается, перейдя по ссылке в электронном письме, и впоследствии решает повторно подписаться, посетив мой веб-сайт и установив флажок "подписаться", MailChimp отвечает:
xxx@xxx.xxx находится в состоянии соответствия из-за отказа от подписки, отказа или проверки соответствия и не может быть подписан.
Какое решение предполагает, что пользователь действительно хочет повторно подписаться?
4 ответа
Установите статус участника в pending
, Это должно повторно отправить электронное письмо с подпиской.
Если нам нужно повторно подписаться на электронную почту, которая была отписана,
Нам нужно сделать колл-опцион с одной из следующих опций:
{"status" : "subscribed"}
Перепишу письмо{"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});
}));