Изпратете бюлетин на Mailchimp до List чрез PHP

Има ли начин да изпратите собствено проектиран HTML и CSS имейл до списък на Mailchimp от .php страница? Искам да интегрирам функция за бюлетин в административен панел с мой собствен шаблон за бюлетин и да го изпратя от там.

Не искам да влизам в Mailchimp всеки път, когато искам да изпратя имейл, особено след като шаблонът ще бъде един и същ всеки път.


person Alin    schedule 10.07.2015    source източник
comment
Може да се интересувате от използването на Mandrill тук. От Документацията за API на MailChimp те предлагат начин за изтегляне на списъкът на членовете с техните имейл адреси и с него можете да изпращате имейли чрез Mandrill.   -  person Whymarrh    schedule 12.07.2015
comment
@Whymarrh, гледах Mandrill за доста бяло, но не можах да намеря подход към това, което се опитвам да направя, затова публикувах въпроса.   -  person Alin    schedule 12.07.2015
comment
@Alin Получихте ли отговорите за Изпратете имейл за добре дошли отново, ако потребителят вече е абониран.   -  person Vel    schedule 16.07.2015
comment
Въпреки че не съм сигурен как това може да стане чрез персонализиран код, но чрез drupal.org/project/mailchimp модул, ние имаме достъп до изработен по поръчка шаблон и изпращаме бюлетин до списък, използвайки този шаблон. Така че, ако можете да разровите този модул, може да намерите пътя.   -  person joy d    schedule 17.07.2015
comment
Чели ли сте това: kb.mailchimp.com/templates /basic-and-themes/ Знам, че това не е пълен отговор, но това е начинът, по който можете да се справите с персонализирания шаблон (можете дори да направите няколко) и тогава работата ви ще бъде намалена наполовина. Сега всичко, което трябва да направите, е да разберете необходимите приложни програмни интерфейси (API), за да изпратите действителните имейли в административната област на вашия уебсайт. Ще извикате подходящия шаблон, който искате, както и кампанията, до която искате да изпратите.   -  person Blizzardengle    schedule 17.07.2015


Отговори (5)


Ако не искате да качите шаблона си в Mailchimp и да изпратите кампания, като натиснете техния API, Mandrill (както @Whymarrh спомена по-горе в коментарите) може да е добър вариант.

Въпреки че е предназначен за транзакционни имейли (добре дошли, възстановяване на парола и т.н.), можете да изпратите до 1000 потребители наведнъж чрез SMTP. Освен това можете да свържете акаунта си в Mailchimp с този в Mandrill в раздела Интеграции, за да проследявате активността на получателя.

Моето предложение би било да инсталирате клиента на Mandrill PHP API, да качите своя шаблон в Mandrill, да натиснете API на Mailchimp за списъка си с потребители и след това да го подадете в Mandrill извикване на шаблон за изпращане, което задействате през администраторския си панел. (Професионален съвет за изпращане на масови имейли: Изпращане на Mandrill до множество хора като отделно съобщение чрез REST API).

person lydiat    schedule 19.07.2015

Да, можеш. Подробностите и примерите от MailChimp са достъпни, като влезете в техния контролен панел. Използвайте техните полета на формуляри, оформете свой собствен формуляр.

<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>
person MaggsWeb    schedule 10.07.2015
comment
Мисля, че не сте ме разбрали правилно, вече имам форма за абониране! Имам нужда от начин да изпратя имейл (истинския бюлетин) до списъка с абонати! - person Alin; 10.07.2015

Вашият въпрос е разделен на две части:

  1. Как да извадя своя списък с имейли от MailChimp?
  2. Как мога да изпращам имейли до произволни имейл адреси?

Първото парче е най-важното тук. Втората част има тон възможни отговори и трябва да бъде доста лесна за изпълнение.


Получаване на списъка от MailChimp

MailChimp предоставя API, който е от решаващо значение. В момента те работят върху v3.0, но v2.0 все още е маркиран като „текущ“, така че ще разчитаме на тази версия на API. За да използвате API, MailChimp препоръчва няколко пакета на трети страни. За този пример използвам mailchimp-api, който може да се инсталира с помощта на composer:

