邮件错误丢失模板

时间:2015-06-22 15:50:48

标签: ruby-on-rails ruby ruby-on-rails-4 rake actionmailer

您好,

当我尝试执行操作时, ActionMailer 出现问题:

rake send_email

我收到错误:

    rake aborted!
ActionView::MissingTemplate: Missing template user_mailer/mailer with "mailer". Searched in:
  * "user_mailer"

这是我的:

寄件人/ user_mailer.rb

class UserMailer < ActionMailer::Base
  default from: "from@example.com"

  def mailer(user)
    @user = user
    mail(to: @user.email, subject: 'Test')
  end

end

视图/ user_mailer文件/ mailer.html.erb

<!DOCTYPE html>
<html>
  <head>
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
  </head>
  <body>
    <p>
      Sample mail.
    </p>
  </body>
</html>

视图/ user_mailer文件/ mailer.text.erb

Sample mail.

LIB /任务/ emails_task.rake

desc 'send email'
task send_email: :environment do
  UserMailer.mailer(User.last).deliver!
end

配置/环境/ development.rb

# I recommend using this line to show error
  config.action_mailer.raise_delivery_errors = true

  # ActionMailer Config
  config.action_mailer.delivery_method = :letter_opener

# config.action_mailer.default_url_options = { :host => 'localhost:3000' }
# config.action_mailer.delivery_method = :smtp
# SMTP settings for gmail
config.action_mailer.smtp_settings = {
 :address              => "smtp.gmail.com",
 :port                 => 587,
 :user_name            => ENV['gmail_username'],
 :password             => ENV['gmail_password'],
 :authentication       => "plain",
:enable_starttls_auto => true
}

# Send email in development mode?
config.action_mailer.perform_deliveries = true

我在stackoverflow上搜索了解决方案,我尝试了很多类似问题的答案,但不幸的是,这些都没有为我工作。

我找到了解决方案,当我将主体添加到邮件程序方法时:

def mailer(user)
  @user = user
  mail(to: @user.email, subject: 'Test', body: 'something')
end

然后它确实有效,但我希望在一个单独的文件中有一个正文,并使用户名和其他东西变得更复杂。

如果有人知道如何解决这个问题,那么我将非常感激:)

8 个答案:

答案 0 :(得分:3)

尝试添加布局

import urllib2, json
response = urllib2.urlopen('https://www.udemy.com/api-2.0/channels/1640/courses?is_angular_app=true&p=2')
data = json.load(response)

i = 0;
for data["url"] in data['results']:
    print data['results'][i]['url']
    i+=1

答案 1 :(得分:2)

我重命名了我的方法并且有效。也许该方法的名称不能是邮件或邮件...

答案 2 :(得分:2)

class UserMailer < ActionMailer::Base
  default from: "from@example.com"

  layout "mailer"

  def mailer(user)
   @user = user
   mail(to: @user.email, subject: 'Test')
 end

end

在布局#

下添加html布局
  

mailer.html.erb

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
      /* Email styles need to be inline */
    </style>
  </head>

  <body>
    <%= yield %>
  </body>
</html>

在布局#

下添加文字布局
  

mailer.text.erb

<%= yield %>

使用预览根据您的测试框架检查您的电子邮件。

答案 3 :(得分:1)

你能发布一个简约的Github存储库来重现你的错误吗?

您可以尝试生成邮件,以检查您是否忘记了某些内容:

bundle exec rails generate mailer mailer_classname mailer_viewname

在你的情况下:

bundle exec rails generate mailer user_mailer mailer

答案 4 :(得分:1)

Rails可能无法找到您新创建的文件。如果您运行spring gem,那可能就是问题所在。 (更多关于春天:https://github.com/rails/spring

设置终端命令并停止运行spring

 $ bundle exec spring binstub --all
 $ bin/spring stop

我试过这个,然后用rails s重新运行我的应用。这不起作用,然后尝试完全关闭终端并重新启动计算机。运行rails s并尝试在第二个标签中使用rails c进行测试:

 mail = UserMailer.mailer(User.last)

终于为我工作了,希望它会帮助你们中的一些人!

(其中一些步骤可能是多余的。)

答案 5 :(得分:1)

我遇到了同样的问题。重启sidekiq解决了它。

答案 6 :(得分:0)

我有同样的问题,我的解决方案是删除邮件程序模板文件,在您的情况下views/user_mailer/mailer.html.erb并再次创建它。 似乎我创建了具有正确名称的文件,但在某处有一些奇怪的空白区域,而ActionMailer并没有认出它。

答案 7 :(得分:0)

我有一个类似的问题。我错过了在Gemfile中添加宝石“ haml-rails”的过程。检查您是否缺少宝石。