Отправка почты со встроенным изображением в Ruby

Я хочу отправить письмо с прикрепленным изображением и вставить это изображение в html. Как источник для тега, что я должен написать и есть ли какие-либо недостающие части заголовка, такие как content_type?

Когда я делаю настоящий тест, я отправляю письмо на свою учетную запись gmail. Я вижу, что есть вложение с именем «без имени», и я не мог отобразить изображение даже при загрузке.

Камень: Пони

require 'pony'
Pony.override_options = { :via => :test }
Pony.mail(
    :to => 'foo@bar',
    :from => '[email protected]',
    :subject => 'test123',
    :body =>   "<h1><strong>Dear X, check the newsletter ,<br></strong></h1> <img src='attached image' />",
    :attachments => {"happy_image.jpg" => File.read("happy_image.jpg")}
)
puts Mail::TestMailer.deliveries

выход:

Date: Tue, 06 Dec 2016 17:23:05 +0300

From: [email protected]

To: foo@bar

Message-ID: <[email protected]>

Subject: test123

Mime-Version: 1.0

Content-Type: multipart/mixed;

boundary="--==_mimepart_5846c9caf15a_5983c9fd8989e5";

charset=UTF-8

Content-Transfer-Encoding: 7bit





----==_mimepart_5846c9caf15a_5983c9fd8989e5

Content-Type: text/plain;

charset=UTF-8

Content-Transfer-Encoding: 7bit



<h1><strong>Dear X, check the newsletter ,<br></strong></h1> <img src='' />

----==_mimepart_5846c9caf15a_5983c9fd8989e5

Content-Type: image/jpeg;

 filename=happy_image.jpg

Content-Transfer-Encoding: base64

Content-Disposition: attachment;

filename=happy_image.jpg

Content-ID: <happy_image.jpg@MW7BIQ12TKYHQC>



/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQE

BQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/

2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU

FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAHiAuMDASIAAhEBAxEB/8QA

HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUF

BAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK

FhcYGQ==



----==_mimepart_5846c9caf15a_5983c9fd8989e5--

person Hakan Kara    schedule 06.12.2016    source источник


Ответы (1)


Вы должны уметь кодировать изображение в BASE64 и использовать полученную строку в качестве src тега img.

Например:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWQAAAD8CAYAAAB..."/>

Также убедитесь, что ваш тип контента установлен как text/html вместо text/plain. Глядя на почту, кажется, что она настроена на последнее, поэтому изображения не отображаются, а теги отображаются как текст. Добавьте следующее к своим аргументам, чтобы использовать тип контента text/html:

:headers => { 'Content-Type' => 'text/html' }

person Constant Meiring    schedule 06.12.2016
comment
Привет, я уже пробовал этот метод, но когда я отображаю почту, он показывает чистую строку с тегом img, например ‹img src=data:image/png;base64,iV2312_encoding_string/› - person Hakan Kara; 07.12.2016
comment
Ах. Вам нужно установить тип содержимого в HTML в заголовке, иначе он будет обрабатывать его как текст. Глядя на ваш исходный вопрос, кажется, что тип контента в настоящее время установлен как text/plain. Я обновил вопрос, чтобы добавить это. - person Constant Meiring; 07.12.2016
comment
Как вы сказали, я добавил опцию заголовков, но результат для меня тот же. Например, эта чистая строка ''img src=data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/ASD.../› :( - person Hakan Kara; 07.12.2016
comment
GMail удаляет imgs со встроенными данными. - person Rafa de Castro; 30.11.2018