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

Rails 7 API中SendGrid邮件器custom_args未生效问题排查

Rails 7 API中SendGrid custom_args不显示的问题解决方法

在Rails 7 API项目里用SendGrid做邮件主题A/B测试时,配置X-SMTPAPI头后,category能正常出现在控制台筛选器,但custom_args里的自定义参数始终无法被识别,以下是问题排查和解决方法:

问题代码的核心问题

你的两种写法都存在头信息传递或数据类型的潜在问题:

  1. 直接将X-SMTPAPI作为mail方法的参数传递,Rails可能无法正确识别为邮件头;
  2. 未确保custom_args的所有值都是字符串类型,SendGrid对非字符串值的解析可能存在兼容问题。

修正后的代码

def send_email(daily_content)
  # 获取A/B测试主题及元数据
  ab_test = SubjectLineAbTestingService.new(@user).generate_subject_line_test
  daily_content.subject = ab_test[:subject]

  # 构造标准的SMTPAPI头JSON
  smtpapi_headers = {
    category: ["daily_stats"],
    custom_args: {
      variation_id: ab_test[:variation].to_s,
      total_variations: ab_test[:total_variations].to_s,
      user_id: @user.id.to_s
    }
  }.to_json

  mail(
    to: @user.email,
    subject: ActionView::Base.full_sanitizer.sanitize(daily_content.subject).to_s,
    headers: { 'X-SMTPAPI' => smtpapi_headers }
  ) do |format|
    format.html
  end
end

关键调整点

  • 正确传递邮件头:通过headers选项将X-SMTPAPI传入mail方法,确保Rails正确处理头信息;
  • 统一字符串类型:将custom_args内的所有值转成字符串,避免SendGrid解析非字符串值时出现异常;
  • 验证JSON格式:可以添加puts smtpapi_headers输出生成的JSON,确保格式符合标准,示例正确格式:
    {"category":["daily_stats"],"custom_args":{"variation_id":"1","total_variations":"2","user_id":"123"}}
    

验证步骤

  1. 发送测试邮件后,进入SendGrid控制台的「邮件活动」页面;
  2. 点击单封邮件详情,查看「SMTPAPI头」部分,确认custom_args是否完整显示;
  3. 若仍不显示,检查Rails日志,确认X-SMTPAPI头未被篡改或额外转义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:52:44