You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Craft CMS:条目发布后自动发送邮件实现方案求助

分步实现Craft CMS活动发布邮件通知方案

1. 基础内容结构配置

1.1 创建带邮箱字段的分类组

  • 进入Craft后台,点击「分类」→「新建分类组」,命名比如「活动接收组」
  • 给这个分类组添加一个字段:类型选「单行文本」,命名为「接收邮箱」,设置为必填,输入提示写“填写该分类对应的接收邮箱”
  • 在这个分类组下创建分类条目,每个分类填写对应的邮箱地址(比如「线下活动组」→ event@example.com)

1.2 创建活动频道

  • 点击「频道」→「新建频道」,命名「活动」,设置合适的节结构(比如标题、活动详情、发布日期等基础字段)
  • 给这个频道添加一个字段:类型选「分类」,命名为「通知接收组」,关联刚才创建的「活动接收组」,设置为可多选(如果需要给多个分类发邮件)

2. 配置Craft邮件发送基础

  • 进入「设置」→「邮件」,配置你的邮件发送服务(比如用SMTP,填写主机、端口、用户名、密码,测试发送确保能正常发邮件)

3. 创建邮件通知模板

  • 进入「设置」→「模板」,在templates目录下新建一个email文件夹,里面创建event-notify.html模板文件
  • 模板内容示例:
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>新活动发布通知</title>
</head>
<body>
    <p>您好,有新活动发布,敬请查看:</p>
    <h3>{{ entry.title }}</h3>
    <p>{{ entry.eventDetails|raw }}</p>
    <p>发布时间:{{ entry.postDate|date('Y-m-d H:i') }}</p>
</body>
</html>

注:eventDetails是你活动频道里的详情字段名,替换成你实际的字段handle;如果需要纯文本邮件,再建一个event-notify.txt模板

4. 添加事件监听(无需复杂模块,用自定义插件实现)

  • 进入Craft后台的「设置」→「插件」,点击「新建插件」,命名比如「活动通知插件」,生成基础插件结构
  • 打开插件的主PHP文件(比如src/Plugin.php),在init()方法里添加以下代码:
use craft\events\ModelEvent;
use craft\services\Entries;
use craft\mail\Message;
use yii\base\Event;

public function init()
{
    parent::init();

    // 监听条目保存事件,仅当活动条目发布时触发
    Event::on(
        Entries::class,
        Entries::EVENT_AFTER_SAVE_ENTRY,
        function(ModelEvent $event) {
            $entry = $event->model;
            // 只处理「活动」频道的条目,且是刚发布的(不是草稿)
            if ($entry->section->handle === 'events' && $entry->status === 'live' && $event->isNew) {
                // 获取选中的分类
                $categories = $entry->notifyRecipientGroups; // 替换成你的分类字段handle
                if (!$categories) return;

                // 遍历分类,收集邮箱
                $emails = [];
                foreach ($categories as $category) {
                    $email = $category->email; // 替换成你的分类邮箱字段handle
                    if ($email) $emails[] = $email;
                }
                if (empty($emails)) return;

                // 发送邮件
                $message = new Message();
                $message->setTo($emails);
                $message->setSubject('新活动发布通知');
                $message->setHtmlBody(\Craft::$app->view->renderTemplate('email/event-notify', ['entry' => $entry]));
                // 如果有纯文本模板,添加下面一行
                // $message->setTextBody(\Craft::$app->view->renderTemplate('email/event-notify.txt', ['entry' => $entry]));

                \Craft::$app->mailer->send($message);
            }
        }
    );
}

注意:把代码里的events(频道handle)、notifyRecipientGroups(分类字段handle)、email(分类邮箱字段handle)替换成你实际设置的字段/频道handle

5. 测试功能

  • 创建一个新的活动条目,选择对应的通知分类,发布条目
  • 检查对应邮箱是否收到通知邮件,如果没收到,查看Craft后台的「日志」→「邮件日志」排查问题

内容的提问来源于stack exchange,提问作者Remo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:35:20