我尝试了各种配置,但仍然无法通过rails在我的开发环境中发送电子邮件。
我安装mailutils从命令行尝试这个并且它工作,我收到了电子邮件(当然是垃圾邮件):echo test | mail -s主题user@example.com
这是我的配置:
# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = true # still no logs about emails
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true # I can't believe I have to add this option. Does it even exist? I found it on google.
config.action_mailer.smtp_settings = {
:enable_starttls_auto => true,
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:authentication => :login,
:user_name => "some_user@gmail.com",
:password => "abc123",
}
这是邮件中的代码:
class UserMailer < ActionMailer::Base
default :from => "root@ubuntu"
def test_email
Rails.logger.debug 'test_email'
mail(:to => 'user@example.com', :subject => "testing rails")
end
end
控制器:
class PagesController < ApplicationController
def home
UserMailer.test_email
end
end
development.log:
[2012-03-01 18:26:45.859] DEBUG [bb44dee806d73eb60ab3ae16297f5c02] [127.0.0.1] [GET] [http://myapp:3000/] test_email
[2012-03-01 18:26:45.888] INFO [bb44dee806d73eb60ab3ae16297f5c02] [127.0.0.1] [GET] [http://myapp:3000/] Rendered user_mailer/test_email (1.6ms)
[2012-03-01 18:26:45.898] INFO [bb44dee806d73eb60ab3ae16297f5c02] [127.0.0.1] [GET] [http://myapp:3000/] Rendered pages/home.html.erb within layouts/application (1.1ms)
[2012-03-01 18:26:46.815] INFO [bb44dee806d73eb60ab3ae16297f5c02] [127.0.0.1] [GET] [http://myapp:3000/] Completed 200 OK in 455ms (Views: 112.4ms)
我也尝试过使用控制台:
root@ubuntu:/srv/www/myapp# rails c
Loading development environment (Rails 3.2.1)
irb(main):001:0> UserMailer.test_email
=> #<Mail::Message:32110400, Multipart: false, Headers: <To: user@example.com>, <Subject: testing rails>, <Mime-Version: 1.0>, <Content-Type: text/html>>
答案 0 :(得分:27)
UserMailer.test_email
只需创建一个Mail::Message
对象。要实际发送您需要做的电子邮件
UserMailer.test_email.deliver
(或从rails 4.2 deliver_now
/ deliver_later
开始)
答案 1 :(得分:9)
关于记录错误:
通过修补一个爆炸方法对应物来传递,这引发了异常。检查您是否拼写错误的用户名或密码,或者您只是设置了一些配置错误,这非常有用。
UserMailer.test_email.deliver!
答案 2 :(得分:1)
Rails 4.2的更新答案是:
UserMailer.test_email.deliver_now!
如果有任何错误,感叹号会引发异常。
答案 3 :(得分:0)
如果您怀疑这是您的设置,请尝试取出:域名。它不久前适用于我。(Net::SMTPAuthenticationError in rails 3.1.0.rc5 when connecting to gmail)
但我在mail
函数中没有看到:body选项。也许这就是问题所在。尝试从rails控制台发送它,看看会发生什么。 http://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail