Envoyer la newsletter de Mailchimp à la liste via PHP
y a-t-il un moyen d'envoyer un courriel HTML et CSS auto-conçu à une liste Mailchimp à partir d'un .page php? Je veux intégrer une fonction de newsletter à un panel d'administrateurs avec mon propre modèle de newsletter et l'Envoyer à partir de là.
Je ne veux pas avoir à me connecter à Mailchimp chaque fois que je veux envoyer un e-mail, d'autant plus que le modèle sera le même à chaque fois.
depuis ma première prime sur cette question je n'ai pas eu ce que je voulait besoin, je suis en plaçant une autre prime. J'espère vraiment que cette fois quelqu'un a une bonne réponse. Merci
5 réponses
si vous ne voulez pas télécharger votre modèle sur Mailchimp et envoyer une campagne en tapant leur API, Mandrill (comme @Whymarrh mentionné ci-dessus dans les commentaires) peut être une bonne option.
bien qu'il soit destiné aux e-mails transactionnels (welcome, password recovery, etc), Vous pouvez envoyer jusqu'à 1000 utilisateurs à la fois via SMTP. De plus, vous pouvez connecter votre compte Mailchimp à votre Mandrill one dans la section intégrations pour suivre l'activité du destinataire.
ma suggestion serait installez le client de L'API de Mandrill PHP, téléchargez votre modèle sur Mandrill, appuyez sur L'API Mailchimp pour votre liste d'utilisateurs, et puis insérez-le dans un Mandrill envoyez-modèle de call que vous déclenchez à travers votre panneau d'administration. (Pro tip sur l'envoi de courriels de masse: Mandrill envoyer à plusieurs personnes en tant que distincte de message via l'API REST).
Oui, vous le pouvez. Les détails et les exemples de MailChimp sont disponibles en se connectant à leur panneau de contrôle. Utilisez leurs champs de forme, le style de votre propre forme.
<form action='http://xxxx.xxxxlist-manage.com/subscribe' method='post'>
<p><input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL" placeholder="enter email address"></p>
<p><input type="submit" value="Sign Up" name="subscribe" id="mc-embedded-subscribe" class="btn"></p>
<input type='hidden' name='u' value='xxxxxxx'>
<input type='hidden' name='id' value='xxxxxxx'>
</form>
v2.0 (obsolète) de L'API MailChimp a Création De Campagne et Campagne Envoyer méthodes. Ce ne sont pas les plus simple des méthodes à utiliser, mais l'API actuelle (v3.0) ne les ai pas encore, donc c'est votre meilleure option.
Vous êtes en question est divisé en deux blocs:
- Comment puis-je obtenir ma liste d'e-mails de MailChimp?
- Comment puis-je envoyer des e-mails à des adresses email arbitraires?
Le premier morceau est le plus important ici. Le deuxième morceau a un ton de réponses possibles et devrait être assez facile à réaliser.
Obtenir la liste de MailChimp
MailChimp fournit une API qui est critique. Ils travaillent actuellement sur v3.0, mais v2.0 est toujours marqué comme "courant", donc nous allons compter sur cette version de L'API. Pour utiliser L'API,MailChimp recommande quelques paquets tiers. Pour cet exemple, j'utilise mailchimp-api qui peut être installé en utilisant composer:
$ composer require drewm/mailchimp-api
Pour vous authentifier à MailChimp, vous aurez besoin d'un touche API. MailChimp fournit des instructions pour obtenir la clé API, mais la version courte est:
cliquez sur le nom de votre profil pour élargir le panneau du compte, et choisissez Compte.
cliquez sur le menu déroulant Extras et choisissez les clés API.
copier une clé API existante ou cliquer sur le bouton Créer une clé.
nommer votre clé descriptivement, de sorte que vous savez ce que l'application utilise que clé.
Ensuite, vous avez besoin de votre id de la liste pour la liste que vous souhaitez extraire des e-mails. Encore une fois, MailChimp fournit la meilleure documentation pour cela. Mon id de liste était une chaîne de 10 caractères contenant à la fois des lettres et des chiffres.
enfin, on obtient L'écriture du PHP:
$apiKey = /*Your API key*/;
$listId = /*Your List ID*/;
$MailChimp = new \Drewm\MailChimp($apiKey);
$args = array(
'id' => $listId,
);
$result = $MailChimp->call('lists/members', $args);
//Check for any errors first, if none have occured, build the email list.
if(isset($result['status']) && $result['status'] == 'error'){
throw new Exception('call to Mailchimp API has failed.');
} else {
$emails = array();
//Build an array of emails for users that are currently subscribed.
foreach($result['data'] as $recipient){
if($recipient['status'] == 'subscribed' && !empty($recipient['email'])){
$emails[] = $recipient['email'];
}
}
}
$MailChimp->call('lists/members', $args)
renvoie une réponse JSON très forte avec beaucoup des informations intéressantes. Si vous avez été stocker des informations personnalisées via les paramètres de fusion dans MailChimp ils seront disponibles dans cette réponse JSON. Cependant, pour garder cet exemple aussi simple que possible, je n'ai vérifié que si un utilisateur est abonné et stocké leur adresse e-mail.
À la fin de ce bloc, $emails
maintenant, enregistrez toutes les adresses e-mail de votre liste. Puisque cela appelle l'API à chaque fois, toute personne qui se désabonne de votre liste de diffusion sur MailChimp sera supprimée ici aussi.
Un possible gotcha peut se produire au cours de cette étape. Si vous avez une grande liste (j'ai testé avec seulement 4), Vous pouvez tomber dans un problème de mémoire où PHP essaie de construire un énorme $emails
array. Si vous rencontrez ce problème, vous devriez découper la lecture des e-mails dans des blocs plus petits et envoyer des e-mails comme cela.
Envoi en vrac e-mail à l'aide de PHP
D'autres ont recommandé D'utiliser Mandrill pour envoyer des courriels en vrac. C'est une mauvaise idée. Mandrill est la soeur service à MailChimp qui est destiné à envoyer tranactional email - MailChimp est destiné au courrier électronique en vrac (comme un bulletin d'information).
il y a des tonnes de façons d'envoyer des emails en utilisant PHP, j'opte pour utiliser Sendgrid comme mon fournisseur de SMTP et SwiftMailler pour vous connecter. D'autres alternatives seraient d'utiliser les mail()
function ou une bibliothèque différente comme PHPMailer.
vous pouvez installer SwiftMailer en utilisant Composer:
$ composer require swiftmailer/swiftmailer @stable
je vais plus en détail sur les services SwiftMailer et SMTP (bien que dans un contexte légèrement différent) dans cette question. Mais cet exemple fera ce dont il a besoin.
$sendgridUser = /*SendGridUsername*/;
$sendgridPassword = /*SendGridPassword*/;
$subject = "Thank you for using MailChimp Lists!";
$fromAddress = "HPierce@example.com";
$fromName = "Hayden Pierce";
$body = file_get_contents(/*path to content (body.html)*/);
$transport = Swift_SmtpTransport::newInstance('smtp.sendgrid.net', 587, 'tls')
->setUsername($sendgridUser)
->setPassword($sendgridPassword)
;
foreach($emails as $email){
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance()
->setSubject($subject)
->setFrom(array($fromAddress => $fromName))
->setTo($email)
->setBody($body);
$mailer->send($message);
exit();
}
pour simplifier, j'ai lu le corps entier à partir d'un fichier HTML statique. Vous pouvez envisager d'utiliser un tentant moteur, comme Twig pour mieux implémenter en utilisant des modèles.
Tout ce code mis ensemble ressemble à ceci:
//Loading in composer dependencies
require "vendor/autoload.php";
//Provided by Mailchimp account settings
$apiKey = /*MailChimp API keys*/;
$listId = /*MailChimp List id*/;
$sendgridUser = /*SendGridUser*/;
$sendgridPassword = /*SendGridPassword*/;
$subject = /*The subject line of your email*/;
$fromAddress = /*The email address for your FROM line*/;
$fromName = /*The name in your FROM line*/;
$body = file_get_contents(/*path to your html content*/);
$MailChimp = new \Drewm\MailChimp($apiKey);
$args = array(
'id' => $listId,
);
$result = $MailChimp->call('lists/members', $args);
//Check for any errors first, if none have occurred, build the email list.
if(isset($result['status']) && $result['status'] == 'error'){
throw new Exception('call to Mailchimp API has failed.');
} else {
$emails = array();
//Build an array of emails for users that are currently subscribed.
foreach($result['data'] as $recipient){
if($recipient['status'] == 'subscribed' && !empty($recipient['email'])){
$emails[] = $recipient['email'];
}
}
}
//Setup for sending emails to an arbitrary list of emails using Sendgrid.
$transport = Swift_SmtpTransport::newInstance('smtp.sendgrid.net', 587, 'tls')
->setUsername($sendgridUser)
->setPassword($sendgridPassword)
;
foreach($emails as $email){
//Send emails to each user.
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance()
->setSubject($subject)
->setFrom(array($fromAddress => $fromName))
->setTo($email)
->setBody($body);
$mailer->send($message);
}
pour créer une campagne avec du HTML personnalisé
Utiliser les campagnes/créer des api d'extrémité: https://apidocs.mailchimp.com/api/2.0/campaigns/create.php
PHP wrapper est ici: https://bitbucket.org/mailchimp/mailchimp-api-php
Il semble que Mailchimp_Campaigns::create est la fonction que vous pouvez utiliser. Portez une attention particulière au paramètre $content (chaîne html pour le contenu HTML brut/collé)
une Fois l' la campagne est créé, vous l'aurez ID.
Pour envoyer à la création de la campagne
Utilisation de la fonction Mailchimp_Campaigns::envoyer avec l'ID de la campagne