Как автоматизировать кампании MailChimp с помощью c # и MailChimp API v3.0

Почему MailChimp?

Я использую SendGrid для отправки отдельных писем, и мне это очень нравится. Но когда я недавно хотел начать рассылку информационного бюллетеня, я хотел «передать на аутсорсинг как можно больше инструментов электронного маркетинга:

  • Инструменты дизайна электронной почты
  • Управление списком получателей
  • Веб-интерфейс, позволяющий другим людям (которые участвуют в проекте, но не умеют кодировать) проверять и изменять части электронного маркетинга.

MailChimp в значительной степени является стандартом для этих вещей, плюс их бесплатный план был мне достаточно хорош (до 2000 подписчиков по всем спискам в вашей учетной записи, отправка до 12000 писем в месяц или 2000 писем. /день).

Для меня сложнее было «вставить его в свой код» (что мне было проще сделать с помощью SendGrid). Об этом и говорится в этой публикации: о подключении MailChimp к вашему коду C #.

ПРИМЕЧАНИЕ: если вы хотите сразу перейти к коду, перейдите прямо в конец этого сообщения. Предупреждение: по моему опыту, некоторые предыдущие шаги было нетривиально понять (особенно те, которые связаны с шаблоном).

Перед написанием кода

Вы должны сначала создать учетную запись MailChimp (да!). После того, как вы войдете в свою учетную запись, вам необходимо будет настроить:

  1. Новый ключ API
  2. Новый список (писем)
  3. Новый шаблон

1. Ключ API

Нажмите на свое имя пользователя (вверху справа на странице) и выполните следующие действия:

Profile > Extras > API keys > Click on button “Create A Key”

2. Список рассылки

Щелкните «Списки» (вверху страницы), и вы увидите, что создан список адресов электронной почты по умолчанию, в котором вы являетесь единственным получателем.

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

3. Шаблон электронного письма.

Для меня это было непросто. Вам следует создать шаблон «Создайте свой собственный». Для взаимодействия с API нельзя использовать «классический» шаблон. В шаблоне «Создайте свой собственный код» есть элементы, соответствующие следующему соглашению об именах:

<elementName mc:edit=”template-part-id”>
// Where:
// elementName can be div, span...
// "template-part-id" can be "body_content", "preheader_leftcol_content" ...

Это необходимо для того, чтобы вы могли настроить контент через API MailChimp. Чтобы создать один из них, вам необходимо перейти по ссылке:

Templates > Create Template > Code your own > Paste in code

Хорошо, покажи мне уже код!

Приступим к написанию кода! Но сначала ... (извините)

Добавьте пакет NuGet в свой проект

Потому что мы не хотим сами писать вызовы API, или нет?

Install-Package MailChimp.Net.V3

Это оболочка MailChimp, которую я выбрал для своего проекта (см. Страницу проекта на GitHub). Основная причина в том, что ни одна из двух других оболочек, которые я тестировал, не была совместима с ядром dotnet. Но не бойтесь: у него 90 тысяч установок NuGet (я имею в виду, что это не непонятная оболочка). Единственным недостатком является то, что документация не так уж и хороша… вещь, которую я пытаюсь решить с помощью этого поста.

Код пожалуйста !!

Попался.

Это MailchimpRepository:

using MailChimp.Net;
using MailChimp.Net.Core;
using MailChimp.Net.Models;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
class MailchimpRepository
{
 private const string ApiKey = "(your API key)";
private const string ListId = "(your list id)";
 private const int TemplateId = 9999; // (your template id)
private MailChimpManager _mailChimpManager = new MailChimpManager(ApiKey);
 private Setting _campaignSettings = new Setting
 {
  ReplyTo = "[email protected]",
  FromName = "The name that others will see when they receive the email",
  Title = "Your campaign title",
  SubjectLine = "The email subject",
 };
 
 // `html` contains the content of your email using html notation
 public void CreateAndSendCampaign(string html)
 {
  var campaign = _mailChimpManager.Campaigns.AddAsync(new Campaign
  {
   Settings = _campaignSettings,
   Recipients = new Recipient { ListId = ListId },
   Type = CampaignType.Regular
  }).Result;
var timeStr = DateTime.Now.ToString();
  var content = _mailChimpManager.Content.AddOrUpdateAsync(
   campaign.Id,
   new ContentRequest()
   {
    Template = new ContentTemplate
    {
     Id = TemplateId,
     Sections = new Dictionary<string, object>()
      {
       { "body_content", html },
       { "preheader_leftcol_content", $"<p>{timeStr}</p>" }
      }
    }
   }).Result;
_mailChimpManager.Campaigns.SendAsync(campaign.Id).Wait();
 }
public List<Template> GetAllTemplates()
  => _mailChimpManager.Templates.GetAllAsync().Result.ToList();
public List<List> GetAllMailingLists()
  => _mailChimpManager.Lists.GetAllAsync().Result.ToList();
public Content GetTemplateDefaultContent(string templateId)
  => (Content) _mailChimpManager.Templates.GetDefaultContentAsync(templateId).Result;
}

Обратите внимание, что для простоты я сделал все методы синхронными.

ListId и TemplateId: я рекомендую использовать репозиторий для их получения (GetAllTemplates (), GetAllMailingLists ()). Это проще, чем получить их через веб-сайт, и мне все равно не удалось найти правильный ListId на веб-сайте.

TemplateDefaultContent получит JSON, который определяет «Создайте свой собственный шаблон». Вы можете заменить части этого JSON, чтобы вставить свое содержимое в шаблон (см. Объект Разделы в строке, где создается ContentTemplate). GetTemplateDefaultContent () служит помощником для идентификации этих частей.

И… вот оно.

Обратная связь

Есть ли у вас какие-либо отзывы? Пожалуйста, оставьте комментарий или отправьте мне сообщение.

Если вы нашли эту статью полезной, пожалуйста не забудьте 👏🏻. Спасибо!! :)