2015-07-10 8 views
17

Gibt es eine Möglichkeit, eine selbst entworfene HTML- und CSS-E-Mail von einer .php-Seite an eine Mailchimp-Liste zu senden? Ich möchte eine Newsletter-Funktion in ein Admin-Panel mit eigener Newsletter-Vorlage integrieren und von dort versenden.Mailchimp-Newsletter per PHP an die Liste senden

Ich möchte mich nicht jedes Mal bei Mailchimp anmelden müssen, wenn ich eine E-Mail senden möchte, besonders da die Vorlage jedes Mal die gleiche ist.

Seit meiner ersten Prämie in dieser Frage habe ich nicht bekommen, was ich wollte/brauche, ich lege ein anderes Kopfgeld. Ich hoffe wirklich diesmal jemand hat eine gute Antwort. Danke

+1

Sie interessiert sein an mit [Mandrill] (https://mandrill.com/ senden) Hier. Aus der [MailChimp API Documentation] (http://kb.mailchimp.com/api/) bieten sie eine Möglichkeit, [die Mitgliederliste] zu lesen (http://kb.mailchimp.com/api/resources/lists)/members/lists-members-collection) mit ihren E-Mail-Adressen und damit können Sie per Mandrill E-Mails versenden. – Whymarrh

+0

@Whymarrh, Ich habe Mandrill ziemlich weiß gesehen, aber ich konnte keinen Ansatz finden, weshalb ich die Frage gestellt habe. – Alin

+0

@Alin Haben Sie die Antwort auf Begrüßungs-E-Mail erneut erhalten, wenn der Benutzer bereits angemeldet ist. – vel

Antwort

2

Wenn Sie Ihre Vorlage nicht zu Mailchimp hochladen und eine Kampagne senden möchten, indem Sie ihre API drücken, kann Mandrill (wie oben in den Kommentaren erwähnt) eine gute Option sein.

Obwohl es für Transaktions-E-Mails (Begrüßung, Passwort-Wiederherstellung usw.) gedacht ist, können Sie bis zu 1000 Benutzer gleichzeitig über SMTP senden. Außerdem können Sie Ihr Mailchimp-Konto im Abschnitt "Integrationen" mit Ihrem Mandrill-Konto verbinden, um die Aktivität des Empfängers zu verfolgen.

Mein Vorschlag wäre, den Mandrill PHP API Client zu installieren, laden Sie Ihre Vorlage auf Mandrill, drücken Sie die Mailchimp API für Ihre Benutzerliste und dann füttern Sie diese in einen Mandrill send-template call, die Sie über Ihr Admin-Panel auslösen. (Pro Tipp zum Senden von Massen-E-Mails: Mandrill sending to multiple people as separate message via the REST API).

2

Ja, Sie können. Die Details und Beispiele von MailChimp sind verfügbar, indem Sie sich in ihrem Kontrollfeld anmelden. Verwenden Sie ihre Formularfelder, stylen Sie Ihr eigenes Formular.

<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> 
+0

Ich glaube, du hast mich nicht richtig verstanden, ich habe bereits ein Abo-Formular! Ich brauche eine Möglichkeit, eine E-Mail (den eigentlichen Newsletter) an die Abonnentenliste zu senden! – Alin

+0

Entschuldigung - nicht schon vorher. Viel Glück – MaggsWeb

0

v2.0 (veraltet) des MailChimp API hat Campaign Creation und Campaign Send Methoden. Dies sind nicht die einfachsten Methoden, aber die aktuelle API (v3.0) hat sie noch nicht, also ist dies die beste Option.

+0

Ich sehe ... grr, ok, werde es heute Abend versuchen ... Sende den Code auch und wir werden sehen, ob es funktioniert :) Hab einen schönen Tag und danke für den Hinweis. – Alin

0

Sie sind Frage ist in zwei Stücke aufgeteilt:

  1. Wie erhalte ich meine Liste von E-Mails aus MailChimp?
  2. Wie kann ich E-Mails an beliebige E-Mail-Adressen senden?

Der erste Brocken ist das wichtigste hier. Der zweite Brocken hat eine Tonne von möglichen Antworten und sollte ziemlich einfach zu erreichen sein.


gibt es die Liste von MailChimp

MailChimp bietet eine API, die kritisch ist. Derzeit arbeiten sie an v3.0, aber v2.0 ist immer noch als 'aktuell' gekennzeichnet, so dass wir uns auf diese Version der API verlassen werden. So verwenden Sie die API: . Für dieses Beispiel verwende ich mailchimp-api die Komponisten installiert werden können:

