Action Mailer不在Dev环境中工作

时间:2015-04-10 16:17:19

标签: ruby-on-rails actionmailer

我在这里查看了其他Action Mailer的答案,似乎没有一个解决方案可以解决这个问题。

我正在尝试实现显示here的Action Mailer,但它根本不适用于我。我使用FB登录来收集用户信息,然后使用find_or_create选项更新用户。

user = User.find_or_create_by(fb_id: profile_hash["id"])
  user.update(sanitized_hash)
  user.save

  log_in user

  redirect_to current_user_profession(user)

在用户控制器中,我在save方法上调用mail方法。但由于某种原因,一旦保存用户实例,它就不会发送电子邮件。

def create
@user = User.new(user_params)

@image = Image.new

respond_to do |format|
  if @user.save
    UserMailer.welcome_email(@user).deliver
    log_in @user
    format.html { redirect_to "/talent", notice: 'User was successfully created.' }
    format.json { render :show, status: :created, location: @user }
  else
    format.html { render :new }
    format.json { render json: @user.errors, status: :unprocessable_entity }
  end
end

我确信我的所有编码都是正确的,但由于某种原因,它不会发送欢迎电子邮件。根据我的理解,我使用我的个人Gmail帐户凭据,用我的用户名和密码,这对我来说似乎很奇怪,但我还是做了。

这是我的development.rb

config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = {:host => 'localhost:3000'}

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",
port: 587,
domain: "gmail.com",
authentication: "plain",
enable_starttls_auto: true,
user_name: ENV['GMAIL_USER_NAME'],
password: ENV['GMAIL_PASSWORD']
}

要发送的实际电子邮件

<!doctype html>
<html>
<head>
  <meta charset="UTF-8">
  <link type="text/css" rel="stylesheet" href="styles/style.css"/>
</head>
<body>
  <h1>Hey <%= @user.name  %>,</h1>
    <p>Welcome to the site!</p>
    <p>To login to the site just click on this link <%= @url %></p>
</body>
</html>

user_mailer.rb文件。

class UserMailer < ApplicationMailer
  default from: "support@mystyleblox.com"

  def welcome_email(user)
    @user = user
    @url = 'http://www.mystyleblox.com'
    mail(to:@user.email, subject:'test welcome email')
  end
end

任何帮助将不胜感激,如果有人可以解释development.rb文件以及gmail访问所需的内容,这是我的个人帐户,还是我必须与我的个人帐户分开进行的操作。提前致谢。

1 个答案:

答案 0 :(得分:0)

为了消除问题的可能来源,可能值得对您的gmail用户名和密码进行硬编码 - 再次,就像测试一样 - 这样就不会出现加载ENV vars的问题。

我使用Rails.application.secrets.domain_name来隐藏我的超级秘密真棒域但在我到达之前,我通常使用硬编码值等。我注意到你和我的本地设置之间的一件事是域名。我的域名不是gmail.com;相反,它是我的应用程序的实际域。

在我的应用程序中,我有以下内容适用于本地服务器发送电子邮件。

config.action_mailer.smtp_settings = {
  address: "smtp.gmail.com",
  port: 587,
  domain: 'my domain',
  authentication: "plain",
  enable_starttls_auto: true,
  user_name: 'my email address',
  password: 'mypass'
}
# ActionMailer Config
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.raise_delivery_errors = true
# Send email in development mode?
config.action_mailer.perform_deliveries = true

只是一个想法...