lekoala / silverstripe-mailgun
SilverStripe CMS 的 Mailgun 集成
Requires
- php: >=8
- kriswallsmith/buzz: ^1.0
- mailgun/mailgun-php: ^3.0
- nyholm/psr7: ^1.2
- pelago/emogrifier: ^6.0
- silverstripe/framework: ^4.0
- symbiote/silverstripe-gridfieldextensions: ^3.2
Requires (Dev)
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.0
Suggests
- lekoala/silverstripe-email-templates: Email templates editables from the cms
- lekoala/silverstripe-foundation-emails: Use Foundation Emails as a base style for your emails
This package is auto-updated.
Last update: 2024-09-23 18:31:45 UTC
README
设置
在您的 .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