drupal-mail

GitHub

配置 Drupal 邮件系统,支持本地 Mailpit 测试与生产环境 Mailchimp 发送。涵盖 HTML 渲染、插件组合及故障排查,确保邮件正确投递。

skills/drupal-mail/SKILL.md grasmash/drupal-claude-skills

Trigger Scenarios

配置本地邮件测试环境 调试邮件发送问题 设置生产邮件网关

Install

npx skills add grasmash/drupal-claude-skills --skill drupal-mail -g -y
More Options

Use without installing

npx skills use grasmash/drupal-claude-skills@drupal-mail

指定 Agent (Claude Code)

npx skills add grasmash/drupal-claude-skills --skill drupal-mail -a claude-code -g -y

安装 repo 全部 skill

npx skills add grasmash/drupal-claude-skills --all -g -y

预览 repo 内 skill

npx skills add grasmash/drupal-claude-skills --list

SKILL.md

Frontmatter
{
    "name": "drupal-mail",
    "description": "Drupal mail system configuration for local testing (Mailpit) and production (Mailchimp Transactional). Covers HTML email rendering, Content-Type headers, sender\/formatter plugins, and troubleshooting. Use when testing emails locally, debugging email issues, or configuring mail delivery."
}

Drupal Mail System Configuration

Quick Reference

Local Testing (DDEV Mailpit)

Working configuration for HTML emails in Mailpit:

# mailsystem.settings
defaults:
  sender: php_mail
  formatter: mailchimp_transactional_mail

Enable/disable notifications:

# Check if notifications are disabled
ddev drush state:get my_notifications.disabled

# Enable notifications (for local testing)
ddev drush state:set my_notifications.disabled 0

# Disable notifications (to stop local emails)
ddev drush state:set my_notifications.disabled 1

View Mailpit:

Production Configuration

Mailchimp Transactional (Mandrill) for sending:

# mailsystem.settings
defaults:
  sender: mailchimp_transactional_mail
  formatter: mailchimp_transactional_mail

Mail System Architecture

Key Concepts

  1. Sender: The plugin that actually sends the email (SMTP, PHP mail(), API)
  2. Formatter: The plugin that formats the email body (converts HTML, wraps content)
  3. Content-Type Header: Must be set to text/html for HTML rendering

Plugin Combinations

Environment Sender Formatter HTML Works? Notes
Local (Mailpit) php_mail mailchimp_transactional_mail Yes Recommended for local testing
Local (Mailpit) php_mail php_mail No Strips HTML to plain text
Production mailchimp_transactional_mail mailchimp_transactional_mail Yes Uses Mandrill API
Production symfony_mailer symfony_mailer Yes Requires SMTP config

HTML Email Requirements

Content-Type Header

Critical: Module must set Content-Type header in hook_mail_alter():

/**
 * Implements hook_mail_alter().
 */
function my_notifications_mail_alter(&$message) {
  if ($message['module'] === 'my_notifications') {
    $message['headers']['Content-Type'] = 'text/html; charset=UTF-8';
  }
}

Without this, HTML renders as plain text even with correct formatter.

Message Template Format

Config entity format (message.template.*.yml):

text:
  -
    value: |-
      Subject line with [tokens]

      <p style="margin: 0 0 16px 0; color: #333;">HTML body content</p>
    format: full_html

Key points:

  • First line = email subject (extracted, stripped of HTML)
  • Rest = HTML email body
  • Use inline styles (email clients strip <style> tags)
  • format: full_html enables HTML rendering

Configuration Commands

Check Current Config

# View mail system settings
ddev drush cget mailsystem.settings

# View notification plugin settings
ddev drush cget my_notifications.settings

# Check global disable state
ddev drush state:get my_notifications.disabled

Switch Between Local and Production

For local testing:

# Enable HTML email capture in Mailpit
ddev drush cset mailsystem.settings defaults.sender php_mail -y
ddev drush cset mailsystem.settings defaults.formatter mailchimp_transactional_mail -y
ddev drush state:set my_notifications.disabled 0
ddev drush cr

Reset to production:

ddev drush cset mailsystem.settings defaults.sender mailchimp_transactional_mail -y
ddev drush cset mailsystem.settings defaults.formatter mailchimp_transactional_mail -y
ddev drush state:set my_notifications.disabled 1
ddev drush cr

Testing Notifications

Test Commands

Give your notification module drush test commands so each template can be fired on demand, e.g.:

