Отправить информационный бюллетень Mailchimp в список через 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. В настоящее время они работают над версией 3.0, но версия 2.0 по-прежнему помечена как «текущая», поэтому мы будем полагаться на эту версию API. Для использования API MailChimp рекомендует несколько сторонних пакетов. В этом примере я использую mailchimp-api, который можно установить с помощью композитора:

$ 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 и < href="http://swiftmailer.org/" rel="nofollow noreferrer">SwiftMailer для подключения к нему. Другими альтернативами могут быть использование PHP-функции mail() или другой библиотеки, такой как 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 имеет Создание кампании и < методы href="https://apidocs.mailchimp.com/api/2.0/campaigns/send.php" rel="nofollow">Campaign Send. Это не самые простые методы, но в текущем 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