设计 - 通过开发发送的电子邮件确认,只是没有显示在收件箱中

时间:2014-10-13 15:52:17

标签: ruby-on-rails email devise mailer

在进一步阅读之前,请知道已经为我的用户模型实现:confirmable属性设置了所有内容:

devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable, :omniauthable, :omniauth_providers => [:facebook]

除了设置我的development.rb文件所需的代码:

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

config.action_mailer.delivery_method = :smtp

config.action_mailer.smtp_settings = {:address => "localhost", :port => 1025}

为了进一步调查此问题,我决定使用mailcatcher gem并且电子邮件显示已发送/接收:

enter image description here

当我使用真实的电子邮件地址时,此激活消息不会在我的收件箱中登陆。起初我以为可能是因为已知的事实是我将发件人的电子邮件地址保留为默认值,因为它可能被视为垃圾邮件。但在将其改为简短且可信的东西之后,仍然没有运气。这是因为我在development

1 个答案:

答案 0 :(得分:1)

如果你正在使用Mailcatcher,那么它正在做它应该做的事情。它只是接受端口1025上的电子邮件传递,就是这样,它不会依赖于任何地方的电子邮件。

  

MailCatcher运行一个超级简单的SMTP服务器,可以捕获任何消息   发送到它以显示在Web界面中。

即。您不会将这些电子邮件发送到这样的常规电子邮件服务器,您需要一个接收连接的SMTP服务器来提供此服务。您可以使用以下选项。

  • Google GMAIL
  • 像Sendgrid这样的服务(每天200封/电子邮件免费)发送电子邮件

我个人使用Sendgrid,因为它可以很好地传送到我的收件箱而不会被标记为垃圾邮件等。

要使用GMAIL发送电子邮件,请使用以下命令:

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :domain               => 'yourdomain.com',
  :user_name            => '<username>',
  :password             => '<password>',
  :authentication       => 'plain',
  :enable_starttls_auto => true  }

要获得额外的布朗尼点数,请执行以下操作以安全存储您的凭据。

好的,那么您要存储凭据的方法是使用带密码/ API密钥的YAML文件。永远不要将此文件检入您的仓库。

你可以在这样的初始化器上引用这个文件,(可能使密码成为全局变量或x,使用configatron等,由你决定)。

但这基本上是生产应用程序的工作方式,他们从存储在服务器本身的YAML文件中读取其重要设置。

这就是我使用的:

# Per environment settings
app_settings = YAML.load_file('config/secret_stuff.yml')    
password = app_settings['mygmailpwd']

不要使用ENVIRONMENT变量,因为它们存在各种安全问题。他们是反模式。