oliveready7 / laravel-ses
使用 Laravel 通过 SES 跟踪任何发送的电子邮件的参与度。跟踪打开、点击、退信、投诉、投递和拒绝。可用于事务、营销电子邮件和通知。
Requires
- php: ^8.1
- aws/aws-php-sns-message-validator: ^1.9
- aws/aws-sdk-php: ^3.295
- illuminate/notifications: ^10.0 | ^11.0
- illuminate/support: ^10.0 | ^11.0
- lorisleiva/laravel-actions: ^2.7
- nesbot/carbon: ^2.72
Requires (Dev)
- laravel/pint: ^1.13
- orchestra/testbench: ^8.17 | ^9.0
- pestphp/pest: ^2.28
- pestphp/pest-plugin-laravel: ^2.2
- phpstan/phpstan: ^1.10
This package is auto-updated.
Last update: 2024-07-07 16:55:26 UTC
README
包详情
此包目前处于 BETA 模式,请准备随时可能出现的破坏性更改。
跟踪您通过 Laravel SES 发送的每封电子邮件的打开率、投递退信率、投诉、链接点击等。
通过阅读下面的安装说明,在几分钟内设置跟踪。
此包使用 SESV2Client 利用配置集和 SES 内置的跟踪。它不使用列表管理或活动管理。
安装
安装包
composer require opetech/laravelses
添加 Laravel SES 作为邮件发送者
在 config/mail.php 下的 mailers 中添加,确保 LaravelSes 传输可用。
'laravel-ses' => [ 'transport' => 'laravel-ses', ]
迁移
运行包的迁移。
php artisan migrate
发布配置
php artisan vendor:publish --provider="OpeTech\LaravelSes\LaravelSesServiceProvider"
设置 SES 和 SNS
为此,您需要具有完全访问 SNS 和 SES 的 IAM 凭据。将这些凭据添加到您使用此包而不使用包的方式一样。即 config/mail.php
'ses' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],
在运行以下命令之前,请确保您的应用程序端点是公开可用的。SNS 将会击中您的端点以确认订阅。如果您正在测试或在开发中玩耍,我们建议您使用 Ngrok 等服务临时允许公共互联网与您的应用程序交互。
您的 APP_URL 需要设置正确。
运行 laravel-ses:setup-config-and-sns
- 您将需要输入自定义重定向域名。此选项为可选,但强烈建议专业用户使用。有关更多信息,请参阅 配置重定向域名。
这将创建一个名为 "laravel-ses-{env}-configuration-set" 的配置集。您可以通过更改配置选项 "prefix" 来自定义前缀。
它还会创建一个事件目标(laravel-ses-{env}-event-destination)和一个 SNS 主题(laravel-ses-{env}-topic)。前缀同样可以通过更改前缀配置选项来自定义。
配置重定向域名
可选
此选项不是必需的,因为 AWS 会使用其自己的域名,但强烈建议使用,因为电子邮件提供商将匹配您电子邮件内容中的发送域名的链接视为积极。从用户的角度来看,他们将看到 AWS URL 而不是您的 URL,这可能会让他们不愿意点击您的电子邮件中的链接。
跟踪域名最好是发送域名的子域名。这对垃圾邮件评分更好。例如:发送域 - myemails.com,跟踪域 - ses.myemails.com。如果您正在使用子域发送电子邮件,例如 emails.example.com,请使用 ses.example.com 作为跟踪。
我们还会建议避免在子域中使用跟踪,因为像广告拦截器、恶意软件检测等插件不会看好这样的措辞,可能会阻止电子邮件或破坏内容。
要配置自定义跟踪域名,请按照以下步骤操作 - https://docs.aws.amazon.com/ses/latest/dg/configure-custom-open-click-domains.html#configure-custom-open-click-domain。
我们还建议设置一个自定义的“MAIL FROM”域名,否则通过Amazon SES发送的消息将被标记为来自amazon.com的子域名,而不是您自己的域名。这允许您遵守DMARC策略并提高信任。
批量处理
为了分组统计数据,您可以使用“批量处理”。实现 OpeTech\LaravelSes\Contracts\Batchable 接口,使用 OpeTech\LaravelSes\Mailables\Batching 特性,并实现 getBatch 方法。
getBatch 应返回表示您批次的字符串。
LaravelSes将在发送时如果批次不存在则创建一个新的批次。
批次存储在 laravel_ses_batches 表中。
通过Mailables进行批量处理
您可以直接在Mailables上使用批量处理。
<?php use OpeTech\LaravelSes\Contracts\Batchable; use OpeTech\LaravelSes\Mailables\Batching; class MyMailable extends Mailable implements Batchable { public function getBatch() :string { return 'my-first-batch'; } }
通过Mail Facade进行批量处理
您可以通过调用withBatch方法并提供批次名称来进行。
警告:如果您正在发送队列中的Mailable,则此方法将不起作用。请改用通过Mailables进行批量处理。这主要用于您不使用Mailables的情况,例如使用raw方法。
use Illuminate\Mail\Message; use Illuminate\Support\Facades\Mail; Mail::withBatch('exports') ->raw('Your export is attached', function (Message $message) { return $message ->attach('yourexport.csv') ->to('hello@example.com') ->subject('My Subject') ->from('sender@example.com'); });
批量处理邮件通知
您可以使用邮件通道将批量处理添加到通知中。您需要使用 OpeTech\LaravelSes\Notifications\MailMessageWithBatching 而不是使用 MailMessage。
public function toMail(object $notifiable) { return (new MailMessageWithBatching) ->from('hello@example.com') ->batch('restock_alerts') ->subject('The item you were watching has been restocked') ->line('Asics Superblasts have been restocked in your size') ->action('View Product', url('path/to/product')); }