自分でデザインしたHTMLおよびCSSメールを.phpページからMailchimpリストに送信する方法はありますか?ニュースレター機能を自分のニュースレターテンプレートを使用して管理パネルに統合し、そこから送信したいと思います。
特にテンプレートは毎回同じになるので、メールを送信するたびにMailchimpにログインする必要はありません。
テンプレートをMailchimpにアップロードし、APIを押してキャンペーンを送信したくない場合は、Mandrill(コメントで前述した@Whymarrh)が適しています。
トランザクションメール(ウェルカム、パスワード回復など)を対象としていますが、SMTPを介して一度に最大1000人のユーザーに送信できます。さらに、[統合]セクションでMailchimpアカウントをMandrillアカウントに接続して、受信者のアクティビティを追跡できます。
私の提案は、Mandrill PHP APIクライアントをインストールし、テンプレートをMandrillにアップロードし、ユーザーリストのMailchimp APIをヒットして、それをMandrillにフィードすることです send-template呼び出し 管理パネルからトリガーします(大量のメールを送信する際のプロのヒント: マンドリルはREST API を介して個別のメッセージとして複数の人に送信します)。
はい、できます。 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>
あなたの質問は2つのチャンクに分かれています:
ここでは最初のチャンクが最も重要です。 2番目のチャンクにはトンの可能な回答があり、かなり簡単に実行できるはずです。
MailChimpからリストを取得する
MailChimpは重要なAPIを提供します。現在、v3.0で動作していますが、v2.0はまだ「現在」としてマークされているため、そのバージョンのAPIに依存します。 APIを使用するには、 MailChimpはいくつかのサードパーティパッケージを推奨します 。この例では、composerを使用してインストールできる mailchimp-api を使用しています。
_$ composer require drewm/mailchimp-api
_
MailChimpに対して自分自身を認証するには、APIキーが必要です。 MailChimpは完全な手順を提供します APIキーを取得しますが、短いバージョンは次のとおりです。
プロファイル名をクリックして[アカウント]パネルを展開し、[アカウント]を選択します。
[エクストラ]ドロップダウンメニューをクリックして、APIキーを選択します。
既存のAPIキーをコピーするか、[キーの作成]ボタンをクリックします。
キーにわかりやすい名前を付けて、どのアプリケーションがそのキーを使用しているかがわかるようにします。
次に、メールを取得するリストのリストIDが必要です。繰り返しますが、 MailChimpは最高のドキュメントを提供します これについて。私のリストIDは、文字と数字の両方を含む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)
は、lotsの興味深い情報を含む非常に大量のJSON応答を返します。 MailChimpのマージ設定を介してパーソナライズされた情報を保存していた場合、それらはこのJSON応答で利用可能になります。ただし、この例をできるだけ単純にするために、ユーザーがサブスクライブして電子メールアドレスを保存しているかどうかのみを確認しました。
このブロックの最後に、_$emails
_がすべてのメールアドレスをリストに保存します。これは毎回APIを呼び出すため、MailChimpのメーリングリストから退会した人はここでも削除されます。
この段階で問題が発生する可能性があります。大きなリストがある場合(私は4つだけでテストしました)、PHPが巨大な_$emails
_配列を構築しようとするメモリの問題に遭遇する可能性があります。この問題に遭遇した場合、読むメールを小さなブロックにまとめて、そのようなメールを送信する必要があります。
PHPを使用したバルクメールの送信
他の人は、マンドリルを使用して大量の電子メールを送信することを推奨しています。これは悪い考えです。 Mandrillは、MailChimpの姉妹サービスであり、 transactionalemail --MailChimpは(ニュースレターのような)バルクメールを送信することを目的としています。
PHPを使用してメールを送信する方法はたくさんありますが、SMTPプロバイダーとして Sendgrid を使用し、それに接続するために SwiftMailer を使用することを選択しています。他の選択肢は、PHPの mail()
function または PHPMailer のような別のライブラリを使用することです。
Composerを使用してSwiftMailerをインストールできます。
_$ 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);
}
_
カスタム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文字列)に細心の注意を払ってください
キャンペーンが作成されると、そのIDを取得します。
作成したキャンペーンを送信するには
以前に作成したキャンペーンのIDを使用して関数Mailchimp_Campaigns :: sendを使用します