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.

 •  0 comments  •  flag
Share on Twitter
Published on March 09, 2019 08:15
No comments have been added yet.


Jeremy Keith's Blog

Jeremy Keith
Jeremy Keith isn't a Goodreads Author (yet), but they do have a blog, so here are some recent posts imported from their feed.
Follow Jeremy Keith's blog with rss.