¿Cómo creo un correo electrónico con CSS e imágenes desde Rails?
-
19-08-2019 - |
Pregunta
¿Cómo se crean y envían correos electrónicos desde la aplicación Rails, que contienen imágenes y el formato adecuado?dale me gusta a los que obtienes de facebook y dale me gusta.
Solución
Suponiendo que sepa cómo enviar correos electrónicos normales de texto sin formato desde Rails usando ActionMailer, para obtener HTML
Los correos electrónicos funcionan, necesita establecer un tipo de contenido para su correo electrónico.
Por ejemplo, su notificador podría verse así:
class MyMailer < ActionMailer::Base
def signup_notification(recipient)
recipients recipient.email_address_with_name
subject "New account information"
from "system@example.com"
body :user => recipient
content_type "text/html"
end
end
Nota la content_type "text/html"
línea.Esto le indica a ActionMailer que envíe un correo electrónico con un tipo de contenido de text/html
en lugar del valor predeterminado text/plain
.
Lo siguiente que tienes que hacer es generar las vistas de tu correo. HTML
.Por ejemplo, su archivo de vista app/views/my_mailer/signup_notification.html.erb
podría parecerse a lo siguiente:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" media="screen">
h3 { color: #f00; }
ul { list-style: none; }
</style>
</head>
<body>
<h3>Your account signup details are below</h3>
<ul>
<li>Name: <%= @user.name %></li>
<li>Login: <%= @user.login %></li>
<li>E-mail: <%= @user.email_address %></li>
</ul>
</body>
</html>
Como puedes ver el HTML
La vista puede incluir una <style>
etiqueta para definir estilos básicos.No todo HTML
y CSS
es compatible, especialmente en todos los clientes de correo, pero definitivamente deberías tener suficiente control de formato sobre los estilos de texto.
Incrustar imágenes es un poco complicado si planeas mostrar correos electrónicos adjuntos.Si simplemente incluye correos electrónicos de sitios externos, puede utilizar un <img />
etiquetar como lo haría normalmente en HTML
.Sin embargo, muchos clientes de correo bloquearán la visualización de estas imágenes hasta que el usuario lo autorice.Si necesita mostrar imágenes adjuntas, el complemento Rails Archivos adjuntos en línea podría valer la pena echarle un vistazo.
Para obtener más información sobre el soporte de correo de Rails, el Documentación de ActionMailer es un gran recurso
Otros consejos
Para las imágenes, puede usar el ayudante image_tag
normal después de haber definido el ActionMailer::Base.asset_host = 'http://www.your-domain.com'
Utilizo Paperclip para almacenar mis imágenes, así que en mi caso puedo agregar una imagen a un correo electrónico usando esto.
image_tag result.photo.url(:small)
Lea Cómo crear excelentes correos electrónicos HTML con CSS , es un buen comienzo. ¡Todos los correos electrónicos deben seguir HTML 3.0!