Soru Mailchimp bültenini PHP ile listeleme


Kendi tasarladığınız bir HTML ve CSS e-postasını bir .pp sayfasından Mailchimp List'e göndermek için bir yol var mı? Bir bülten işlevini kendi bülten şablonumla bir yönetici paneline entegre etmek ve oradan göndermek istiyorum.

Her seferinde bir e-posta göndermek istediğimde Mailchimp'e giriş yapmak istemem, özellikle de şablon her seferinde aynı olacak.

Bu sorudaki ilk lütfamdan beri ne ben elde edemedim   istedim / gerekli, başka bir ödül verdim. Umarım bu sefer   Birisinin iyi bir cevabı var. Teşekkürler


17
2017-07-10 13:33


Menşei


Kullanmak isteyebilirsiniz mandril İşte. İtibaren MailChimp API Belgeleri, çekmenin bir yolunu sunuyorlar üye listesi e-posta adresleriyle ve bununla birlikte Mandrill aracılığıyla e-posta gönderebilirsiniz. - Whymarrh
@Whymarrh, Mandrill'e epeyce beyaz bakıyordum ama yapmaya çalıştığım bir yaklaşımı bulamadım, bu yüzden soruyu yolladım. - Alin
@Alin Kullanıcı zaten abone olsaydı hoşgeldin gönder e-postası için anwers aldın mı. - Vel
Bu, özel kodla nasıl yapılabileceğinden emin değil, ancak drupal.org/project/mailchimp modül özel şablona erişebilir ve bu şablonu kullanarak bir listeye bülten gönderebiliriz. Yani bu modülü indirirseniz yolu bulabilirsin. - joy d
Bunu okudun mu: kb.mailchimp.com/templates/basic-and-themes/... Bunun tam bir cevap olmadığını biliyorum, ancak bu özel şablonla nasıl başa çıkabiliyorsunuz (birkaç tane bile yapabilirsiniz) ve sonra işiniz ikiye bölündü. Artık yapmanız gereken tek şey, web siteleriniz için ihtiyaç duyulan API öğelerini, gerçek e-postaları göndermek için ihtiyaç duyduğunuz şeydir. İstediğiniz uygun şablonu ve göndermek istediğiniz kampanyayı arayacaksınız. - Blizzardengle


Cevaplar:


Şablonunuzu Mailchimp'e yüklemek ve API'larına basarak bir kampanya göndermek istemiyorsanız, Mandrill (yorumlarda yukarıda belirtilen @Whymarrh gibi) iyi bir seçenek olabilir.

İşlem e-postaları (karşılama, şifre kurtarma, vb.) İçin tasarlanmış olsa da, SMTP aracılığıyla bir kerede 1000 kullanıcıya gönderebilirsiniz. Ayrıca alıcı aktivitesini izlemek için Mailchimp hesabınızı Mandrill'ınıza Entegrasyon bölümünde bağlayabilirsiniz.

Benim önerim, Mandrill PHP API istemcisini yüklemek, şablonunuzu Mandrill'e yüklemek, kullanıcı listenizin Mailchimp API'sini vurmak ve bunu bir Mandrill'e beslemek olacaktır. gönder-şablon çağrısı Yönetici paneliniz aracılığıyla tetiklediğiniz. (Toplu e-postalar göndermede Uzman tavsiyesi: Mandrill, REST API'sı aracılığıyla birden fazla kişiye ayrı mesaj olarak gönderiliyor).


2
2017-07-19 00:22





Evet yapabilirsin. MailChimp'in ayrıntıları ve örnekleri, kontrol panellerine giriş yaparak kullanılabilir. Form alanlarını kullanın, kendi formunuzu şekillendirin.

<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
2017-07-10 13:36



Beni doğru anlamıyorsun, zaten bir abone formum var! Aboneler listesine bir e-posta (gerçek bülten) göndermek için bir yol ihtiyacım var! - Alin
Üzgünüm - daha önce yapmadım. İyi şanslar - MaggsWeb


MailChimp API'sinin v2.0 (kullanımdan kaldırılmış) Kampanya Oluşturma ve Kampanya Gönder yöntemleri. Bunlar, kullanılabilecek en kolay yöntem değildir, ancak geçerli API (v3.0) henüz bunlara sahip değildir, bu yüzden en iyi seçeneğiniz budur.


0
2017-07-10 14:29



Görüyorum ki ... grr, tamam, bu gece denemelisin ... Kodu da gönderiyoruz ve işe yarayıp yaramadığını göreceğiz :) harika bir gün ve ipucu için teşekkürler. - Alin


Sorunuz iki parçaya bölünmüştür:

  1. MailChimp'ten e-posta listemi nasıl alabilirim?
  2. E-postaları rastgele e-posta adreslerine nasıl gönderebilirim?

İlk yığın burada en önemli olanıdır. İkinci parça bir ton olası cevaplar ve başarmak için oldukça kolay olmalıdır.


