Updating email addresses with Mailchimp���s API
I���ve been using Mailchimp for years now to send out a weekly newsletter from The Session. But I never visit the Mailchimp website. Instead, I use the API to create a campaign each week, and then send it out. I also use the API whenever a member of The Session updates their email preferences (or changes their details).
I got an email from Mailchimp that their old API was being deprecated and I���d need to update to their more recent one. The code I was using had been happily running for about seven years, but now I���d have to change it.
Luckily, Drew has written a really handy Mailchimp API wrapper for PHP, the language that The Session���s codebase is in. Thanks, Drew! I downloaded that wrapper and updated my code accordingly.
Everything went pretty smoothly. I was able to create campaigns, send campaigns, add new subscribers, and delete subscribers. But I ran into an issue when I wanted to update someone���s email address (on The Session, you can edit your details at any time, including your email address).
Here���s the set up:
use \DrewM\MailChimp\MailChimp;
$MailChimp = new MailChimp('abc123abc123abc123abc123abc123-us1');
$list_id = 'b1234346';
$subscriber_hash = $MailChimp -> subscriberHash('currentemail@example.com');
$endpoint = 'lists/'.$listID.'/members/'.$subscriber_hash;
Now to update details, according to the API, I can use the patch method on that endpoint:
$MailChimp -> patch($endpoint, [
'email_address' => 'newemail@example.com'
]);
But that doesn���t work. Mailchimp effectively treats email addresses as unique IDs for subscribers. So the only way to change someone���s email address appears to be to delete them, and then subscribe them fresh with the new email address:
$MailChimp -> delete($endpoint);
$newendpoint = 'lists/'.$listID.'/members';
$MailChimp -> post($newendpoint, [
'email_address' => 'newemail@example.com',
'status' => 'subscribed'
]);
That���s somewhat annoying, as the previous version of the API allowed email addresses to be updated, but this workaround isn���t too arduous.
Anyway, I figured it share this just in case it was useful for anyone else migrating to the newer API.
Update: Belay that. Turns out that you can update email addresses, but you have to be sure to include the status value:
$MailChimp -> patch($endpoint, [
'email_address' => 'newemail@example.com',
'status' => 'subscribed'
]);
Okay, that���s a lot more straightforward. Ignore everything I said.
Jeremy Keith's Blog
- Jeremy Keith's profile
- 55 followers
