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