azine / mailgunwebhooks-bundle
Symfony2 Bundle,可轻松通过Mailgun.com提供的webhooks捕获反馈
Requires
- php: >=5.6.0
- ext-mailparse: *
- doctrine/common: ~2.2,>=2.2.3
- doctrine/orm: ~2.2,>=2.2.3
- symfony/config: ^3.3|^4.0
- symfony/console: ^3.3|^4.0
- symfony/dependency-injection: ^3.3|^4.0
- symfony/dom-crawler: ^3.3|^4.0
- symfony/event-dispatcher: ^3.3|^4.0
- symfony/framework-bundle: ^3.3|^4.0
- symfony/http-foundation: ^3.3|^4.0
- symfony/http-kernel: ^3.3|^4.0
- symfony/process: ^3.3|^4.0
- symfony/routing: ^3.3|^4.0
- symfony/translation: ^3.3|^4.0
- symfony/yaml: ^3.3|^4.0
- twig/extensions: ~1.0
- twig/twig: >=1.34
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.2
- phpunit/phpunit: ~5.7.27|^6.0|^7.0
- symfony/phpunit-bridge: ^4.0
This package is auto-updated.
Last update: 2024-08-27 00:26:03 UTC
README
Symfony Bundle,用于捕获Mailgun.com交易性邮件服务的事件数据。
如果您使用的是免费的mailgun.com账户(每月少于10,000封邮件),那么mailgun.com将在大约48小时后删除关于事件的日志条目。
因此,如果您想检查您上周发送的通讯录的接收者,那您就无能为力了。:-)
Mailgun.com提供了一种将事件数据发布到您选择的URL的酷炫功能。=> 更多详情请见http://documentation.mailgun.com/user_manual.html#webhooks
此bundle会捕获这些数据。您可以根据需要搜索、过滤并显示日志条目,并在不再需要时删除它们(或当您需要节省磁盘空间时)。
功能
- 捕获mailgun.com通过mailgun.com提供的“webhooks”可以发布的所有数据 => http://documentation.mailgun.com/user_manual.html#webhooks
- 显示事件条目列表,具有搜索和过滤功能
- 显示单个事件的全部详细信息
- CLI命令以删除旧事件
- CLI命令以检查mailguns发送的IP地址是否在任何封锁列表中,包括如果IP在黑名单中,向管理员发送电子邮件通知。
- 当邮件因垃圾邮件评分而退回时,向管理员发送电子邮件通知
安装
要使用Composer安装AzineMailgunWebhooksBundle,只需将以下内容添加到您的composer.json
文件中
// composer.json
{
// ...
require: {
// ...
"azine/mailgunwebhooks-bundle": "dev-master",
}
}
然后,您可以从您的composer.json
文件所在的目录运行Composer的更新命令,以安装新的依赖项。
php composer.phar update
现在,Composer将自动下载所有必需的文件,并为您安装它们。接下来要做的就是更新您的AppKernel.php文件,并注册新的bundle。
<?php
// in AppKernel::registerBundles()
$bundles = array(
// ...
new Azine\MailgunWebhooksBundle\AzineMailgunWebhooksBundle(),
// ...
);
注册AzineMailgunWebhooksBundle的路由
// in app/config/routing.yml
# Route for mailgun.com to post the information that we want to store in the database
azine_mailgun_webhooks_bundle_webhook:
resource: "@AzineMailgunWebhooksBundle/Resources/config/routing/mailgunevent_webhook.yml"
prefix: /
# Routes for administration of the posted data
azine_mailgun_webhooks_bundle_admin:
resource: "@AzineMailgunWebhooksBundle/Resources/config/routing/mailgunevent_admin.yml"
prefix: /admin/
配置选项
这是配置选项的完整列表及其默认值。
// app/config/config.yml
# Default configuration for "AzineMailgunWebhooksBundle"
azine_mailgun_webhooks:
# Your api-key for mailgun => see https://mailgun.com/cp
api_key: ~ # Required
# Your public-api-key for mailgun => see https://mailgun.com/cp
public_api_key: ''
# Your domain as configured on mailgun.com
email_domain: ''
# in case you also use the AzineEmailBundle, you can configure what to link to the web-view
web_view_token: "azineemailwebviewtoken"
# reply-email-address for delivery-error-notifications
no_reply_email: "no-reply@mubuproperties.co.uk"
# reply-name for delivery-error-notifications
no_reply_name: "MuBu Properties Mailer"
spam_alerts:
# Whether to send notifications about spam complaints
enabled: false
#Interval in minutes between sending of email notifications after receiving spam complaints
interval: '60'
# Mailgun helpdesk ticket ID to request new IP address in case of spam complains
ticket_id: ''
#Mailgun HelpDesk ticket subject
ticket_subject: 'IP on spam-list, please fix.'
#Mailgun HelpDesk ticket subject
ticket_message: 'It looks like my ip is on a spam-list. Please, assign a clean IP to my domain."
# Admin E-Mail to send notification about spam complaints
alerts_recipient_email: ''
hetrixtools_service:
#Your public-api-key for hetrixtools => see https://hetrixtools.com/
api_key: ''
#Url for checking if ip is in blacklist => see https://docs.hetrixtools.com/blacklist-check-api/
blacklist_check_ip_url: 'https://api.hetrixtools.com/v2/<API_TOKEN>/blacklist-check/ipv4/<IP_ADDRESS>/'
#Number of days to mute spam-blacklist notifications if the blacklist didn't change
repeat_notification_after_days: 0
关于“monolog”电子邮件和Web扫描器的备注
您可以将monolog配置为在发生错误时发送电子邮件。=> https://symfony.ac.cn/doc/current/cookbook/logging/monolog_email.html
很可能会在您的网站上发生许多404错误,因为Web扫描器试图查看您是否在服务器上托管了有漏洞的脚本。如果这些错误也通过mailgun.com发送电子邮件,您可能会发送比预期更多的邮件(并超过10k免费邮件的限制),并且这
会在您的数据库中填充大量或少量无用的信息。
从Symfony 2.4开始,为了避免发送这些电子邮件,您可以将monolog配置为忽略某些404错误。=> https://symfony.ac.cn/doc/current/cookbook/logging/monolog_regex_based_excludes.html
// app/config/config.yml
monolog:
handlers:
main:
type: fingers_crossed
action_level: warning
handler: yourNextHandler
excluded_404s:
- ".*/cgi-bin/php.*"
- ".*MyAdmin/scripts/setup.php.*"
- ".*autoconfig/mail/config-v1.1.xml.*"
- ".*vtigercrm/graph.php.*"
- ".*/HNAP1/.*"
- ".*calendar/install/index.php.*"
- ".*admin/config.php.*"
mailgun.com的Webhooks配置
要告知mailgun.com通过webhooks将数据发布到您的数据库,只需获取“mailgunevent_webhook”路由的完整URL
# on a bash console execute this to get the absolute webhook path
php bin/console debug:router -e prod | grep mailgunevent_webhook
// note for Symfony 2.x it is 'php app/console debug:router -e prod | grep mailgunevent_webhook'
并将其复制到https://mailgun.com/app/webhooks上的所有webhooks输入字段中
然后通过点击“测试”或“发送”按钮测试一切是否设置正确,并检查您的数据库或事件列表。
# on a bash console execute this to get the absolute overview-page path
php bin/console router:debug -e prod | grep mailgun_overview
// note for Symfony 2.x it is 'php app/console debug:router -e prod | grep mailgun_overview'
事件
每当mailgun通过webhook发布事件时,都会分发一个包含新MailgunEvent的MailgunWebhookEvent。
您可以实现自己的通知方式来处理失败情况。如果您配置了应用程序使用SwiftMailer,则可以使用SwiftMailerMailgunWebhookEventListener来向您指定的地址发送电子邮件。
CLI命令
此包为您提供了两个命令,您可以通过计划任务(cronjob)来自动化操作。
删除旧的MailgunEvents
如果您只想保留比日期字符串
年轻的mailgun事件,以防止您的数据库运行满,您可以通过计划任务/cronjob运行此命令。
# e.g. delete all events older than 60 days
php app/console mailgun:delete-events -date '60 days ago'
检查发送IP是否在黑名单上
如果发送您电子邮件的IP地址被列入SPAM阻止列表,您的电子邮件送达率会大幅下降。为了能够尽快得到通知,您可以运行此命令,将用于发送您电子邮件的最后IP地址与hetrixtools.com进行比较。如果IP被列入名单,管理员将收到电子邮件。
# e.g. check the blacklists, retry 5 times before failing
php app/console mailgun:check-ip-in-blacklist -numberOfAttempts 5
使用numberOfAttempts
参数,您可以指定命令在尝试失败时应该尝试获取hetrixtools报告的次数。
HetrixTools.com有一个免费的有限计划,每天允许大约3次检查。有关详细信息,请参阅https://hetrixtools.com/pricing/blacklist-monitor/。
您可以在app/config/config.yml
中将repeat_notification_after_days
参数设置为非零整数,以在黑名单列表未发生变化的情况下静音通知电子邮件一段时间。只有当静音持续时间过去或您的IP已被添加到或从黑名单中删除后,您才会再次收到黑名单通知电子邮件。
贡献
贡献非常欢迎。请分支仓库并向master分支提交您的pull-request。
PR应该包含以下内容:
- 包含PR解决的或添加到包中的描述(如有适用,参考现有问题)
- 包含干净的代码和一些内联文档以及phpdocs,没有“纯空格”更改。
- 遵循Symfony最佳实践和编码风格
- 包含针对新功能或修复的phpunit测试
- 在提交PR之前,您的分支在travis-ci.org上应该有一个“绿色”构建结果
代码风格
您可以使用php-cs-fixer
检查代码风格。您可以设置一个包含php-cs-fixer
检查的pre-commit钩子。另请参阅https://github.com/FriendsOfPHP/PHP-CS-Fixer
您只需将pre-commit.sample
文件从commit-hooks/
移动到.git/hooks/
文件夹,并将其重命名为pre-commit
。
php-cs-fixer
将在每次提交时检查您新添加的代码,并对提交应用修复。
要手动运行php-cs-fixer
,请安装依赖项(composer install
)并执行php vendor/friendsofphp/php-cs-fixer/php-cs-fixer --diff --dry-run -v fix --config=.php_cs.dist .
待办事项
以下是一个待办事项列表
- 编写更多单元测试
- 添加命令以定期“清理”数据库
- 添加SwiftMailerMailgunWebhookEventListener以在特定事件发生时通知管理员(例如,在“丢弃”事件时发送电子邮件)
- 编写一些CSS,设计页面