Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设计未发送的确认电子邮件_Ruby On Rails_Devise Confirmable_Cloud9 - Fatal编程技术网

Ruby on rails 设计未发送的确认电子邮件

Ruby on rails 设计未发送的确认电子邮件,ruby-on-rails,devise-confirmable,cloud9,Ruby On Rails,Devise Confirmable,Cloud9,我正在Cloud9上开发一个Rails应用程序,我正在尝试做一些非常简单的事情,那就是让Desive确认电子邮件正常工作。由于某些原因,他们没有被发送 我正在使用SendGrid实现电子邮件功能。我知道SendGrid工作正常,因为我可以制作一个发送测试电子邮件的简单ActionMailer。但由于某些原因,Desive确认邮件并未发送。我可以看到它正在调用ActionMailer::Base.mail方法,但邮件从未送达 我不知道如何调试这个 只是为了防止建议检查已经工作的内容: 用户选项包

我正在Cloud9上开发一个Rails应用程序,我正在尝试做一些非常简单的事情,那就是让Desive确认电子邮件正常工作。由于某些原因,他们没有被发送

我正在使用SendGrid实现电子邮件功能。我知道SendGrid工作正常,因为我可以制作一个发送测试电子邮件的简单ActionMailer。但由于某些原因,Desive确认邮件并未发送。我可以看到它正在调用
ActionMailer::Base.mail
方法,但邮件从未送达

我不知道如何调试这个

只是为了防止建议检查已经工作的内容:

  • 用户选项包括
    :confirmable
  • 我正在设置
    config.action\u mailer.perform\u deliveries=true
  • 我在
    config/initializers/setup\u mail.rb
代码:


我猜我的解决方案不是预期的解决方案,但它是有效的(尽管我不知道为什么)

在文件
config/initializers/setup_mail.rb
中,我添加了以下两行:

  • ActionMailer::Base.layout'mailer'
  • ActionMailer::Base.default from:from@example.com“
  • 这些可能是应该在Desive的一些配置文件中指定的内容,但我没有看到任何这样做的说明


    [编辑]只有第2行很重要。“发件人”地址是伪造的电子邮件地址并不重要,但如果它丢失,电子邮件将无法发送。

    在尝试调试过程中,我尝试从rails控制台中调用
    mail
    。我发现直接调用
    ActionMailer::Base.mail
    不会导致邮件被传递,但是如果我通过
    ActionMailer
    的子类间接调用它,它会工作。到底为什么底层阶级不起作用?为什么会起作用?ActionMailer::Base被设置为子类。但子类似乎没有添加太多功能:
    class ApplicationMailer
    与字符串相比,端口不应该是整数吗?检查
    config.action\u mailer.raise\u delivery\u errors=false
    行,将其设置为true,以便可以看到错误(如果有)
    if Rails.env.development? || Rails.env.production?
    ActionMailer::Base.delivery_method = :smtp
    ActionMailer::Base.smtp_settings = {
      address:        'smtp.sendgrid.net',
      port:           '2525',
      authentication: :plain,
      user_name:      ENV['SENDGRID_USERNAME'],
      password:       ENV['SENDGRID_PASSWORD'],
      domain:          "sendgrid.com",
      enable_starttls_auto: true
    }