Listeyi MailChimp'den alma

MailChimp kritik bir API sağlar. Şu anda v3.0 üzerinde çalışıyorlar, ancak v2.0 hala 'current' olarak işaretleniyor, dolayısıyla API'nın bu sürümüne güveniyoruz. API'yi kullanmak için MailChimp birkaç 3. parti paketi önerir. Bu örnek için kullanıyorum MailChimp-api besteci kullanarak kurulabilir:

$ composer require drewm/mailchimp-api

Kendinizi MailChimp'e doğrulamak için bir API anahtarı. MailChimp tüm talimatları sağlar API anahtarını almak için, ancak kısa sürüm şu şekildedir:

  1. Hesap Panelini genişletmek için profil adınızı tıklayın ve   Hesap.

  2. Ekler açılır menüsünü tıklayın ve API tuşlarını seçin.

  3. Mevcut bir API anahtarını kopyalayın veya Anahtar Oluştur düğmesine tıklayın.

  4. Anahtarınızı tanımlayıcı olarak adlandırın, böylece hangi uygulamanın kullandığını bilirsiniz.   tuşuna basın.

Sonra, ihtiyacın var liste kimliği e-postaları almak istediğiniz liste için. Bir kere daha, MailChimp en iyi belgeleri sağlar bunun için. Liste kimliğim, hem harf hem de sayı içeren 10 karakterlik bir dizeydi.

Sonunda PHP'yi yazıyoruz:

$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) ile çok iri bir JSON yanıtı döndürür çok ilginç bilgi. Kişiselleştirilmiş bilgileri MailChimp'te birleştirme ayarları aracılığıyla depolıyorsanız, bu JSON yanıtında kullanılabilirler. Ancak, bu örneği olabildiğince basit tutmak için, yalnızca bir kullanıcının e-posta adreslerine abone olup olmadığını kontrol ettim.

Bu bloğun sonunda, $emails şimdi tüm e-posta adreslerini listenizde saklayın. Bu her defasında API'yı çağırdığından, MailChimp'teki posta listenizden aboneliği iptal eden herkes de buradan kaldırılacaktır.

Bu aşamada olası bir getcha oluşabilir. Büyük bir listeniz varsa (yalnızca 4 ile test ettim), PHP'nin çok büyük bir sayı oluşturmaya çalıştığı bir bellek sorunuyla karşılaşabilirsiniz. $emails dizi. Bu problemle karşılaşırsanız, daha küçük bloklarda e-postaları okumanızı ve bu şekilde e-posta göndermeniz gerekir.


gönderme kütle PHP kullanarak e-posta

Diğerleri toplu e-posta göndermek için Mandrill'i kullanmasını önerdi. Bu kötü bir fikir. Mandrill, MailChimp'e gönderilecek olan kardeş hizmettir. tranactional E-posta - MailChimp toplu e-posta (bir haber bülteni gibi) için tasarlanmıştır.

PHP kullanarak e-posta göndermenin tonlarca yolu var, kullanmayı tercih ediyorum Sendgrid SMTP sağlayıcım ve SwiftMailler ona bağlanmak için. Diğer alternatifler PHP'nin kullanılmasıdır. mail() fonksiyon ya da farklı bir kütüphane gibi PHPMailer.

SwiftMailer'i Composer'ı kullanarak yükleyebilirsiniz:

$ composer require swiftmailer/swiftmailer @stable

SwiftMailer ve SMTP servisleri (biraz farklı bağlamda olsa da) hakkında daha fazla ayrıntıya giriyorum. bu soru. Ancak bu örnek, gerekeni yapacak.

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

$subject = "Thank you for using MailChimp Lists!";
$fromAddress = "HPierce@example.com";
$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();
}

Sadelik için, tüm vücudu statik bir HTML dosyasından okudum. Böyle cazip bir motor kullanmayı düşünebilirsiniz Dal şablonları kullanarak daha iyi uygulamak için.


Bir araya getirilen bütün bu kod şöyle görünüyor:

//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
2017-08-20 02:00



Merhaba ve cevabınız için teşekkürler, bunu test edecek. - Alin


Özel HTML ile kampanya oluşturmak için

Kampanyaları kullan / api bitiş noktası oluştur: https://apidocs.mailchimp.com/api/2.0/campaigns/create.php

PHP sarıcı burada: https://bitbucket.org/mailchimp/mailchimp-api-php

Mailchimp_Campaigns :: create, kullanabileceğiniz işlevdir. $ Content parametresine çok dikkat edin (işlenmemiş / yapıştırılmış HTML içeriği için html dizesi)

Kampanya oluşturulduktan sonra kimliğini alırsınız.

Oluşturulan kampanyayı göndermek için

Mailchimp_Campaigns :: işlevini daha önce oluşturulan kampanyanın kimliğiyle kullan


0
2017-08-21 11:59