所以我在我的 Rails 应用程序中设置邮件程序几乎完成了,但我似乎无法理解 https://guides.rubyonrails.org/action_mailer_basics.html 上的一条信息。
根据本教程,您可以指定自己的smtp_settings
选项,以便可以发送如下邮件:
def welcome_email
smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'example.com',
user_name: 'myfromemail@example.com',
password: "myPassword",
authentication: :plain,
enable_starttls_auto: true
}
mail(to: "destination@example.com",
subject: "Test Notification",
smtp_settings: smtp_settings
)
end
但这实际上行不通。底部的同一示例使用delivery_method
并传递哈希,就像我在本例中使用的一样。
如果我尝试在邮件程序上使用.deliver
方法,这是我得到的错误:
Errno::ECONNDENY (连接被拒绝 - 连接(2( for "localhost" 端口 25(
这几乎就像它完全忽略了我传递给mail
函数的 smtp 设置。我在这里做错了什么?
我已经查看了如何使用Actionmailer/Ruby on Rails发送具有多个动态smtp的电子邮件的示例,但是此方法不起作用:
delivery_method.settings.merge!(smtp_settings)
因为delivery_method
实际上是:smtp
的,这是不可能的。
delivery_method
选项似乎有效,但我需要传递其他内容,例如身份验证、SSL/TLS 甚至端口。这些似乎不是由delivery_method
选项提供的。
尝试在该帖子中实现解决方案之一会给我此错误:
MyMailer.delivery_method.settings.merge!(smtp_settings)
Traceback (most recent call last):
1: from (irb):3
NoMethodError (undefined method `settings' for :smtp:Symbol)
对于动态邮件服务器设置,您需要按以下方式进行配置
instance_email = Mailer.welcome_email
config_settings = {address: 'xyz.com', port: 587}
instance_email.delivery_method.settings.merge!
config_settings instance_email.deliver