Я пытаюсь отобразить встроенные изображения в стандартном представлении 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 не работает.
добавить 'Rails.root_path' перед тем URL изображения. –
Спасибо, пробовал. Он может найти изображение в порядке, поэтому добавление 'Rails.root' не решает проблему. –
попробуйте добавить свой серверный URL-адрес до того, как путь к изображению –