draliragab/filament-cloudflare-mail-monitor 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

draliragab/filament-cloudflare-mail-monitor

Composer 安装命令:

composer require draliragab/filament-cloudflare-mail-monitor

包简介

Cloudflare Email Service outbound metrics and logs monitor for Filament.

README 文档

README

Monitor outbound Cloudflare Email Service activity in Laravel and Filament.

This package syncs outbound Email Sending analytics and zone-scoped suppression lists from Cloudflare, stores normalized records locally, and provides Filament 5 pages, resources, and widgets for delivery monitoring, failures, authentication health, recent logs, and suppressions.

Features

  • Sync outbound email events into your database
  • View searchable email logs in Filament
  • Sync zone-scoped Email Sending suppressions into your database
  • View searchable suppression records in Filament
  • Inspect delivery failures and authentication health
  • Refresh logs manually from the dashboard, list, or detail views
  • Prune old records with Laravel model:prune
  • Backfill recent history on the first run, then keep syncing daily

Requirements

  • PHP 8.4+
  • Laravel 12 or 13
  • Filament 5
  • Cloudflare Email Service enabled for outbound sending
  • Cloudflare API token with Analytics Read and Email Sending suppression read access for the configured zones

Installation

composer require draliragab/filament-cloudflare-mail-monitor

php artisan vendor:publish --tag="cloudflare-mail-monitor-config"
php artisan vendor:publish --tag="cloudflare-mail-monitor-migrations"
php artisan migrate

Register the plugin in your Filament panel provider:

use DrAliRagab\FilamentCloudflareMailMonitor\CloudflareMailMonitorPlugin;
use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugin(CloudflareMailMonitorPlugin::make());
}

Configuration

Set the required environment variables:

CLOUDFLARE_MAIL_MONITOR_API_TOKEN=your-cloudflare-api-token
CLOUDFLARE_MAIL_MONITOR_ZONE_ID=your-zone-id
CLOUDFLARE_MAIL_MONITOR_ZONE_NAME=example.com

Optional settings include retention, fetch lookback, privacy masking, and Filament navigation labels/icons. Use CLOUDFLARE_MAIL_MONITOR_SUPPRESSIONS_PAGE_SIZE to tune suppression API pagination, up to Cloudflare's documented maximum of 1000.

Scheduling

Add the fetch and prune commands to your Laravel scheduler:

use Illuminate\Support\Facades\Schedule;

Schedule::command('cloudflare-mail-monitor:fetch')->daily();
Schedule::command('cloudflare-mail-monitor:prune')->daily();

After installation, run a one-time backfill with a longer lookback, then let the daily schedule keep syncing new events and suppressions:

php artisan cloudflare-mail-monitor:fetch --days=30

Event records older than 90 days are pruned by default. Suppression records are pruned after their expires_at date. Publish the config to customize retention and other package options.

Commands

Fetch recent Cloudflare email events and zone suppressions synchronously:

php artisan cloudflare-mail-monitor:fetch

Fetch a specific lookback window:

php artisan cloudflare-mail-monitor:fetch --days=7

Dispatch the fetch through your queue:

php artisan cloudflare-mail-monitor:fetch --queue

Prune old records immediately:

php artisan cloudflare-mail-monitor:prune

What It Provides

The plugin registers:

  • A Cloudflare Mail Monitor dashboard page with a manual refresh action
  • An Email Suppressions resource backed by stored Cloudflare suppression records
  • An Email Logs resource backed by stored Cloudflare events
  • A stats widget for total events, delivered events, failed events, and spam/NDR signals
  • A delivery failure analytics widget for rejected/NDR events and top failure causes
  • An authentication health widget for DKIM, DMARC, and SPF failure counts

The Email Logs resource includes filters for configured zones, delivery status, DKIM/DMARC/SPF results, spam/NDR flags, and occurred-at date ranges.

You can disable plugin parts fluently if your panel only needs some screens:

CloudflareMailMonitorPlugin::make()
    ->dashboard()
    ->suppressionsResource()
    ->logsResource()
    ->statsWidget();

Pass false to any of these methods to disable that part.

Events

The package dispatches CloudflareMailSuppressionCreated after a new suppression row is committed locally. Existing suppression rows updated during later syncs do not dispatch the event again.

use DrAliRagab\FilamentCloudflareMailMonitor\Events\CloudflareMailSuppressionCreated;
use Illuminate\Support\Facades\Event;

Event::listen(CloudflareMailSuppressionCreated::class, function (CloudflareMailSuppressionCreated $event): void {
    $suppression = $event->suppression;

    // Sync your local allow/block list, notify a team, or update another system.
});

Programmatic Metrics

The package stores individual events locally through CloudflareMailEventFetcher. It also exposes CloudflareMailAggregateFetcher for on-demand aggregate status counts from Cloudflare's emailSendingAdaptiveGroups dataset.

use DrAliRagab\FilamentCloudflareMailMonitor\Services\CloudflareMailAggregateFetcher;

$metrics = app(CloudflareMailAggregateFetcher::class)->statusCounts();

Aggregate metrics are returned as EmailAggregateMetricData objects and are not persisted by default.

Cloudflare Notes

Cloudflare Email Service is evolving. This package uses the documented GraphQL Analytics datasets for outbound sending:

  • emailSendingAdaptiveGroups
  • emailSendingAdaptive

The Email Suppressions resource is populated by the existing cloudflare-mail-monitor:fetch command using the zone-scoped REST endpoint GET /zones/{zone_id}/email/sending/suppression for each configured zone. It does not require a Cloudflare account ID.

Cloudflare currently documents a 31-day analytics retention window, so scheduled fetching should run at least monthly. Daily fetching is recommended.

Troubleshooting

  • Cloudflare API token is not configured: set CLOUDFLARE_MAIL_MONITOR_API_TOKEN and clear cached config with php artisan config:clear.
  • Empty dashboard or logs: confirm CLOUDFLARE_MAIL_MONITOR_ZONE_ID is a zone ID, not an account ID, and that the token has Analytics Read for that zone.
  • Empty suppressions resource: run php artisan cloudflare-mail-monitor:fetch, confirm the zone has Email Sending enabled, and confirm the token can read Email Sending suppressions for that zone.
  • Missing older events: Cloudflare currently documents a 31-day retention window for Email Service analytics; schedule daily fetching to preserve events locally for longer retention.
  • GraphQL errors from Cloudflare: verify Email Service is enabled for the sending domain and that the configured zone has outbound sending activity.
  • Slow or timed-out fetches: lower CLOUDFLARE_MAIL_MONITOR_FETCH_PAGE_SIZE or increase CLOUDFLARE_MAIL_MONITOR_API_TIMEOUT in the published config.

draliragab/filament-cloudflare-mail-monitor 适用场景与选型建议

draliragab/filament-cloudflare-mail-monitor 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 6 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 04 月 25 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「mail」 「monitoring」 「laravel」 「cloudflare」 「filament」 「email-service」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 draliragab/filament-cloudflare-mail-monitor 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 draliragab/filament-cloudflare-mail-monitor 我们能提供哪些服务?
定制开发 / 二次开发

基于 draliragab/filament-cloudflare-mail-monitor 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 6
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 39
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-04-25