Рубрики
Uncategorized

Здание почтовой кареты

Сегодня наша команда выпустила Mail coach, красивый, самостоятельный менеджер списков рассылки. Он интегрируется с… С тегами php, laravel, маркетинг.

Сегодня наша команда выпустила Почтовый тренер , красивый менеджер списков рассылки, размещенный самостоятельно. Он интегрируется с такими сервисами, как Amazon SES, Mailgun или Sendgrid, чтобы отправлять рассылки по доступной цене. Он упакован как отдельное приложение или может быть интегрирован в проект Laravel, он идеально подходит для блоггеров, ремесленников и предпринимателей.

Даже если вы не находитесь на рынке решений для электронной почты, Mail coach включает в себя видеокурс о том, как оно построено. Я уверен, что вы увидите несколько ценных приемов, которые сможете применить в своем собственном проекте.

В этом посте в блоге я хотел бы поделиться тем, почему и как мы это создали.

История происхождения

Фаза первая: ощущение боли

Фаза первая: ощущение боли в почтовом автобусе – это явный пример того, как я почесываю свой собственный зуд. Фаза первая: ощущение боли в почтовом автобусе – это явный пример того, как я почесываю свой собственный зуд. Несколько лет назад Фаза первая: ощущение боли в почтовом автобусе – это явный пример того, как я почесываю свой собственный зуд. Несколько лет назад я начал рассылать раз в две недели информационный бюллетень по Laravel, PHP, JavaScript и всему, что меня занимает.

Фаза первая: ощущение боли в почтовом автобусе – это явный пример того, как я почесываю свой собственный зуд. Несколько лет назад || я начал рассылать || раз в две недели информационный бюллетень || по Laravel, PHP, JavaScript и всему, что меня занимает. В течение первых нескольких выпусков я просто использовал Mailchimp, и все было хорошо. Фаза первая: ощущение боли в почтовом автобусе – это явный пример того, как я почесываю свой собственный зуд. Несколько лет назад || я начал рассылать || раз в две недели информационный бюллетень || по Laravel, PHP, JavaScript и всему, что меня занимает. В течение первых нескольких выпусков я просто использовал Mailchimp, и все было хорошо. Людям, похоже, понравился контент, и моя база подписчиков выросла более чем на 2 000. Фаза первая: ощущение боли в почтовом автобусе – это явный пример того, как я почесываю свой собственный зуд. Несколько лет назад || я начал рассылать || раз в две недели информационный бюллетень || по Laravel, PHP, JavaScript и всему, что меня занимает. В течение первых нескольких выпусков я просто использовал Mailchimp, и все было хорошо. Людям, похоже, понравился контент, и моя база подписчиков, если список увеличится, превысит это число, Mailchimp больше не бесплатен, и вам придется платить 29,99 доллара в месяц. РЭБ более 2 000.

Фаза первая: ощущение боли в почтовом автобусе – это явный пример того, как я почесываю свой собственный зуд. Несколько лет назад || я начал рассылать || раз в две недели информационный бюллетень || по Laravel, PHP, JavaScript и всему, что меня занимает. В течение первых нескольких выпусков я просто использовал Mailchimp, и все было хорошо. Людям, похоже, понравился контент, и моя база подписчиков, если список вырастет, превысит это число, Mailchimp больше не является бесплатным для бизнеса, стоимость которого может быть приемлемой, но для личной рассылки новостей, которая сама по себе не приносит никакого дохода, платить 359,88 долларов в год слишком много. повторно, и вам придется платить 29,99 доллара в месяц. РЭБ более 2 000. Какое-то время я жил с этим. Но когда моя рассылка выросла еще больше, а ежегодные расходы выросли до 600 долларов, пришло время перейти к чему-то другому.

Я нашел альтернативу в Send, самостоятельном решении для рассылки информационных бюллетеней. Он использует AWS для отправки электронных писем, что намного дешевле, чем Mailchimp. Электронное письмо, отправленное с помощью AWS, стоит всего 0,0001 доллара. Так что мой ежемесячный счет внезапно снизился с 600 долларов всего до нескольких долларов. Sendy выглядит далеко не так отполированно, как Mailchimp, но низкие затраты на отправку электронных писем заставили меня придерживаться его. На какое-то время все снова стало хорошо.

Время шло, и мой список электронной почты продолжал расти. Несколько месяцев назад у моего сервера начали возникать проблемы каждый раз, когда я отправлял новостную рассылку. До сегодняшнего дня я не уверен на 100%, что вызвало эту проблему, но у меня есть сильное подозрение, что она была вызвана большим количеством входящих запросов на отслеживание открытий и кликов сразу после отправки информационного бюллетеня.

Я решил исследовать проблему внутри кодовой базы Sandy. Но после открытия нескольких исходных файлов я быстро сдался . При всем уважении к создателям Candy (они запустили довольно успешный продукт), это PHP-код из другой эпохи. Каждый экран обрабатывается собственным PHP-файлом, есть PHP-код, смешанный с необработанными SQL-запросами и HTML, и повсюду используются включения.

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

