tsfcorp/email

Laravel 发送电子邮件的包

v9.0.4 2024-08-09 09:04 UTC

README

用于编写和发送电子邮件的流畅接口

此包旨在在独立项目或项目集群中工作,这些项目将消息推送到充当收集器的父项目/数据库。

如果您以集群模式使用此包,请确保在主项目中运行进程 php artisan emails:dispatch-jobs。这可以通过 supervisor 保持活动状态。

从 8.x 升级到 9.x

在身份下不再支持 Amazon SES 默认 Webhook 配置。切换到配置集。

  • 在电子邮件表中添加一个名为 "metadata" 的新列 TEXT 可空

从 7.x 升级到 8.x

  • addAttachment 方法签名已更改为 addAttachment(TsfCorp\Email\Attachment $attachment)。此对象可以通过以下方式构建:
use TsfCorp\Email\Attachment;

$attachment = Attachment::path('/path/to/file.txt');
$attachment = Attachment::path('/path/to/file.txt', 'custom_name.txt');
$attachment = Attachment::disk('s3')->setPath('/path/to/file.txt');
$attachment = Attachment::disk('s3')->setPath('/path/to/file.txt', 'custom_name.txt');

从 6.x 升级到 7.x

  • toccbccbounces_count 列已从 emails 表中删除。
  • 引入了一个新表,称为 email_recipients
  • 删除了 email_bounces
  • 添加了新的 webhook_secret 配置值

为了将旧电子邮件迁移到新结构,您必须

  1. 发布新的 email_recipients 迁移文件并运行迁移
  2. 构建一个循环遍历当前电子邮件并插入收件人(to、cc 和 bcc)的脚本,并执行它
  3. 创建一个迁移,应该删除 to、cc、bcc 和 bounces_count 列
  4. 创建一个迁移,删除 email_bounces 表

从 5.x 升级到 6.x

  • 此包现在仅在 laravel 9.x 和 php 8 上运行。对于 laravel 8.x 和更低版本,请使用先前版本。

从 4.x 升级到 5.x

  • 已删除 config 中的 database_connection。在创建新电子邮件时使用 setConnection() 以在其他数据库连接上保存电子邮件。
  • EmailModel 不应在用户空间中使用。创建自己的模型,该模型扩展了 EmailModel

从 3.x 升级到 4.x

  • 在电子邮件表中添加了新的 TEXT "reply_to" 可空列

从 2.x 升级到 3.x

  • 在电子邮件表中添加了新的 "uuid" 列
  • 删除了 addAttachments(...$file_paths) 方法

安装

在您的 composer.json 中要求此包并更新 composer。运行以下命令

composer require tsfcorp/email

更新 composer 后,服务提供程序将自动通过自动发现进行注册和启用。

如果您的 Laravel 版本低于 5.5,请确保您在 app.php 配置文件中添加了服务提供程序。

'providers' => [
    // ...
    TsfCorp\Email\EmailServiceProvider::class,
];

下一步是运行 artisan 命令以安装配置文件和可选迁移文件。该命令将引导您完成此过程。

php artisan email:install

config/email.php 更新为您的设置。

需求

此包利用 Laravel 队列/作业来发送电子邮件。请确保队列系统已正确配置

使用说明

use TsfCorp\Email\Email;
use TsfCorp\Email\Attachment;

$email = (new Email())
    ->to('to@mail.com')
    ->cc('cc@mail.com')
    ->bcc('bcc@mail.com')
    ->subject('Hi')
    ->body('Hi there!')
    ->addAttachment(Attachment::path('/path/to/file.txt'));

使用 enqueue() 方法将消息保存到数据库而不发送。当您只想保存消息但延迟发送时非常有用。或者当 database_connection 配置值为另一个数据库且发送是从那里执行的。

$email->enqueue();

保存消息并安排一个作业发送电子邮件

$email->enqueue()->dispatch();

电子邮件提供商

  • Mailgun
  • Amazon SES
  • Google SMTP
Note 1: In order to use Google SMTP you need at least PHP 7.1.3 and also require symfony/google-mailer in your composer.json
Note 2: If your Google Account has 2FA enabled you need to generate an "App Password" in your Google Acccount

弹跳 Webhook

如果无法向收件人发送电子邮件,电子邮件提供商可以通知您。此包为您处理永久性失败的网络钩子。

Mailgun

http://app.example/webhook-mailgun 链接添加到您的 Mailgun 网络钩子设置中的“永久性失败”部分。

Amazon SES

  1. 在 Amazon SNS 下创建一个新主题。
  2. 在上面的主题下创建一个新的订阅,指定 http://app.example/webhook-ses 作为端点。
  3. 订阅创建后,AWS 将向指定的端点发送一个 POST 请求,其中包含用于确认订阅的 URL。该 URL 可在应用日志中找到。复制并粘贴到浏览器中。
  4. 创建一个配置集。
  5. 配置集创建后,配置事件目的地并选择 Amazon SNS,然后选择步骤 1 中创建的主题。