stackkit/laravel-database-emails
Composer 安装命令:
composer require stackkit/laravel-database-emails
包简介
Store and send e-mails using the database
README 文档
README
Introduction
This package allows you to store and send e-mails using the database.
Requirements
This package requires Laravel 11 or 12.
Installation
Require the package using composer.
composer require stackkit/laravel-database-emails
Publish the configuration files.
php artisan vendor:publish --tag=database-emails-config php artisan vendor:publish --tag=database-emails-migrations
Create the database table required for this package.
php artisan migrate
Add the e-mail cronjob to your scheduler
protected function schedule(Schedule $schedule) { $schedule->command('email:send')->everyMinute()->withoutOverlapping(5); }
Usage
Send an email
E-mails are composed the same way mailables are created.
use Stackkit\LaravelDatabaseEmails\Email; use Illuminate\Mail\Mailables\Content; use Stackkit\LaravelDatabaseEmails\Attachment; use Illuminate\Mail\Mailables\Envelope; Email::compose() ->content(fn (Content $content) => $content ->view('tests::dummy') ->with(['name' => 'John Doe']) ) ->envelope(fn (Envelope $envelope) => $envelope ->subject('Hello') ->from('johndoe@example.com', 'John Doe') ->to('janedoe@example.com', 'Jane Doe') ) ->attachments([ Attachment::fromStorageDisk('s3', '/invoices/john-doe/march-2024.pdf'), ]) ->send(); ])
Sending emails to users in your application
Email::compose() ->user($user) ->send();
By default, the name column will be used to set the recipient's name. If you wish to use something different, you should implement the preferredEmailName method in your model.
class User extends Model { public function preferredEmailName(): string { return $this->first_name; } }
By default, the email column will be used to set the recipient's e-mail address. If you wish to use something different, you should implement the preferredEmailAddress method in your model.
class User extends Model { public function preferredEmailAddress(): string { return $this->work_email; } }
By default, the app locale will be used. If you wish to use something different, you should implement the preferredEmailLocale method in your model.
class User extends Model implements HasLocalePreference { public function preferredLocale(): string { return $this->locale; } }
Using mailables
You may also pass a mailable to the e-mail composer.
Email::compose() ->mailable(new OrderShipped()) ->send();
Attachments
To start attaching files to your e-mails, you may use the attachments method like you normally would in Laravel.
However, you will have to use this package's Attachment class.
use Stackkit\LaravelDatabaseEmails\Attachment; Email::compose() ->attachments([ Attachment::fromPath(__DIR__.'/files/pdf-sample.pdf'), Attachment::fromPath(__DIR__.'/files/my-file.txt')->as('Test123 file'), Attachment::fromStorageDisk('my-custom-disk', 'test.txt'), ]) ->send();
Note
Attachment::fromData() and Attachment::fromStorage() are not supported as they work with raw data.
Attaching models to e-mails
You may attach a model to an e-mail. This can be useful to attach a user or another model that belongs to the e-mail.
Email::compose() ->model(User::find(1));
Scheduling
You may schedule an e-mail by calling later instead of send. You must provide a Carbon instance or a strtotime valid date.
Email::compose() ->later('+2 hours');
Queueing e-mails
Important
When queueing mail using the queue function, it is no longer necessary to schedule the email:send command.
Email::compose()->queue(); // On a specific connection Email::compose()->queue(connection: 'sqs'); // On a specific queue Email::compose()->queue(queue: 'email-queue'); // Delay (send mail in 10 minutes) Email::compose()->queue(delay: now()->addMinutes(10));
If you need more flexibility, you may also pass your own job class:
Email::compose()->queue(jobClass: CustomSendEmailJob::class);
It could look like this:
<?php namespace App\Jobs; use Illuminate\Contracts\Queue\ShouldQueue; use Stackkit\LaravelDatabaseEmails\SendEmailJob; class CustomSendEmailJob extends SendEmailJob implements ShouldQueue { // Define custom retries, backoff, etc... }
Test mode
When enabled, all newly created e-mails will be sent to the specified test e-mail address. This is turned off by default.
DB_EMAILS_TESTING_ENABLED=true DB_EMAILS_TESTING_EMAIL=your-test-recipient@example.com
E-mails to send per minute
To configure how many e-mails should be sent each command.
DB_EMAILS_LIMIT=20
Send e-mails immediately
Useful during development when Laravel Scheduler is not running
To enable, set the following environment variable:
DB_EMAILS_IMMEDIATELY=true
Pruning models
use Stackkit\LaravelDatabaseEmails\Email; $schedule->command('model:prune', [ '--model' => [Email::class], ])->daily();
By default, e-mails are pruned when they are older than 6 months.
You may change that by adding the following to the AppServiceProvider.php:
use Stackkit\LaravelDatabaseEmails\Email; public function register(): void { Email::pruneWhen(function (Email $email) { return $email->where(...); }); }
stackkit/laravel-database-emails 适用场景与选型建议
stackkit/laravel-database-emails 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 25.78k 次下载、GitHub Stars 达 39, 最近一次更新时间为 2018 年 08 月 11 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 stackkit/laravel-database-emails 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 stackkit/laravel-database-emails 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 25.78k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 39
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2018-08-11