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)、
5. 测试功能
- 创建一个新的活动条目,选择对应的通知分类,发布条目
- 检查对应邮箱是否收到通知邮件,如果没收到,查看Craft后台的「日志」→「邮件日志」排查问题
内容的提问来源于stack exchange,提问作者Remo
相关产品推荐
相关产品推荐

