simmatrix / laravel-mass-mailer
Laravel的大规模邮件发送包
Requires
- php: >=5.3.0
- chalcedonyt/laravel-valueobject: 1.*
- illuminate/support: ~5.1
- league/flysystem-aws-s3-v3: ^1.0
Requires (Dev)
- fzaninotto/faker: ^1.6
- orchestra/testbench: ^3.3
- phpunit/phpunit: ^5.5
This package is not auto-updated.
Last update: 2024-09-28 19:52:46 UTC
README
轻松地在您的Laravel应用程序中发送大量邮件。这是一个针对不同邮件服务提供者的包装器。
目前支持使用Laravel的默认Mail facade和Mailgun的官方SDK发送大量邮件。
建议使用第三方邮件服务(如Mailgun)而不是依赖Laravel的默认Mail facade,因为在使用Laravel的Mail facade时,为了保护所有订阅者的隐私,使用“BCC”字段而不是“TO”字段。
包含的功能
- 使用队列发送大量电子邮件:不会拖慢您应用程序的Web请求速度
- 多个Mailgun域名:适合需要使用多个Mailgun域名发送大量邮件的应用程序
- 妥善处理隐私:订阅者的电子邮件不会互相暴露
- 轻松与前端应用程序集成:您可以拉取JSON数据,填充它,然后将其传递回后端进行处理
- 投递后报告:轻松获取点击数、打开数、退订数、投诉数、投递数、丢弃数等
- 草稿:保存和检索大量邮件草稿
- 订阅者列表:从第三方电子邮件服务提供商(如Mailgun)检索订阅者列表
安装
通过运行以下命令将此包添加到您的项目的composer.json
文件中
composer require simmatrix/laravel-mass-mailer
将以下两个服务提供商都添加到您的config/app.php
文件中的providers
数组中。
Simmatrix\MassMailer\Providers\MassMailerServiceProvider::class,
发布配置文件和blade视图模板文件到您的应用程序
php artisan vendor:publish --provider="Simmatrix\MassMailer\Providers\MassMailerServiceProvider"
配置
在您的服务器上运行队列
使用方法
1(i). 将属性发送到前端
属性代表HTML元素
使用以下命令检索键值对
return MassMailer::getAttributes();
以下是示例响应。您前端中的每个HTML元素都表示为键值形式。
{
"data": {
"ApplyTemplate": true,
"MessageContent": "",
"RecipientList": "",
"SendToAllSubscribers": false,
"SenderEmail": "noreply@nuffnang.com",
"SenderName": "Nuffnang",
"Subject": "",
"Title": "",
"Instagram": false,
}
}
创建属性来表示您的HTML元素是为了使其在从前端应用程序返回时易于解析。
1(ii). 创建您自己的属性
以下是包默认提供的所需属性
- “主题”字段
- “标题”字段
- “发件人姓名”字段
- “发件人电子邮件”字段
- “收件人列表”字段
- “消息内容”字段
- “应用模板”选项
- “发送给所有订阅者”选项
要添加额外的字段
php artisan make:mass-mailer-attribute YourNewFieldName
生成的文件位于app/MassMailer/Attributes/
目录
1(iii). [高级] 获取额外数据
如果您需要在属性中添加一些额外的逻辑,请在属性文件中的getValue()
函数中编写它。
public function getValue()
{
// Do all necessary steps to call to Instagram API to pull the postings, then return the result
return $instagram_postings;
}
1(iv). 从属性中读取值
您可以使用以下方法轻松从属性中读取用户的输入
$has_instagram = MassMailerAttribute::getUserInput( $params, 'Instagram' )
如果您在上面的步骤1(iii)中执行了操作,则可以使用以下方法轻松获取您检索到的值
$instagram_posts = MassMailerAttribute::getInternallyPulledData( $params, 'Instagram' )
2(i). 发送大量电子邮件
在您的控制器中,将$request
参数传递给MassMailer::getParams()
,这将生成一个名为MassMailerParams
的可消化的对象,可以将其输入到函数MassMailer::send()
中。
// YourController.php
public function send(Request $request)
{
MassMailer::send( MassMailer::getParams( $request ) );
}
2(ii). [高级] 发送大量电子邮件
如果您已创建自己的blade视图模板并需要将其用于大量邮件,或如果您需要使用不同的Mailgun域名或不同的邮件列表发送大量邮件,则可以传递mailer options
。
目前这支持覆盖3个自定义邮件发送选项,即
presenter
:在此指定处理您新模板的Presenter类的名称。mailing_list
:如果没有设置此选项,后端将从您的app/config/mass_mailer.php
文件中的mailing_list
键读取数据。mailgun_domain
:如果没有设置此选项,后端将从您的.env
文件中的MAILGUN_DOMAIN
键读取数据。
// YourController.php
public function send(Request $request)
{
$mailer_options = MassMailer::createMailerOptions([
'mailing_list' => 'xxx',
'mailgun_domain' => 'xxx@xxx.com',
'presenter' => \App\MassMailer\Presenters\YourCustomPresenter::class,
]);
// Pass it to your options to the getParams()
MassMailer::send( MassMailer::getParams( $request, $mailer_options ) );
}
3(i). 创建您的自定义Presenter
当您想使用自己的精美新闻稿布局设计时,您需要这个。
此类包含您打算传递给blade视图模板的所有参数,以及blade视图模板的名称。
要生成
php artisan make:mass-mailer-presenter YourCustomPresenter
控制台将提示您输入模板的名称。
- 如果您将模板文件放置在:
resources/views/vendor/simmatrix/mass-mailer/lorem.blade.php
- 然后在控制台中键入以下内容:
vendor.simmatrix.mass-mailer.lorem
- 新的Presenter将在以下位置生成:
app/MassMailer/Presenters/YourCustomPresenter.php
3(ii). 在您的自定义Presenter中添加数据
打开文件,在setParameters()
函数中开始编写您希望传递给blade视图模板的参数。
private function setParameters( MassMailerParams $params )
parent::setViewParameters([
'lorem' => 'ipsum',
'testing' => 'success'
]);
}
在您的新闻稿HTML布局中,您可以使用以下方式显示值
<span>{{ $lorem }}</span>
<div>{{ $testing }}</div>
4. 获取投递报告
通过调用此方法,您可以获得诸如退订、点击、投诉、投递、丢弃、打开、提交、取消订阅等详细信息的数量。
return MassMailer::getReport();
5. 保存草稿
您可以通过将$request
参数传递给MassMailer::saveDraft()
来保存草稿。
MassMailer::saveDraft( $request );
6. 检索草稿
您可以通过调用此方法检索所有草稿。
return MassMailer::getDrafts();
您可以通过将ID传递给下面的方法来检索单个草稿。
return MassMailer::getDraft( $id );
7. 检索订阅者
您可以通过调用此方法检索所有订阅者。
return MassMailer::getSubscribers();
致谢
感谢Chalcedonyt提供的反馈和有用的值对象 Laravel包。
许可证
MIT