# Test entity deleted notification
ddev drush my-notifications:test-entity-deleted

# Test entity updated notification
ddev drush my-notifications:test-entity-updated

# Test comment notification
ddev drush my-notifications:test-comment

# Test group invitation
ddev drush my-notifications:test-invitation

Verify Email in Mailpit

  1. Open https://<project>.ddev.site:8026
  2. Check Headers tab: Content-Type: text/html; charset=UTF-8
  3. Check HTML tab: Proper styled rendering
  4. Check Text tab: Plain text fallback

Mailpit API

# List recent messages
curl -sk "https://<project>.ddev.site:8026/api/v1/messages" | jq '.messages[:3]'

# Get specific message with HTML
curl -sk "https://<project>.ddev.site:8026/api/v1/message/{ID}" | jq '{Subject, HTML}'

# Delete all messages
curl -sk -X DELETE "https://<project>.ddev.site:8026/api/v1/messages"

Troubleshooting

No Emails Appearing

  1. Check global disable state:

    ddev drush state:get my_notifications.disabled
    # If TRUE, run: ddev drush state:set my_notifications.disabled 0
    
  2. Check sender plugin:

    ddev drush cget mailsystem.settings defaults.sender
    # For Mailpit: should be php_mail
    
  3. Check DDEV is running:

    ddev describe | grep -i mail
    
  4. Test raw PHP mail:

    ddev exec "php -r \"mail('test@example.com', 'Test', 'Body');\""
    # Should appear in Mailpit immediately
    

HTML Not Rendering (Shows Raw Tags)

  1. Check formatter plugin:

    ddev drush cget mailsystem.settings defaults.formatter
    # Should be mailchimp_transactional_mail for HTML
    
  2. Check Content-Type header in hook_mail_alter():

    grep -r "Content-Type.*text/html" web/modules/custom/
    
  3. Check template format:

    grep "format:" config/default/message.template.*.yml
    # Should show: format: full_html
    

Emails Sending to Production

  1. Check sender plugin:

    ddev drush cget mailsystem.settings defaults.sender
    # If mailchimp_transactional_mail, emails go to real addresses!
    
  2. Switch to local capture:

    ddev drush cset mailsystem.settings defaults.sender php_mail -y
    

Module Dependencies

  • mailsystem: Routes mail through configured plugins
  • mailchimp_transactional: Provides Mandrill integration
  • message: Provides template-based message entities
  • my_notifications: Custom notification system

File Locations

  • Mail config: config/default/mailsystem.settings.yml
  • Notification settings: config/default/my_notifications.settings.yml
  • Message templates: config/default/message.template.*.yml
  • Notification processor: web/modules/custom/my_notifications/src/Plugin/QueueWorker/NotificationProcessor.php
  • Mail alter hook: web/modules/custom/my_notifications/my_notifications.module

Apply to Files

  • config/default/mailsystem.settings.yml
  • config/default/my_notifications.settings.yml
  • config/default/message.template.*.yml
  • web/modules/custom/my_notifications/**/*.php
  • web/modules/custom/my_notifications/*.module

Version History

  • 19514f4 Current 2026-10-19 07:28

Same Skill Collection

skills/acquia-source/SKILL.md
skills/canvas-contribution/SKILL.md
skills/claude-code-mcp-setup/SKILL.md
skills/design-review/SKILL.md
skills/drupal-api-endpoints/SKILL.md
skills/drupal-config-reconcile/SKILL.md
skills/drupal-ddev/SKILL.md
skills/drupal-search-api/SKILL.md
skills/mockup-parity/SKILL.md
skills/sentry-integration/SKILL.md
skills/skill-developer/SKILL.md
skills/drupal-at-your-fingertips/SKILL.md
skills/drupal-canvas-sdc/SKILL.md
skills/drupal-canvas/SKILL.md
skills/drupal-config-mgmt/SKILL.md
skills/drupal-contrib-mgmt/SKILL.md
skills/drupal-deploy-safety/SKILL.md
skills/drupal-performance/SKILL.md
skills/drupal-simple-oauth/SKILL.md
skills/drupal-testing/SKILL.md
skills/drupal-views-patterns/SKILL.md
skills/drupal-vite-theme/SKILL.md
skills/ivangrynenko-cursorrules-drupal/SKILL.md

Metadata

Files
0
Version
19514f4
Hash
dc372d77
Indexed
2026-10-19 07:28

Accueil - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-11-01 11:53
浙ICP备14020137号-1