Вторая фаза: из хобби-проекта…

Моей первоначальной идеей было создать пакет с открытым исходным кодом под названием laravel-email-кампании . После того, как работал в тайне на Вспышке в течение нескольких месяцев, мне было приятно снова работать в открытую . Почесывать свой собственный зуд – это весело!

В течение нескольких недель я расширил всю функциональность. Отправка писем через поставщиков услуг электронной почты, отслеживание открытий, отслеживание ссылок, отслеживание отказов от подписки и так далее… Я не хочу брать на себя всю ответственность за это. Я также получаю отзывы о частях с открытым исходным кодом от своих коллег, что сделало пакет лучше.

В начале октября 2019 года Я думал, что посылка готова , поэтому, прежде чем выпустить его, я сам начал использовать его для нескольких вещей. В то время не было пользовательского интерфейса; все должно было быть сделано в коде. Это очень быстро устарело, поэтому я решил начать работать над пользовательским интерфейсом .

Может быть, это потому, что мне не хватает опыта, но в целом я чувствую, что создание пользовательского интерфейса – это гораздо больше работы, чем кодирование внутренней логики. В моей команде есть люди, такие как Виллем и Себ, которые могут выполнять работу намного лучше меня, поэтому я попросил их о помощи.

Фаза третья: … к полному продукту

Даже для моих коллег по интерфейсу создание красивого, отточенного пользовательского интерфейса может занять довольно много времени. Было ясно, что если бы этот пакет оставался с открытым исходным кодом, то для его завершения потребовалось бы очень много времени. Итак, мы решили сделать полноценный продукт. laravel-email-кампании – прекрасное название пакета, но оно не соответствует названию продукта, которое говорит о воображении. Виллем придумал название “Почтовый тренер” и создал небольшой рекламный сайт , которым мы поделились со всем миром .

Мы расширили наши возможности. Изначально Mail coach предназначался только для работы в качестве пакета, устанавливаемого в существующие приложения Laravel. Но мы хотели, чтобы людям с меньшим (или вообще без) опытом было легко использовать это решение. Итак, мы также создали полноценное приложение , которое поставляется с экранами авторизации и управления пользователями, в котором предварительно установлено приложение Mailcoach. Мы даже создали установщик в один клик , который может настроить весь сервер с предварительно настроенным на нем приложением Mail coach.

Вся команда внесла свой вклад в проект. Виллем и Себ работал над пользовательским интерфейсом и брендингом. Алекс отвечал за создание Satis. Rias набросал раздел лицензионного сайта и видео и позаботился об установке в 1 клик. Адриан написал большие части документов приложения и я в основном работал над улучшением ядра и помогал со всем вышеперечисленным. Я также создал видеокурс, о котором расскажу ниже.

Представляем почтовую карету

В двух словах, Mail coach может рассылать информационные бюллетени и кампании по электронной почте. Он использует Amazon SES, Mailgun или Sendgrid для отправки самих писем. Эти службы отправляют отзыв с помощью События сбоя вызова Webhook о том, какие электронные письма открыты и по каким ссылкам внутри этих писем были нажаты. Почтовый тренер может обработать и обобщить эту обратную связь.

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

Если вы хотите ознакомиться с пользовательским интерфейсом, вы можете посмотреть этот вводный фильм.

Вступление к почтовому автобусу от Спати на Vimeo .

Одна из вещей, которая меня больше всего волнует, – это расширяемость нашего пакета. Почтовый тренер рассылает события всякий раз, когда открывается почта, нажимается ссылка, … Вы можете использовать эти события, чтобы делать все, что захотите. Вы можете, например, добавлять тег подписчику всякий раз, когда открывается конкретное письмо или нажимается ссылка.

Если вы хотите узнать больше о почтовом тренере, перейдите на сайт продукта или прочитайте обширную документацию , которую мы написали.

Создание видеокурса

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

Хотя я сделал несколько |/видео раньше, звук и общее качество производства были не такими высокими.

Я попросил совета у своего друга Дриса , который только что начал заниматься подкастингом, и купил Audio Technica AT2020 USB + микрофон и Ехал верхом на ПСА1 .

Мое офисное помещение в моем доме довольно высокое и пустое. В первых попытках снять видео в звуке было много реверберации. Я решил эту проблему, соорудив звукозаписывающую установку, используя перевернутую на бок кровать, накрытую одеялами, и поставив ее посреди комнаты.

Я также получил несколько советов по записи от моего друга Марселя (который, в свою очередь, получил некоторые из этих советов от Джеффри Уэй, я полагаю). Вот те, которые мне очень помогли:

  • Записывайте и говорите одновременно. Не записывайте видео и голос за два отдельных прохода. Это сделает его более естественным.
  • Совершенно нормально, когда вы записываете, сделать паузу и собраться с мыслями. Вы можете отредактировать эти паузы в записи
  • Не играйте с мышью во время записи, это затруднит редактирование
  • Очистите свой рабочий стол, если он виден во время видео, вы не хотите, чтобы отображались несвязанные файлы
  • Старайтесь избегать вставки больших фрагментов кода. Это ошеломляет пользователя. Фрагмент – это хорошо, но в остальном введите его, объясняя по ходу дела.
  • 1280х720 или 1280х800 – хорошее разрешение для записи. На компьютере Mac, который изначально не поддерживает это разрешение, вы можете использовать SwitchResX для принудительного его использования.