$ composer require drewm/mailchimp-api

За да се удостоверите в MailChimp, ще ви трябва API ключ. MailChimp предоставя пълни инструкции за получаване на API ключа, но кратката версия това ли е:

  1. Щракнете върху името на вашия профил, за да разгънете панела на акаунта и изберете акаунт.

  2. Щракнете върху падащото меню Екстри и изберете API ключове.

  3. Копирайте съществуващ API ключ или щракнете върху бутона Създаване на ключ.

  4. Наименувайте ключа си описателно, за да знаете кое приложение използва този ключ.

След това се нуждаете от вашия идентификационен номер на списък за списъка, от който искате да вземете имейли. Още веднъж, MailChimp предоставя най-добрата документация за това . Идентификационният номер на моя списък беше низ от 10 знака, съдържащ както букви, така и цифри.

Накрая пишем 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) връща много обемен JSON отговор с много интересна информация. Ако сте съхранявали персонализирана информация чрез настройки за сливане в MailChimp, те ще бъдат налични в този JSON отговор. Въпреки това, за да направя този пример възможно най-опростен, проверих само дали даден потребител е абониран и съхраних неговия имейл адрес.

В края на този блок $emails вече съхранява целия имейл адрес във вашия списък. Тъй като това извиква API всеки път, всеки, който се отпише от вашия пощенски списък в MailChimp, ще бъде премахнат и тук.

По време на този етап може да възникне възможна грешка. Ако имате голям списък (тествах само с 4), може да срещнете проблем с паметта, при който PHP се опитва да изгради огромен $emails масив. Ако срещнете този проблем, трябва да разделите четенето на имейли на по-малки блокове и да изпращате имейли по този начин.


Изпращане на групови имейли чрез PHP

Други препоръчват използването на Mandrill за изпращане на групови имейли. Това е лоша идея. Mandrill е сестринската услуга на MailChimp, която е предназначена да изпраща транзакции имейл - MailChimp е предназначен за групови имейли (като бюлетин).

Има много начини за изпращане на имейли чрез PHP, аз избирам да използвам Sendgrid като мой SMTP доставчик и SwiftMailer, за да се свържете с него. Други алтернативи биха били използването на функцията mail() на PHP или друга библиотека като PHPMailer.

Можете да инсталирате SwiftMailer с помощта на Composer:

$ composer require swiftmailer/swiftmailer @stable

Навлизам в повече подробности за услугите SwiftMailer и SMTP (макар и в малко по-различен контекст) в този въпрос. Но този пример ще направи това, което трябва.

$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();
}

За по-голяма простота прочетох цялото тяло от статичен HTML файл. Може да обмислите използването на машина за шаблони като Twig, за да я внедрите по-добре с помощта на шаблони.


Целият този код, събран заедно, изглежда така:

//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);
}
person HPierce    schedule 20.08.2015
comment
Като цяло информацията тук наистина е от голяма полза. - person Valentine Shi; 24.01.2019

v2.0 (отхвърлен) на API на MailChimp има Създаване на кампания и методи за изпращане на кампания. Това не са най-лесните методи за използване, но текущият API (v3.0) все още ги няма, така че това е най-добрият ви вариант.

person TooMuchPete    schedule 10.07.2015
comment
Разбирам...grr, добре, ще го пробвам довечера...Публикувам и кода и ще видим дали ще работи :) Приятен ден и благодаря за подсказката. - person Alin; 11.07.2015

За да създадете кампания с персонализиран HTML

Използвайте кампании/създайте крайна точка на API: https://apidocs.mailchimp.com/api/2.0/campaigns/create.php

PHP обвивката е тук: https://bitbucket.org/mailchimp/mailchimp-api-php

Изглежда, че Mailchimp_Campaigns::create е функцията, която можете да използвате. Обърнете специално внимание на параметъра $content (html низ за необработено/поставено HTML съдържание)

След като кампанията бъде създадена, ще получите нейния идентификатор.

За изпращане на създадената кампания

Използвайте функцията Mailchimp_Campaigns::send с идентификатора на създадената преди това кампания

person Nenad Mitic    schedule 21.08.2015