Встроенные вложения Rails неправильно отображаются в gmail

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

Я использую встроенные вложения в почтовой программе приложения 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")

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

Что я делаю неправильно?


person roman    schedule 02.12.2011    source источник


Ответы (3)


В конце концов, я нашел решение: все, что вам нужно сделать, это установить 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"
                              }

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

person roman    schedule 05.12.2011

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

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, где вы можете найти хороший вспомогательный метод для встроенные изображения почтовой программы.

person jmarceli    schedule 04.05.2015

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

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

person Gemtastic    schedule 20.04.2016
comment
У меня возникла ЭТА проблема, но я использую изображения .jpg, поэтому это Outlook, а не Gmail или Office 365. Знаете, почему? - person Ben Smith; 05.09.2016
comment
.jpg должен поддерживаться всеми почтовыми клиентами. Вы проверили, не скрывает ли ваш почтовый клиент ваш контент из-за проблем с доверием? SMTP может активировать ограничения при проверке содержимого. - person Gemtastic; 06.09.2016