Подтвердить что ты не робот

Отправить рассылку Mailchimp в список через PHP

Есть ли способ отправить самозанятую электронную почту HTML и CSS в список Mailchimp с страницы .php? Я хочу интегрировать функцию информационного бюллетеня в панель администратора с собственным шаблоном рассылки и отправить его оттуда.

Мне не нужно входить в Mailchimp каждый раз, когда я хочу отправить электронное письмо, тем более, что шаблон будет одинаковым каждый раз.

С моей первой щедрости по этому вопросу я не понял, что я хотел/нужен, я помещаю еще одну награду. Я действительно надеюсь на этот раз у кого-то есть хороший ответ. Благодаря

4b9b3361

Ответ 1

Если вы не хотите загружать свой шаблон в Mailchimp и отправлять кампанию, нажав на свой API, Mandrill (как @Whymarh, упомянутый выше в комментариях), может быть хорошим вариантом.

Хотя это предназначено для транзакционных электронных писем (приветствие, восстановление пароля и т.д.), вы можете отправлять до 1000 пользователей одновременно через SMTP. Кроме того, вы можете подключить свою учетную запись Mailchimp к своему Mandrill в разделе Integrations для отслеживания активности получателя.

Мое предложение было бы установить клиент API Mandrill PHP, загрузить ваш шаблон в Mandrill, нажать на Mailchimp API для вашего списка пользователей, а затем передать это в Mandrill send-template call, который вы запускаете через панель администратора. (Совет по отправке массовых писем: Mandrill, отправляющий нескольким пользователям как отдельное сообщение через API REST).

Ответ 2

Да, вы можете. Подробности и примеры из 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>

Ответ 3

v2.0 (устарел) API MailChimp имеет Создание кампании и Отправить. Это не самые простые методы для использования, но у текущего API (v3.0) их еще нет, так что ваш лучший вариант.

Ответ 4

Вопрос состоит из двух частей:

  • Как получить мой список писем из MailChimp?
  • Как отправить электронную почту на произвольные адреса электронной почты?

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


Получение списка из MailChimp

MailChimp предоставляет API, который является критическим. В настоящее время они работают над версией v3.0, но v2.0 по-прежнему отмечен как "текущий", поэтому мы будем полагаться на эту версию API. Чтобы использовать API, MailChimp рекомендует несколько сторонних пакетов. В этом примере я использую mailchimp-api, который можно установить с помощью композитора:

$ composer require drewm/mailchimp-api

Чтобы аутентифицироваться в MailChimp, вам понадобится ключ API. MailChimp предоставляет полные инструкции, чтобы получить ключ API, но короткая версия такова:

  • Нажмите на название своего профиля, чтобы открыть панель учетных записей, и выберите Счет.

  • Нажмите раскрывающееся меню Extras и выберите ключи API.

  • Скопируйте существующий ключ API или нажмите кнопку "Создать ключ".

  • Назовите свой ключ описательно, чтобы вы знали, какое приложение использует это ключ.

Далее вам нужен ваш идентификатор списка для списка, из которого вы хотите получить электронные письма. Еще раз, 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, который предназначен для отправки tranactional email - MailChimp предназначен для массовой электронной почты (например, информационного бюллетеня).

Существует множество способов отправки электронной почты с использованием PHP, я предпочитаю использовать Sendgrid в качестве моего SMTP-провайдера и SwiftMailler, чтобы подключиться к нему. Другими альтернативами было бы использовать PHP mail() function или другую библиотеку, например 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);
}

Ответ 5

Чтобы создать кампанию с настраиваемым 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:: отправить с идентификатором ранее созданной кампании