azine/mailgunwebhooks-bundle

Symfony2 Bundle,可轻松通过Mailgun.com提供的webhooks捕获反馈

3.0.0 2021-01-25 21:10 UTC

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,设计页面

构建状态

Build Status Total Downloads Latest Stable Version Scrutinizer Code Quality Code Coverage