wake-up-neo.net

Mailer Fehler fehlende Vorlage

Hallo, 

Ich habe ein Problem mit ActionMailer , wenn ich versuche, eine Aktion auszuführen:

rake send_email

Ich bekomme eine Fehlermeldung:

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

Hier ist meins:

mailers/user_mailer.rb

class UserMailer < ActionMailer::Base
  default from: "[email protected]"

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

end

views/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>

views/user_mailer/mailer.text.erb

Sample mail.

lib/Aufgaben/emails_task.rake

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

config /virones/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

Ich habe nach der Lösung für stackoverflow gesucht und viele der Antworten für das ähnliche Problem ausprobiert, aber leider hat keine davon für mich funktioniert.

Ich habe eine Lösung gefunden, wenn ich der Mailer-Methode body hinzufüge: 

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

Dann funktioniert es, aber ich möchte einen Körper in separaten Dateien haben und ihn mit Benutzernamen und anderen Dingen komplexer gestalten.

Wenn jemand eine Idee hat, wie man dieses Problem lösen kann, wäre ich sehr dankbar :)

19
Kattaro

Versuchen Sie, das Layout hinzuzufügen

class UserMailer < ActionMailer::Base
  default from: "[email protected]"

  layout "mailer"

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

end
3
Florin Ionita

Ich habe meine Methode umbenannt und es hat funktioniert. Vielleicht kann der Name der Methode nicht mail oder mailer sein ...

2
montrealmike
class UserMailer < ActionMailer::Base
  default from: "[email protected]"

  layout "mailer"

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

end

Fügen Sie ein HTML-Layout unter Layout # hinzu. 

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>

Textlayout unter Layout # hinzufügen 

mailer.text.erb

<%= yield %>

Verwenden Sie die Vorschau, um Ihre E-Mails anhand Ihres Test-Frameworks zu überprüfen.

2
sukanta

Könnten Sie ein minimalistisches Github-Repository veröffentlichen, das Ihren Fehler reproduziert?

Sie können versuchen, Ihren Mailer zu generieren, um zu überprüfen, dass Sie nichts vergessen:

bundle exec Rails generate mailer mailer_classname mailer_viewname

In Ihrem Fall:

bundle exec Rails generate mailer user_mailer mailer

1
Habax

Es ist wahrscheinlich, dass Rails Ihre neu erstellten Dateien nicht findet. Wenn Sie die Variable spring ausführen, könnte dies das Problem sein. (Mehr zum Frühling: https://github.com/Rails/spring )

So richten Sie Terminalbefehle ein und beenden die Ausführung von spring:

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

Ich habe dies versucht und dann meine App mit Rails s erneut ausgeführt. Das hat nicht funktioniert. Schließen Sie das Terminal vollständig und starten Sie den Computer neu. Führen Sie Rails s aus und testen Sie mit Rails c in einem zweiten Tab:

 mail = UserMailer.mailer(User.last)

Dass endlich für mich gearbeitet hat, hoffentlich hilft es einigen von euch!

(Einige dieser Schritte sind möglicherweise redundant.)

1
Matt Kandler

Ich hatte das gleiche Problem. Der Neustart von Sidekiq löste es für mich. 

1
Jan Gerritsen

Ich hatte das gleiche Problem, meine Lösung bestand darin, die Mailer-Vorlagendatei zu löschen, in Ihrem Fall views/user_mailer/mailer.html.erb und sie erneut zu erstellen. Es scheint, als habe ich eine Datei mit dem richtigen Namen erstellt, aber irgendwo mit einem seltsamen Leerraum, und ActionMailer hat sie nicht erkannt.

0
Ivica Lakatoš