2011-12-02 21 views
5

¿Alguien me puede señalar el problema?Los accesorios de rieles en línea no se muestran correctamente en gmail

Estoy utilizando archivos adjuntos en línea en mi aplicación de correo de mis rieles 3.1. La carta también contiene imágenes que se almacenan en los servidores amazon w3.

El problema es que gmail no muestra la letra correctamente. Tengo archivos adjuntos en línea en la carta. Pero Gmail muestra estos archivos como archivos adjuntos. La carta también contiene una página html adjunta que contiene la carta misma. Todas las pantallas de Gmail son un conjunto de símbolos que supongo son una versión base64 de una de las imágenes adjuntas.

Ver la captura de pantalla.

No puedo publicar la imagen debido a la falta de cantidad necesaria de calificación, así que lo publiqué here.

Este es el código en mi programa de correo:

attachments.inline['blank'] = File.read("#{Rails.root.to_s + '/app/assets/images/blank_500x500.png'}") 
attachments.inline['discount-deal-triangle'] = File.read("#{Rails.root.to_s + '/app/assets/images/discount-deal-triangle.png'}") 
mail(:to => @subscriber.email, :subject => subject) 

Y aquí está el código en el archivo de vista:

-if @image_url 
    = image_tag(attachments['offer_image'].url, :id => 'offer_image', :width => "320", :height => "320") 
-elsif @offer.image.nil? 
    = image_tag(attachments['blank'].url, :id => 'offer_image', :width => "320", :height => "320") 

He omitido los detalles para hacerlo más sencillo.

¿Qué estoy haciendo mal?

Respuesta

11

Después de todo encontré una solución: todo lo que necesita hacer es establecer el tipo mime y la codificación del archivo adjunto.

attachments.inline['blank'] = { 
           :data => File.read("#{Rails.root.to_s + '/app/assets/images/blank_500x500.png'}"), 
           :mime_type => "image/png", 
           :encoding => "base64" 
           } 
attachments.inline['discount-deal-triangle'] = { 
           :data => File.read("#{Rails.root.to_s + '/app/assets/images/discount-deal-triangle.png'}"), 
           :mime_type => "image/png", 
           :encoding => "base64" 
           } 

Eso hizo el truco para mí.

5

Utilice la extensión de archivo en la matriz en línea. Ejemplo:

attachments.inline['blank.png'] = 
    File.read(Rails.root.join('app', 'assets', 'images', 'blank_500x500.png') 

De esta manera rieles adivinará el archivo mime_type y encoding. Al menos Rails 4.2 lo hará.

También puede consultar el https://stackoverflow.com/a/25810153/2041318 donde puede encontrar un buen método de ayuda para las imágenes en línea de los anuncios.

0

Vale la pena mencionar ya que mi pregunta que tuve cuando encontré esta pregunta fue la misma, pero una causa diferente.

Si está utilizando Rails 4 y tiene un problema al mostrar una imagen en Gmail (pero no en Outlook365 ni en el cliente de correo de OSX) asegúrese de que no está tratando de mostrar un archivo .svg. Gmail no los admite a partir de esta fecha. Estoy escribiendo esto y necesitarás una alternativa de .jpg o .png.

+0

Tengo este problema pero estoy usando imágenes .jpg, por lo que son Outlook pero no Gmail u Office 365. ¿Sabría por qué? –

+0

.jpg debe ser compatible con todos los clientes de correo. ¿Ha verificado que su cliente de correo no oculte su contenido debido a problemas de confianza? SMTP puede desencadenar restricciones en la detección de contenido. – Gemtastic

Cuestiones relacionadas