← MailChannelsCONTENT HISTORY

Update to MailChannels

Snapshot Sep 30, 2026 · 23:13 UTC · version 1.0.1

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Implement MailChannels outbound email with the official `mailchannels/mailchannels-php` package in PHP 8.1+ applications. Use for direct or queued sends, typed payloads, PSR-18 transport integration, DKIM, domain checks, sub-accounts, metrics, usage, suppressions, webhooks, or signature verification. Do not translate JavaScript or Python SDK method names into PHP.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 236
    },
    {
      "relative_path": "references/recipes.md",
      "size_in_bytes": 2338
    }
  ],
  "name": "mailchannels-php",
  "skill_md_contents": "---\nname: mailchannels-php\ndescription: Implement MailChannels outbound email with the official `mailchannels/mailchannels-php` package in PHP 8.1+ applications. Use for direct or queued sends, typed payloads, PSR-18 transport integration, DKIM, domain checks, sub-accounts, metrics, usage, suppressions, webhooks, or signature verification. Do not translate JavaScript or Python SDK method names into PHP.\n---\n\n# MailChannels PHP SDK\n\nFollow the application's Composer, framework, dependency-injection, HTTP-client,\nlogging, and test conventions. Read\n[references/recipes.md](references/recipes.md) for current SDK patterns.\n\n## Workflow\n\n1. Inspect `composer.json`, PHP version, framework, installed PSR-18 client,\n   PSR-17 factories, mail abstraction, and test runner.\n2. Install `mailchannels/mailchannels-php` and select one intentional PSR-18\n   transport. Inject it explicitly when auto-discovery would be ambiguous.\n3. Load `MAILCHANNELS_API_KEY` from server-side configuration. Construct one\n   `Client` per credential and inject it at the correct tenant boundary.\n4. Choose direct or queued submission deliberately. Queueing is asynchronous on\n   the provider; the PHP HTTP request remains synchronous.\n5. Prefer typed message objects when validation and static analysis matter.\n   Use named arguments for constructors with optional fields.\n6. Catch the most specific SDK exception needed. Configure transport timeouts\n   and application retries explicitly.\n7. Test requests and error paths without live sends.\n8. Add sender-domain checks, signed idempotent webhook handling, suppressions,\n   and manual setup notes before production.\n\n## Guardrails\n\n- Keep credentials out of committed configuration, browser code, request logs,\n  exceptions, and generated examples.\n- Preserve raw webhook bytes and validate digest, freshness, key ID, and\n  signature before parsing.\n- Retry only safe operations and honor `Retry-After`.\n- Retain application authorization, consent, budget, approval, and audit\n  controls even when provider limits are configured.\n- Use reserved example domains and fake recipients in tests.\n"
}

SHA-256 of public snapshot: 754b2c377d91ce8c63db8435e8d29fe9c4682bd6ea9b41d462985c93cce312b4