Встроенные Rails-приложения не отображаются правильно в Gmail - PullRequest
6 голосов
/ 02 декабря 2011

Может кто-нибудь указать мне на проблему?

Я использую встроенные вложения в моем приложении rails 3.1. В письме также содержатся изображения, которые хранятся на серверах amazon w3.

Проблема в том, что gmail не отображает письмо правильно. У меня есть встроенные вложения в письме. Но Gmail показывает эти файлы как прикрепленные. Письмо также содержит прикрепленную HTML-страницу, которая содержит само письмо. Все дисплеи Gmail представляют собой набор символов, которые, я полагаю, относятся к версии base64 одного из прикрепленных изображений.

Смотрите скриншот.

Я не могу опубликовать изображение из-за отсутствия необходимого количества оценок, поэтому я разместил его здесь .

Вот код в моей почтовой программе:

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)

А вот код в файле вида:

-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")

Я опустил детали, чтобы упростить их.

Что я делаю не так?

Ответы [ 3 ]

12 голосов
/ 05 декабря 2011

В конце концов я нашел решение: все, что вам нужно сделать, это установить mime-тип и кодировку вложения.

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"
                              }

Это помогло мне.

5 голосов
/ 04 мая 2015

Использовать расширение файла во встроенном массиве. Пример:

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

Таким образом, Rails будет угадывать файлы mime_type и encoding. По крайней мере, Rails 4.2 сделает это.

Вы также можете обратиться к https://stackoverflow.com/a/25810153/2041318, где вы можете найти хороший вспомогательный метод для встроенных изображений почтовой программы.

0 голосов
/ 20 апреля 2016

Стоит упомянуть, поскольку мой вопрос возник у меня, когда я обнаружил, что этот вопрос был тем же, но с другой основной причиной.

Если вы используете Rails 4 и у вас есть проблема с отображением изображения в Gmail (нов Outlook365 или почтовом клиенте OSX) убедитесь, что вы не пытаетесь показать файл .svg.Gmail не поддерживает их по состоянию на эту дату. Я пишу это, и вам понадобится резервный .jpg или .png.

...