Вот одно из видео, включенных в курс. Это научит вас, как безопасно рефакторировать уродливые условные обозначения.

Я действительно горжусь видеокурсом “Почтовый тренер” и могу представить, что запишу еще несколько в будущем.

Тем временем я также записал два видео для Laracasts. Я считаю большим достижением быть представленным на сайте, который многому меня научил. Даже без подписки вы можете смотреть мои видео о тестировании моментальных снимков и о упрощении контроллеров

Использование почтового тренера для рассылки новостей freek.dev

Я уже некоторое время занимаюсь почтовым тренером для моего собственного информационного бюллетеня . Я использую двойной поток регистрации и приветственный информационный бюллетень.

С установленным Mailcoach это весь код , необходимый для этого потока подписки .

namespace App\Http\Controllers;

use App\Http\Requests\SubscribeToNewsletterRequest;
use Spatie\Mailcoach\Models\Subscriber;

class NewsletterSubscriptionController
{
    public function subscribe(SubscribeToNewsletterRequest $request)
    {
        $emailList = $request->emailList();

        Subscriber::createWithEmail($request->email)
            ->redirectAfterSubscribed(action([static::class, 'confirmed']))
            ->subscribeTo($emailList);

        return redirect()->action([static::class, 'confirm']);
    }

    public function confirm()
    {
        return view('front.newsletter.confirm');
    }

    public function confirmed()
    {
        return view('front.newsletter.confirmed');
    }
}

Приветственное письмо будет отправляться всякий раз, когда кто-то подписывается на рассылку новостей. Он содержит ссылки на последние информационные бюллетени (почтовый тренер также заботится о просмотре веб-страниц) и последние сообщения, которые я написал. Поскольку Mailcoach просто живет в моем собственном приложении, я могу просто использовать модель Кампания для получения последних кампаний. Мило!

Вот код этого почтового отправления.

namespace App\Mail;

use App\Models\Post;
use Illuminate\Support\Collection;
use Spatie\Mailcoach\Mails\WelcomeMail as MailcoachWelcomeMail;
use Spatie\Mailcoach\Models\Campaign;
use Spatie\Mailcoach\Models\Subscriber;

class WelcomeMail extends MailcoachWelcomeMail
{
    public Collection $posts;

    public Collection $campaigns;

    public function __construct(Subscriber $subscriber)
    {
        parent::__construct($subscriber);

        $this->campaigns = Campaign::sent()->orderByDesc('sent_at')->limit(3)->get();

        $this->posts = Post::published()->originalContent()->orderByDesc('publish_date')->limit(10)->get();
    }

    public function build()
    {
        return
            $this
                ->markdown('mails.welcome')
                ->subject('Welcome to the freek.dev newsletter');
    }
}

Открытый исходный код

Несмотря на то, что почтовый тренер не является открытым исходным кодом, дух открытого исходного кода не полностью исчез. Пока мы создавали Mail coach, мы извлекли некоторые из его функций в пакеты:

  • laravel-промежуточное программное обеспечение с ограниченной скоростью выполнения заданий : это позволяет вам оценивать ограниченное количество заданий, которые могут быть выполнены в течение заданного периода времени. Почтовый тренер использует это, чтобы не нарушать никаких ограничений на расходы, установленных поставщиками услуг электронной почты.
  • simple-excel : пакет предлагает простой способ чтения и записи огромных файлов Excel. Mail coach использует это для импорта и экспорта списков электронной почты. Он может даже передавать большие объемы экспорта (что, по-моему, очень круто).
  • laravel-приветствие-уведомление : этот пользователь может отправлять приветственное электронное письмо при создании нового пользователя. Это приветственное письмо содержит ссылку, которая позволяет этому новому пользователю установить первоначальный пароль.

Заключительные мысли

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

Хотя я почти уверен, что на техническом уровне в почтовом автобусе все работает. Я не совсем уверен, будет ли это также иметь коммерческий успех. Как упоминалось выше, целевая аудитория этого продукта может быть довольно небольшой. Я надеюсь, что видеокурс будет интересен многим разработчикам, которые, как правило, не были бы заинтересованы в Mailcoach как продукте.

Мечта нашей компании состоит в том, чтобы медленно вырасти до продуктовой компании. Если Mail coach преуспеет, это облегчит начало работы над следующим продуктом.

Что бы ни случилось, мы сохраним дух открытого исходного кода. Пакеты с открытым исходным кодом будут создаваться всегда. Либо в качестве побочных продуктов работы с клиентами, либо в качестве наших собственных продуктов.

Надеюсь, вам понравится почтовая карета. Дайте ему волю !

Оригинал: “https://dev.to/freekmurze/building-mailcoach-20kd”