2016-04-08 4 views
2

Я пытаюсь отобразить встроенные изображения в стандартном представлении ActionMailer, используя описанный здесь подход Rails attachments inline are not shown correctly in gmail.Невозможно отобразить встроенные вложения в ActionMailer

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

attachments.inline["sample.png"] = { 
    mime_type: "image/png", 
    encoding: "base64", # Including this line causes byte sequence error 
    data: File.read('public/sample.png') 
} 

Ввиду почты:

image_tag(attachments["sample.png"].url) 

дает знакомый рубин ошибку последовательности UTF-8 байт:

invalid byte sequence in UTF-8

Чтобы получить вокруг этого я пробовал следующее:

attachments.inline["logo.png"] = { 
     mime_type: "image/png", 
     data: Base64.encode64(File.read('public/logo.png')) 
    } 

, а также

attachments.inline["logo.png"] = File.read('public/logo.png') 

Используя тот же image_tag синтаксис, показанный выше.

Оба эти устранить ошибку UTF, но я остался с этим бессмысленными URL в представлении:

<img src="cid:[email protected]">

PNG изображение является действительным и правильно отображается в стандартном виде HTML. Я использую Rails 4.2.5 с Ruby, 2.2.4

EDIT

Это работает:

Mailer:

attachments.inline["cape.png"] = { 
    mime_type: "image/png", 
    # encoding: "base64", 
    content: Base64.encode64(File.read(Rails.root.join("public/", "cape.png"))) 
} 

Вид:

= image_tag "data:image/png;base64,#{attachments['logo.png'].read}" 

Очень неудобно, однако, и я все еще удивляюсь, почему обычный подход h не работает.

+0

добавить 'Rails.root_path' перед тем URL изображения. –

+0

Спасибо, пробовал. Он может найти изображение в порядке, поэтому добавление 'Rails.root' не решает проблему. –

+0

попробуйте добавить свой серверный URL-адрес до того, как путь к изображению –

ответ

0

В моем приложении я использую только

attachments.inline["logo.png"] = File.read('public/logo.png') 

Он отлично работает для меня

+0

Спасибо, уже пробовал это, но, как я объяснил в моем вопросе выше, URL-адрес не отображается правильно в 'image_tag'. –