我在将ActionMailer集成到我的Rails应用程序时遇到了一些问题,因此我尝试制作一个非常简单的示例来测试它。我按照ActionMailer guide进行了操作。
当用户访问/test
时,它应该向他们发送电子邮件并将其重定向到根目录。下面的日志似乎表明邮件是在没有错误的情况下发送的,但是我的收件箱中没有收到任何内容。
/test
时的UserMailer#welcome: processed outbound mail in 16.5ms
Sent mail to me@gmail.com (6.5ms)
Date: Fri, 15 Aug 2014 14:38:26 +0800
From: itsupport@mydomain.com
To: me@gmail.com
Message-ID: <53edaae23b766_58de3fe95291a584391d@MacBook-Pro.local.mail>
Subject: Welcome
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
#message content correctly formatted
Redirected to http://localhost:3000/
Completed 302 Found in 29ms (ActiveRecord: 1.2ms)
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => 'smtp.gmail.com',
:port => 587,
:domain => 'mydomain.com',
:user_name => 'itsupport@mydomain.com',
:password => 'password',
:authentication => 'plain',
:enable_starttls_auto => true }
class UserMailer < ActionMailer::Base
default from: "itsupport@mydomain.com"
def welcome(user)
@user = user
mail(to: user.email, subject: 'Welcome')
end
end
def sendemail
UserMailer.welcome(current_user).deliver
redirect_to root_path
end
get 'test' => 'lessons#sendemail'
我已经尝试了
日志中的消息ID表明它是从我的个人计算机而不是gmail发送的 - 我是完全错了还是这个问题?
如果您可以帮我收到这些电子邮件,我非常感谢!
编辑 - 我已经将应用程序推送到Heroku以解决gmail不喜欢localhost发送的电子邮件的可能性,正如一些答案所暗示的那样。我的Heroku记录说邮件已发送到me@gmail.com,但我的收件箱中仍未显示任何内容......
答案 0 :(得分:1)
我尝试使用SMTP设置创建一个全新的应用程序,看它是否有效,它确实有效!它让我想知道有什么不同,我意识到它可能是我在我的应用程序上的Devise gem。正在搜索有关Devise电子邮件的帮助this answer,这导致我将代码更改为:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:authentication => 'plain',
:user_name => "me@domain.com",
:password => "password",
:enable_starttls_auto => true
}
现在电子邮件正在发送!
如果有人能够详细解释为什么config.action_mailer
没有工作,那就太棒了,为了我自己的理解。
答案 1 :(得分:0)
也许您在config/initializers
中有一个ActionMailer SMTP配置,它会覆盖您正确的SMTP设置。
答案 2 :(得分:0)
对我来说,解决方案是改变身份验证:
ActionMailer::Base.smtp_settings = {authentication: :plain}
到ActionMailer::Base.smtp_settings = {authentication: 'plain'}
。
字符串而不是符号。这很奇怪,因为它适用于我上周写的最后两个邮件功能。