rails generate ruby-on-rails ruby ruby-on-rails-4 rake actionmailer

ruby-on-rails - generate - rails action mailer



Error al enviar la plantilla faltante (7)

¿Podrías publicar un repositorio de Github minimalista reproduciendo tu error?

Puede intentar generar su correo para verificar que no está olvidando algo:

bundle exec rails generate mailer mailer_classname mailer_viewname

En tu caso:

bundle exec rails generate mailer user_mailer mailer

Hola,

Tengo un problema con ActionMailer , cuando intento ejecutar una acción:

rake send_email

Me sale un error:

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

Aquí está mi:

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 / tasks / emails_task.rake

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

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

Busqué la solución en stackoverflow e intenté muchas de las respuestas para un problema similar, pero desafortunadamente ninguno de ellos funcionó para mí.

Encontré una solución, cuando agrego el método body to mailer como:

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

Entonces funciona, pero me gustaría tener un cuerpo en archivos separados y hacerlo más complejo con el nombre de usuario y otras cosas.

Si alguien tuviera una idea de cómo resolver este problema, estaría muy agradecido :)


Cambié el nombre de mi método y funcionó. Tal vez el nombre del método no puede ser mail o mailer ...


Es probable que Rails simplemente no encuentre sus archivos recién creados. Si tienes la gema de spring funcionamiento, ese podría ser el problema. (Más sobre la primavera: https://github.com/rails/spring )

Para configurar los comandos de la terminal y dejar de correr el spring :

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

Probé esto, luego volví a ejecutar mi aplicación con rails s . Eso no funcionó, entonces intente cerrar el terminal completamente y reiniciar su computadora. Ejecute los rails s e intente realizar pruebas con los rails c en una segunda pestaña:

mail = UserMailer.mailer(User.last)

Eso finalmente funcionó para mí, ¡espero que ayude a algunos de ustedes!

(Algunos de estos pasos pueden ser redundantes).


Intenta agregar diseño

class UserMailer < ActionMailer::Base default from: "[email protected]" layout "mailer" def mailer(user) @user = user mail(to: @user.email, subject: ''Test'') end end


Tuve el mismo problema, mi solución fue eliminar el archivo de plantilla de correo, en su caso views/user_mailer/mailer.html.erb y views/user_mailer/mailer.html.erb a crearlo. Parece que creé el archivo con el nombre propio pero con algún espacio en blanco extraño en algún lugar, y ActionMailer no lo reconoció.


Yo tuve el mismo problema. Reiniciando el sidekiq me lo resolvió.


class UserMailer < ActionMailer::Base default from: "[email protected]" layout "mailer" def mailer(user) @user = user mail(to: @user.email, subject: ''Test'') end end

Añadir un diseño HTML en el diseño #

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>

Añadir diseño de texto bajo diseño #

mailer.text.erb

<%= yield %>

Utilice la vista previa para revisar su correo electrónico según su marco de prueba.