我正在尝试在Rails 4中创建一个联系表单。我在这里做了一些挖掘并且能够使大部分内容工作。 (关注@ sethfri在这里的工作Contact Form Mailer in Rails 4)
现在我可以填写表格框并点击发送。在我的rails服务器中,它说邮件出站到我的电子邮件地址,但我的gmail框中没有收到任何内容,所以我认为我的smtp设置不正确。我的smtp设置是:
...配置/环境/ development.rb
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = 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 => "mydomain.net",
:user_name => "mygmailusername@gmail.com",
:password => "myGmailPassword",
:authentication => "plain",
:enable_starttls_auto => true
}
我也补充说 的 ... /配置/初始化/ smtp_settings.rb
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "mydomain.net",
:user_name => "gmailuser@gmail.com",
:password => "gmailPassword",
:authentication => "plain",
:enable_starttls_auto => true
}
我错过了什么/做错了什么?我玩了几件事(将default_url更改为端口1025,更改:port =>“587”更改为:port => 587)但没有成功。
感谢您的帮助!
答案 0 :(得分:54)
您必须正确设置域。目前在代码中发布了其“mydomain.net”。如果您想通过gmail发送,请将其更改为 gmail.com 。
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
user_name: 'xyz@gmail.com',
password: 'yourpassword',
authentication: :plain,
enable_starttls_auto: true
}
答案 1 :(得分:37)
如果您在使用gmail发送电子邮件(Google Apps帐户常见)时遇到Net :: SMTPAuthenticationError等错误,请访问gmail settings并启用安全性较低的应用以使应用程序正常运行。
答案 2 :(得分:7)
经过几个小时的搜索后,我找到了一种让它起作用的方法。对于我自己,我需要进行两步验证并使用Gmail应用程序密码
启用两步验证(也称为双因素身份验证)后,您需要为帐户添加额外的安全保护层。您使用您知道的内容(密码)和您拥有的内容(代码发送到手机)登录。
设置两步验证
应用密码是一个16位数的密码,可让应用或设备访问您的Google帐户。如果您使用两步验证并在尝试访问Google帐户时看到“密码不正确”错误,则可以使用应用程序密码解决问题。大多数情况下,每个应用程序或设备只需输入一次应用程序密码,因此不必担心记忆它
如何生成应用密码
答案 3 :(得分:1)
Google建议您使用OAuth 2.0进行登录。谷歌的这种配置“不太安全”,但他们容忍它。您必须在Google帐户设置中允许“安全性较低的连接”,或使用OAuth方式。 https://developers.google.com/identity/protocols/OAuth2
他们的红宝石图书馆仍然是阿尔法。 似乎有一些宝石为OAuth扩展了ActionMailer,但我从未使用它们。
答案 4 :(得分:0)
2019年,Rails 5更新了答案:
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_caching = false
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",
port: 587,
authentication: "plain",
enable_starttls_auto: true,
user_name: "stronglong64@gmail.com",
password: "tutorialrails",
domain: "smtp.gmail.com",
openssl_verify_mode: "none",
}