ope-tech / 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-09-07 17:22:55 UTC
README
此软件包目前处于 BETA 模式,请准备好随时可能发生的破坏性更改。
通过 SES 在您的 Laravel 应用程序中发送的每封电子邮件,跟踪打开率、投递退订率、投诉、链接点击等。
阅读以下安装说明,在几分钟内设置跟踪。
此软件包使用 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 凭证。按照您使用 SES 不使用软件包的方式添加这些凭证。例如,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'; } }
通过邮件外观进行分批处理
您可以通过调用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')); }