simmatrix/laravel-mass-mailer

Laravel的大规模邮件发送包

dev-master 2017-04-05 04:21 UTC

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