lekoala/silverstripe-mailgun

SilverStripe CMS 的 Mailgun 集成

安装数: 10,396

依赖项: 0

建议者: 0

安全性: 0

星标: 2

关注者: 4

分支: 13

开放问题: 1

类型:silverstripe-vendormodule

1.2.2 2024-01-23 17:08 UTC

This package is auto-updated.

Last update: 2024-09-23 18:31:45 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Build Status codecov.io

Latest Stable Version Latest Unstable Version Total Downloads License Monthly Downloads Daily Downloads

codecov.io

设置

在您的 .env 文件中定义以下变量

MAILGUN_API_KEY='YOUR_API_KEY_HERE'
MAILGUN_DOMAIN='example.com'

或通过在 config.yml 中定义 API 密钥

LeKoala\Mailgun\MailgunHelper:
    api_key: 'YOUR_API_KEY_HERE'
    domain: 'example.com'

此模块使用官方客户端。同时,请确保查看官方文档

您还可以使用以下环境变量来自动配置模块

# Will log emails in the temp folders
MAILGUN_ENABLE_LOGGING=true
# Will disable sending (useful in development)
MAILGUN_SENDING_DISABLED=true

通过定义 API 密钥,模块将注册一个新的传输,用于发送所有电子邮件。

如果您使用的是Mailgun EU 服务,您可以更改 API 端点

# Will use https://api.eu.mailgun.net/v3
MAILGUN_ENDPOINT='https://api.eu.mailgun.net/v3'

调试

创建一个 postbin http://bin.mailgun.net/ 并设置以下参数

MAILGUN_ENDPOINT='http://bin.mailgun.net/XXX'
MAILGUN_DEBUG=true

请注意,测试套件不与 postbin 一起工作,因为它返回 HTML 响应,并且不模拟 API 行为

注册新邮件发送器

如果您定义了 MAILGUN_API_KEY 变量,邮件发送器传输将自动注册。

否则,您需要调用以下行

MailgunHelper::registerTransport();

Mailgun 集成

此模块创建了一个新的管理区域,允许您

  • 列出所有消息事件并允许搜索它们
  • 有一个设置标签,用于列出和配置发送域和 webhook

注意:请确保您有一个有效的 API 密钥(非子账户密钥),以访问与 CMS 中 webhook 安装相关的功能。

设置标签或元数据

通过使用自定义头,您可以通过遵循与 SMTP API 相同的原则向 API 传递参数。

传递参数的主要方式是通过 X-Mailgun-Variables 头添加一个 json 编码的字符串,但您也可以使用该 Mandrill 兼容层。

$email = new Email();
$email->setSubject($subject);
$email->setBody($body);
// Through Mandrill compat layer
$email->getSwiftMessage()->getHeaders()->addTextHeader('X-MC-Metadata', json_encode(['FIRST_NAME' => 'Jon Smith']));
// Or use Mailgun
$email->getSwiftMessage()->getHeaders()->addTextHeader('X-Mailgun-Variables', json_encode(['FIRST_NAME' => 'Jon Smith']));

Webhooks

尚未实现

从 Mailgun Admin,您可以为您网站设置一个 webhook。此 webhook 将被调用,MailgunController 将负责处理所有事件。它注册在 __mailgun/ 路径下。

默认情况下,MailgunController 不会执行任何操作。您可以自由地向 MailgunController 添加自己的扩展来定义自己的规则,例如“当收到垃圾邮件投诉时向管理员发送电子邮件”。

MailgunController 为所有事件提供以下扩展点

  • onAnyEvent

根据事件类型,以下是一些扩展点

  • onEngagementEvent
  • onGenerationEvent
  • onMessageEvent
  • onUnsubscribeEvent

您还可以使用以下方式检查整个有效负载和批量 ID

  • beforeProcessPayload:检查有效负载是否已处理
  • afterProcessPayload:标记有效负载已处理或记录信息

如果您的网站处于开发模式,您可以通过访问 /__mailgun/test 来测试您的扩展是否正常工作。它将加载来自 API 的示例数据。

请确保使用以下配置正确配置 webhook 的 URL(如果需要)

LeKoala\Mailgun\MailgunAdmin:
    webhook_base_url: 'https://my.domain.com/'

您还可以定义以下环境变量,将所有传入的有效负载记录到指定的目录中。请确保该目录存在。它相对于您的基目录。

MAILGUN_WEBHOOK_LOG_DIR='_incoming'

防止垃圾邮件

  • 确保您已正确配置您域的SPF和DKIM记录。

    mydomain.com TXT "v=spf1 include:mailgun.org ~all"

  • 创建一个DMARC记录

    _dmarc.mydomain.com. 3600 IN TXT "v=DMARC1; p=none; sp=none; rf=afrf; pct=100; ri=86400"

  • 将提供plain选项设置为true或为您的电子邮件提供纯文本内容

  • 使用Mail Tester来排查问题

内联样式

为了获得最佳结果,我们使用pelago\emogrifier包来内联样式

如果您想恢复默认功能,请使用此方法

LeKoala\Mailgun\MailgunHelper:
    inline_styles: false

待办事项

  • 支持多个域名

兼容性

在4.4上进行了测试,但应能在任何4.x版本上正常工作

维护者

LeKoala - thomas@lekoala.be