使用 Laravel 和 Campaign Monitor 发送每日电子邮件

发布时间 作者:

Sending a daily email with Laravel and Campaign Monitor image

在 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 新闻摘要,您将在收件箱中看到它。

Eric L. Barnes photo

Eric 是 Laravel 新闻的创建者,自 2012 年以来一直在报道 Laravel。

Cube

Laravel 时事通讯

加入 40,000 多名其他开发者,绝不错过新的提示、教程等。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动补全和对本地和生产环境的即时反馈进行 Tinker。

Tinkerwell
No Compromises logo

无妥协

Joel 和 Aaron 是来自无妥协播客的两名经验丰富的开发者,现在可以为您的 Laravel 项目聘用他们。 ⬧ 固定费率为每月 7500 美元。 ⬧ 没有冗长的销售流程。 ⬧ 没有合同。 ⬧ 100% 退款保证。

无妥协
Kirschbaum logo

Kirschbaum

提供创新和稳定性,以确保您的 Web 应用程序成功。

Kirschbaum
Shift logo

Shift

运行旧版本的 Laravel?即时、自动化的 Laravel 升级和代码现代化,使您的应用程序保持新鲜感。

Shift
Bacancy logo

Bacancy

使用经验丰富的 Laravel 开发人员为您的项目加油,他们拥有 4-6 年的经验,每月仅需 2500 美元。获得 160 小时的专业知识和 15 天的免费试用。立即预约电话!

Bacancy
Lucky Media logo

Lucky Media

立即获得幸运 - Laravel 开发的理想选择,拥有十多年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar: Laravel 电子商务

Laravel 的电子商务。一个开源包,将现代无头电子商务功能的强大功能引入 Laravel。

Lunar: Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 工作板

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS 启动工具包

SaaSykit 是一个 Laravel SaaS 启动工具包,包含运行现代 SaaS 所需的所有功能。支付、精美结帐、管理面板、用户仪表板、身份验证、现成组件、统计信息、博客、文档等等。

SaaSykit: Laravel SaaS 启动工具包
Rector logo

Rector

您无缝升级 Laravel、降低成本和加速创新以实现成功企业的合作伙伴

Rector
MongoDB logo

MongoDB

使用 MongoDB 和 Laravel 的强大集成来增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。在使用熟悉的 Eloquent API 的同时,支持事务性、搜索、分析和移动用例。了解 MongoDB 的灵活、现代数据库如何改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的零依赖输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

将 Swagger UI 添加到您的 Laravel 应用程序

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的精确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel 提示构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包将评论添加到您的 Laravel 应用程序

阅读文章