【问题标题】:links in email breaking电子邮件中断中的链接
【发布时间】:2016-06-16 06:25:52
【问题描述】:

我有一个 Rails 应用程序,并且正在使用设计进行身份验证。我注意到,当重置密码的电子邮件在生产中通过时,重置密码的链接会中断,它会重定向到我的根 URL。

在开发过程中,它会将我带到登录页面,并显示一条 Flash 消息,指出如果没有有效的令牌,我无法访问此页面,并且必须提供完整的 URL。

虽然我已经自定义了电子邮件的外观,但我正在使用设计方法来生成链接,即。 edit_password_url(@resource, reset_password_token: @token) %>

理想情况下,这应该在开发环境中出现 http://localhost:3000/users/password/edit?reset_password_token=[GENERATED_TOKEN]

但是从服务器日志中观察到的情况如下: http://localhost:3000/users/password/edit?reset_pass= word_token=3DQaz7y_f63yR3MZmReUY5

在两个单独的行上。在生产中,我使用的是 sendgrid,所以我看不到通过检查链接生成的 url。

我还注意到每个= 符号都会转换为=3D

期待一些建议。如果我必须提供更多数据,请告诉我。

【问题讨论】:

  • 您是否更改了 production.rb 文件中的邮件地址?
  • 是的,production.rb default_url_options 设置为我的应用程序的 url
  • 换行和 %3d 几乎可以肯定是红鲱鱼:这就是引用 printable(用于电子邮件的编码之一)所做的。
  • 最明显的补充数据是这些链接在生产中的样子?
  • @FrederickCheung 是的,我认为这就是问题所在。邮件是 miltipart 电子邮件,因此文本邮件中的链接很好,但 html 的链接一团糟。问题是我想避免覆盖设计邮件程序,我猜在这种情况下我将不得不覆盖每一种传递方法。我正在想办法将Content-Transfer-Encoding 标头设置为7bit。我尝试将其设置为 ApplicationMailer 的默认值,但这并没有改变任何内容

标签: ruby-on-rails devise actionmailer sendgrid


【解决方案1】:

我确实发现了这个问题,事实证明这与传输编码无关。 尽管内容传输编码,但在接收端,url 确实得到了完全正确的解析。

但是,由于我是自动生成链接,它们被生成并作为http 链接发送。我正在使用一个 CDN,它将所有流量重定向到 https 一个页面规则,我在那里添加了一个页面规则来解决一些问题,导致这个 http 链接重定向到 https 并最终重定向到应用程序根目录。这就是导致问题的原因。

使用https 生成绝对网址是必需的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 2013-04-19
    相关资源
    最近更新 更多