为什么 Action Mailer 生成的 URL 没有到达该站点?可能是我的邮件子域配置吗?

Why Action Mailer generated URLs are not reaching the site? Could it be my mail subdomain config?

我在 'www.example.com' 中托管了一个 Rails 应用程序。我的 objective 是将包含 link 的电子邮件发送到 url,指向我应用程序中的特定位置。

问题: 在开发中一切正常,但在生产中我的邮件程序 link 重定向到无法找到的服务器 DNS。

当我检查生成的 URL 时,我注意到它指向:“http://email.mail.example.com' instead of 'http://example.com”(我希望指出的地方)但我无法更改它或者找出它发生的原因。 我当前的代码是:

config/environments/production.rb

config.action_mailer.default_url_options = { host: 'example.com' }

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :authentication => :plain,
    :address => "smtp.mailgun.org",
    :port => 587,
    :domain => ENV['MAILGUN_DOMAIN'],
    :user_name => ENV['MAILGUN_USERNAME'],
    :password => ENV['MAILGUN_PASSWORD']
}

我的邮件视图中的 link

<%= link_to 'click here', url_for(@post) %>

我试过了

鉴于 URL 中的 'email.mail' 位,我假设我的域 DNS 配置存在问题。按照 Mailgun 的建议(在向他们添加域时),我正在为交易电子邮件使用子域 ('mail')。 按照建议,我在设置时添加了一条 CNAME 记录(主机:email.mail.example.com,值:mailgun.org)。

所以我试过更改这条记录,甚至一并删除,但都没有成功。

此外,我已经像下面这样更改了主机值,但似乎无论我做什么 URL 总是以 'email.mail'

开头
config.action_mailer.default_url_option = { host: 'mail.example.com' }

我还尝试更改 link 以查看是否提供了其他路径,例如:

post_url(@post)

不知道你能否帮我解决这个问题。如果我使用子域 'mail' 来处理交易电子邮件,Production.rb 的主机设置是否应该有所不同?我一直试图在网上找到答案,但我一直找不到任何类似的案例。

附加信息 每次有新 post

时,该应用程序应该会向某些用户发送电子邮件

我的邮件代码

class PostsMailer < ApplicationMailer

  def new_post_notification(user, post)
    @user = user
    @post = post
    mail to: "#{@user.email}", subject: "#{@post.user.username.capitalize} just posted"
  end
end

我的邮件视图

<body>

  <h2><%= @post.user.username.capitalize %> has just posted</h2>
  <p>Check <%= @post.user.username.capitalize %>'s  <%= link_to 'new post here', url_for(@post) %></p>

</body>

我对这里发生的事情完全错了。我的助手生成的 url 没问题,问题是 Mailgun(作为大多数 t运行sactional 电子邮件提供商)会生成一些伪造的散列 URLs,将用户引导到您的网站,同时能够跟踪用户是否单击或打开电子邮件。

在 Mailgun 中,那些散列的 URL 默认情况下会附加在您的电子邮件域中设置的任何子域。因此,即使附加了前缀,URL 也应该到达该站点。

目前还不清楚是什么问题,但肯定是 Mailgun 问题。我搬到 SendGrid 添加了一个带有子域的白标域,它工作得很好。更不用说更容易验证了。

SendGrid 有一个额外的好处,您可以使用不同的子域对 link 进行白标,效果也很好。

我向 Mailgun 询问了发生这种情况的原因,但仍在等待答复。我假设可能还需要在域的 DNS 设置中添加其他内容。

一旦有人 运行 遇到类似问题,我会在得到答案后立即 post 在这里。