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

时间:2016-11-11 01:53:00

标签: ruby-on-rails url subdomain actionmailer

我在“www.example.com”中托管了一个Rails应用。我的目标是发送一封电子邮件,其中包含指向我应用中特定位置的网址的链接。

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

当我检查生成的网址时,我注意到它指向:“http://email.mail.example.com”而不是“http://example.com”(我希望指出的地方),但我无法做到改变这一点或弄清楚它为什么会发生。 我目前的代码是:

配置/环境/ 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_to 'click here', url_for(@post) %>

我试过

鉴于URL中的'email.mail'位,我假设我的域DNS配置存在问题。遵循Mailgun的建议(当他们添加域名时)我正在使用子域('mail')来处理交易电子邮件。 根据建议,我在设置时添加了CNAME记录(Host:email.mail.example.com,Value:mailgun.org)。

所以我尝试更改此记录,甚至一起删除它们都没有成功。

此外,我已经更改了主机价值,但似乎无论我做什么,网址始终以'email.mail'开头

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

我也尝试更改链接以查看是否提供了其他路径,如:

post_url(@post)

我想知道你是否可以帮助我。如果我使用子域“邮件”作为交易电子邮件,那么Production.rb中的主机设置是否应该不同?我一直试图在网上找到答案,但我找不到任何类似的案例。

其他信息 该应用程序应该在每次有新帖子时向某些用户发送电子邮件

我的邮件代码

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>

1 个答案:

答案 0 :(得分:0)

我对这里发生的事情完全错了。我的帮助者生成的网址很好,问题是Mailgun(作为大多数交易电子邮件提供商)会生成一些虚构的网址,用于将用户引导到您的网站,同时能够跟踪用户是否点击或打开电子邮件。

在Mailgun中,默认情况下会在电子邮件域中添加任何子域名。因此,即使添加了前缀,网址也应该到达网站。

仍然不清楚问题是什么,但它肯定是一个Mailgun问题。我移动到SendGrid添加了一个带有子域的白色标记域,它运行得很好。更不用说它更容易验证。

SendGrid还有一个额外的好处,就是您可以使用不同的子域对链接进行白色标记,这个子域也可以完美地运行。

我向Mailgun询问了为什么会发生这种情况并仍在等待答案的原因。我假设在域名的DNS设置中可能还有其他内容。

如果有人遇到类似的问题,我会立即在这里发帖。