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

如何在MODX的Formit邮件中移除附件?

解决Formit Email钩子移除附件的问题

我之前也踩过Formit更新后覆盖自定义设置的坑,给你几个可靠的解决方案,能确保邮件里完全不包含附件,同时不影响其他功能:

方法1:使用beforeEmail前置钩子清理附件数据

这是最稳妥的方式——Formit在触发email钩子前会先执行beforeEmail钩子,我们可以在这里提前清空附件相关的数据:

  1. 创建一个新的MODX片段(比如命名为clearFormitAttachments),内容如下:
// 清空attachments字段,阻止email钩子处理附件
$hook->setValue('attachments', []);
// 如果你的附件字段是自定义命名(比如`user_upload`),替换成对应的字段名
// $hook->setValue('user_upload', []);
return true;
  1. 在你的Formit调用配置里,把这个片段添加到hooks参数中,放在email钩子前面:
[[!FormIt?
    &hooks=`beforeEmail,email`
    &beforeEmail=`clearFormitAttachments`
    // 其他配置参数...
]]

这样在发送邮件前,附件数据就被清空了,email钩子自然不会处理附件,而且不影响其他可能用到附件的后续操作(比如保存到数据库)。

方法2:用emailExcludeFields参数排除附件字段

Formit的email钩子支持通过emailExcludeFields参数指定不包含在邮件里的字段,同时也会跳过对这些字段的附件处理:

在Formit配置里添加这个参数,把你的附件字段名填进去(多个字段用逗号分隔):

[[!FormIt?
    &hooks=`email`
    &emailExcludeFields=`attachments`
    // 如果是自定义附件字段,比如`invoice_upload`,就写:
    // &emailExcludeFields=`invoice_upload`
    // 其他配置参数...
]]

这个方法更简洁,但要注意字段名必须和你表单里的附件字段完全一致,否则不会生效。

方法3:自定义邮件模板(仅隐藏内容,不阻止发送)

如果只是不想在邮件内容里显示附件信息,但Formit还是会尝试发送附件的话,可以修改你的邮件模板,去掉所有和附件相关的输出代码。不过这个方法不能真正阻止附件被发送,所以更适合配合前两种方法使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:19:56