使用 Laravel 和 Campaign Monitor 发送每日电子邮件
发布时间 作者: Eric L. Barnes
在 Laravel 新闻中,我们提供多种方法来跟踪最新内容。从自动分享到所有 社交 媒体 频道,一个只读的 Telegram 频道,一个每周时事通讯,以及从去年 3 月开始提供的每日电子邮件摘要。
为了发送每日电子邮件,我们利用了 Laravel 调度程序和 Campaign Monitor,使其完全自动化。在本教程中,我们将介绍其设置方式以及如何轻松地将此添加到您的网站以开始发送自动电子邮件。
安装
在我们开始之前,您需要安装 Campaign Monitor SDK,并且由于有了 Composer,这很简单。运行 composer require 命令
composer require campaignmonitor/createsend-php
接下来,在您的 .env 文件中添加以下三个项目
CAMPAIGN_MONITOR_API_KEY=CAMPAIGN_MONITOR_CLIENT_ID=CAMPAIGN_MONITOR_DAILY_LIST_ID=
您可以在 Campaign Monitor 帐户中访问 admin/account/apikeys
找到前两个值。对于每日列表 ID,请访问“列表和订阅者”并创建新列表或编辑现有列表。只要您是帐户的管理员,您就可以在这里找到“API 订阅者列表 ID”。
将这三个值保存到 .env 文件中,现在我们就可以创建发送电子邮件的命令了。
创建控制台命令
现在我们已经有了必要的组件,是时候创建一个控制台命令了,我们可以将其连接到 Laravel 调度程序。
php artisan make:command SendDailyEmail
该 Artisan 命令将创建类的脚手架,您应该打开新文件并填写签名和描述属性
protected $signature = 'ln:daily';protected $description = 'Send the daily email';
接下来,在 handle 方法内部,我们将放置逻辑。由于它是一封每日电子邮件,因此某些日子我们不会发布新文章。例如,节假日和周末。因此,应该避免这些日子。
为了解决这个问题,我们可以进行一个简单的“if”检查,以确保在过去 24 小时内至少发布了一篇文章。以下是设置检查上次发送电子邮件的方式
public function handle(){ $posts = Post::active()->where('publishes_at', '>', Carbon::parse('yesterday 3pm'))->get(); if (count($posts) > 0) { return $this->email($posts); }}
现在,此类的最后一部分是上面引用的“email()”方法。以下是它的完整代码
protected function email($posts){ $auth = ['api_key' => config('services.campaign-monitor.key')]; $cm = new CS_REST_Campaigns(null, $auth); $draft = $cm->create(config('services.campaign-monitor.client_id'), [ 'Subject' => $posts->first()->title, 'Name' => 'Daily Email ('.date("Y-m-d").')', 'FromName' => 'Laravel News', 'FromEmail' => '[email protected]', 'ReplyTo' => '[email protected]', 'HtmlUrl' => 'https://site.com/dailyTemplate', 'ListIDs' => [config('services.campaign-monitor.daily_id')], ]); $cm->set_campaign_id($draft->response); $result = $cm->send(array( 'ConfirmationEmail' => '[email protected]', 'SendDate' => 'immediately' ));}
这几乎就是所有神奇的地方,这是一个两步过程。首先,我们使用 $cm->create
设置草稿活动,并传入一个包含所有必需设置的数组。这里唯一独特的项目是 HtmlUrl
,它是电子邮件的来源。
接下来,我们设置活动 ID,然后通过 $cm->send
方法立即发送它。
创建 HTML 电子邮件源
在上一节中,我们告诉 Campaign Monitor 使用 Web 路由作为 HtmlUrl
,这使我们能够使用 Laravel Blade 创建模板,并使其可路由,以便我们在发送之前查看它。
要创建它,只需要一个标准路由、控制器和视图,但视图需要使用 HTML 表格,因为它将是一封电子邮件。我使用了 Zurb Foundation 作为基础,但还有许多其他选择,您可以查看对该 推文 的回复,看看其他人推荐什么。
调度命令
最后一步是在 app/Console/Kernel.php 文件中注册我们的命令,然后根据我们想要的计划设置它。
//... protected $commands = [ SendDailyEmail::class,]; //... protected function schedule(Schedule $schedule){ $schedule->command('ln:daily')->daily()->at('15:00');}
只要您的 cron 设置为调用调度程序,现在所有这些都应该自动发生。
想查看最终结果吗?订阅每日 Laravel 新闻摘要,您将在收件箱中看到它。