$ composer require drewm/mailchimp-api 

sich MailChimp zu authentifizieren, müssen Sie eine API-Schlüssel.MailChimp provides full instructions den API-Schlüssel zu bekommen, aber die kurze Version ist dies:

  1. Klicken Sie auf Ihre Profilnamen den Konto-Panel, und wählen Konto zu erweitern.

  2. Klicken Sie auf das Dropdown-Menü Extras und wählen Sie API-Schlüssel.

  3. Kopieren Sie einen vorhandenen API-Schlüssel oder klicken Sie auf die Schaltfläche Create A Key.

  4. Benennen Sie Ihren Schlüssel deskriptiv, damit Sie wissen, welche Anwendung diesen Schlüssel verwendet.

Als nächstes müssen Sie Ihre Liste id für die Liste, die Sie wollen von E-Mails greifen. Noch einmal, MailChimp provides the best documentation dafür. Meine Listen-ID war eine Zeichenfolge aus 10 Zeichen, die sowohl Buchstaben als auch Zahlen enthielt.

Schließlich erhalten schreiben wir die 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) gibt eine sehr kräftige JSON-Antwort mit vielen interessanten Informationen. Wenn Sie personalisierte Informationen über Zusammenführungseinstellungen in MailChimp speichern, sind sie in dieser JSON-Antwort verfügbar. Um dieses Beispiel so einfach wie möglich zu halten, habe ich nur überprüft, ob ein Benutzer seine E-Mail-Adresse abonniert und gespeichert hat.

Am Ende dieses Blocks, $emails jetzt alle E-Mail-Adresse in Ihrer Liste speichern. Da dies die API jedes Mal aufruft, wird jeder, der sich von Ihrer Mailingliste auf MailChimp abmeldet, auch hier entfernt.

In dieser Phase kann ein Fehler auftreten. Wenn Sie eine große Liste haben (ich habe nur mit 4 getestet), können Sie auf ein Speicherproblem stoßen, bei dem PHP versucht, ein riesiges $emails Array zu erstellen. Wenn Sie auf dieses Problem stoßen, sollten Sie E-Mails in kleineren Blöcken lesen und E-Mails senden.


Senden bulk E-Mail mit PHP

Andere empfohlen Mandrill mit Bulk-E-Mail zu versenden. Das ist eine schlechte Idee. Mandrill ist der Schwesterservice von MailChimp, der versendet werden soll. tranactional email - MailChimp ist für Massen-E-Mails gedacht (wie ein Newsletter).

Es gibt Unmengen von Möglichkeiten, E-Mails mit PHP zu versenden, ich benutze Sendgrid als meinen SMTP-Provider und SwiftMailler, um mit ihm zu verbinden. Andere Alternativen wären PHP mail() function oder eine andere Bibliothek wie PHPMailer.

Sie können Swiftmailer installieren Composer:

$ composer require swiftmailer/swiftmailer @stable 

Ich gehe mehr ins Detail über Swiftmailer und SMTP-Dienste (wenn auch in etwas anderem Zusammenhang) in this question. Aber dieses Beispiel wird tun, was es braucht.

$sendgridUser = /*SendGridUsername*/; 
$sendgridPassword = /*SendGridPassword*/; 

$subject = "Thank you for using MailChimp Lists!"; 
$fromAddress = "[email protected]"; 
$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(); 
} 

Der Einfachheit halber habe ich den gesamten Körper aus einer statischen HTML-Datei gelesen. Sie können eine verlockende Engine wie Twig verwenden, um die Verwendung von Vorlagen besser zu implementieren.


All dies Code wie folgt setzen sieht zusammen: https://apidocs.mailchimp.com/api/2.0/campaigns/create.php

PHP-Wrapper:

//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); 
} 
+0

Hallo und danke für deine Antwort, werde das testen. – Alin

0

Um eine Kampagne mit benutzerdefinierten HTML

Verwenden Kampagnen/erstellen api Endpunkt zu erstellen ist hier: https://bitbucket.org/mailchimp/mailchimp-api-php

Es scheint, dass Mailchimp_Campaigns :: create die Funktion ist, die Sie verwenden können. Achten Sie genau auf den $ content-Parameter (HTML-Zeichenfolge für unverarbeiteten/eingefügten HTML-Inhalt)

Sobald die Kampagne erstellt wurde, erhalten Sie ihre ID.

Um die erstellte Kampagne

Verwenden Sie die Funktion Mailchimp_Campaigns :: send mit der ID des zuvor erstellten Kampagne

Verwandte Themen