【问题标题】:Error "An SMTP To address is required to send a message" on Learn-Rails TutorialLearn-Rails 教程中的错误“发送消息需要 SMTP 收件人地址”
【发布时间】:2015-10-31 13:24:14
【问题描述】:

我在Learn Ruby on Rails 教程的“发送邮件”部分不断收到错误消息。

我已尝试在本地计算机上克隆 https://github.com/RailsApps/learn-rails.git,但问题仍然存在。

下面是我的代码:

user_mailer.rb

class UserMailer < ApplicationMailer
  default from: "do-not-reply@example.com"

  def contact_email(contact)
    @contact = contact
    mail(to: Rails.application.secrets.owner_email, from: @contact.email, :subject => "Website Contact")
  end
end

development.rb

config.action_mailer.smtp_settings = {
    address: "smtp.gmail.com",
    port: 587,
    domain: Rails.application.secrets.domain_name,
    authentication: "plain",
    enable_starttls_auto: true,
    user_name: Rails.application.secrets.email_provider_username,
    password: Rails.application.secrets.email_provider_password
  }
  # 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

secrets.yml

development:
  email_provider_username: <%= ENV["GMAIL_USERNAME"] %>
  email_provider_password: <%= ENV["GMAIL_PASSWORD"] %>
  mailchimp_api_key: <%= ENV["MAILCHIMP_API_KEY"] %>
  mailchimp_list_id: <%= ENV["MAILCHIMP_LIST_ID"] %>
  domain_name: example.com
  owner_email: <%= ENV["OWNER_EMAIL"] %>

我还确保在 .bashrc 文件中正确设置了环境变量。

任何帮助将不胜感激,并提前感谢您!

【问题讨论】:

  • 尝试将您的 Gmail 凭据硬编码到 secrets.yml 文件中。不检查进git,看看ENV变量有没有问题。
  • 嗨丹尼尔,我已经尝试将我的 Gmail 凭据硬编码到 secrets.yml 或 user.mailer.rb 文件中,问题仍然存在。
  • 看起来域名是 example.com 或 nil

标签: ruby-on-rails railsapps learn-ruby-on-rails


【解决方案1】:

对于开发,您可以使用开信刀 gem。发送电子邮件后,它会自动在您的默认浏览器中打开。

将以下内容添加到 Gemfile 的开发部分。

gem 'letter_opener'

【讨论】:

  • 谢谢扎克!我试过了,但同样的错误仍然存​​在。
  • 你之后捆绑安装了吗?
【解决方案2】:

我也遇到了同样的问题。我尝试了各种方法,从禁用两步验证 (Google) 到在 secrets.yml 中硬编码我的凭据,但成功率为零。

我使用了我的 outlook.com 凭据,它运行良好。

注意:这需要更改 development.rb

config.action_mailer.smtp_settings = {       
    address : "smtp.live.com"
    # everything else is identical.
}

【讨论】:

  • 我认为 Google 最近更改了 Gmail API?
【解决方案3】:

为 gmail 设置它

ActionMailer::Base.delivery_method = :smtp
    ActionMailer::Base.smtp_settings = {
      :address => "smtp.gmail.com",
      :domain => "gmail.com",
      :port => 587, 
      :user_name => "username",
      :password => "password",
      :authentication => :plain,
      :enable_starttls_auto => true,
      :openssl_verify_mode => 'none' 
    }

让它成为现实 config.action_mailer.raise_delivery_errors = true 它会告诉是否发生任何错误。

也可以试试端口25

【讨论】:

    猜你喜欢
    • 2017-04-30
    • 2013-08-27
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    相关资源
    最近更新 更多