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.