Drupal 10 Webform邮件HTML格式异常求助(Hostinger生产环境)
排查步骤与解决方案
1. 核对邮件格式核心配置
- 检查目标Webform的邮件设置:进入对应Webform的「邮件配置」面板,确认邮件格式选项已选中「HTML」而非「纯文本」。本地开发环境可能默认保留HTML配置,但生产环境部署时可能因配置重置或同步遗漏导致选项被修改。
- 检查SMTP插件全局设置:打开SMTP Authentication Support的配置页面,确认未开启「强制纯文本邮件」类选项,部分主机环境的插件配置会被服务器默认规则覆盖。
2. 处理模板缓存与文件问题
- 清除Drupal全缓存:执行
drush cr命令(有权限的话),或在后台「配置」>「性能」中手动清除所有缓存。生产环境默认开启缓存,可能导致旧的纯文本模板缓存未更新,无法加载自定义HTML模板。 - 确认自定义Twig模板的有效性:检查模板文件是否已正确上传至生产环境的
modules/custom/[你的Webform模块]/templates或themes/[你的主题]/templates/webform目录,且文件权限设置为服务器可读(通常为644)。
3. 排查Hostinger服务器层面限制
- 联系Hostinger技术支持:确认服务器是否存在HTML邮件自动转义或过滤规则,部分共享主机为防范垃圾邮件,会默认将HTML内容转义为纯文本格式。
- 进行基础HTML邮件测试:绕过Webform,用SMTP插件直接发送一封包含简单HTML标签(如
<h1>``<table>)的测试邮件,验证是否能正常渲染。如果测试邮件同样显示原始代码,说明问题出在SMTP配置或服务器规则,而非Webform模板。
4. 检查邮件头Content-Type设置
- 查看邮件原始内容:接收生产环境发送的邮件后,查看邮件的「原始数据」,确认
Content-Type字段是否为text/html; charset=utf-8。如果显示为text/plain,说明邮件格式被强制修改。 - 用hook强制设置邮件头:在自定义模块中实现
hook_mail_alter,强制指定Webform邮件的Content-Type,示例代码:
function custom_module_mail_alter(&$message) { if (strpos($message['id'], 'webform') !== FALSE) { $message['headers']['Content-Type'] = 'text/html; charset=utf-8'; } }
5. 验证模板语法与环境一致性
- 核对PHP/Twig版本:确认本地与生产环境的PHP版本(Drupal 10要求PHP 8.1及以上)、Twig版本一致,版本差异可能导致模板渲染逻辑异常,最终输出原始HTML代码。
- 检查HTML标签完整性:确认自定义Twig模板中的HTML标签均已正确闭合,生产环境的渲染规则更严格,未闭合标签可能导致模板解析失败。
内容的提问来源于stack exchange,提问作者Jean MIONNET
相关产品推荐
相关产品推荐

