Rails 6.1 Mailer邮件链接显示异常(带方括号)的原因及解决
问题原因及修复方案
原因分析
出现这个问题的核心原因是链接URL缺少HTTP/HTTPS协议头:
- 你定义的
@url是'www.johndcowan.com/living_muay_thai',没有带http://或https://协议前缀。Rails的link_to虽然会生成<a>标签,但邮件客户端无法识别无协议的字符串为有效可点击URL,最终将其解析为纯文本格式(也就是你看到的方括号包裹的样式)。 - 其他ERB标签能正常渲染,说明模板的ERB解析机制没问题,问题只出在URL的有效性上。
修复方法
方法1:直接给URL添加协议头
修改邮件发送器中的@url定义,补充完整的协议前缀:
# 邮件发送器代码修改 def new_student_badge_email @student = params[:student] @badge = params[:badge] @admin = params[:admin] # 添加https协议头 @url = 'https://www.johndcowan.com/living_muay_thai' mail(to: @student.email, subject: 'LMT: You Earned a New Badge') end
方法2:使用Rails路由助手生成标准化绝对URL(推荐)
如果你的Rails项目中已经定义了对应页面的路由,建议用路由助手的_url后缀方法生成带协议和域名的完整URL,避免硬编码:
# 假设路由定义为:get 'living_muay_thai', to: 'students#dashboard' def new_student_badge_email @student = params[:student] @badge = params[:badge] @admin = params[:admin] # 使用路由助手生成完整URL,指定协议和主机 @url = living_muay_thai_url(protocol: 'https', host: 'www.johndcowan.com') mail(to: @student.email, subject: 'LMT: You Earned a New Badge') end
修改后,link_to生成的<a href="https://xxx">标签会被邮件客户端正确识别为可点击链接,不再显示为纯文本格式。
内容的提问来源于stack exchange,提问作者John Cowan
相关产品推荐
相关产品推荐

