Вложение изображения в Rails mailer из uri данных

#ruby-on-rails #email #gmail #email-attachments

#ruby-на-рельсах #Адрес электронной почты #gmail #вложения электронной почты #ruby-on-rails

Вопрос:

Я сохранил подпись, которая имеет вид uri данных изображения в формате png и хранится в моей базе данных в виде строки.

При отправке электронного письма я хочу прикрепить его встроенным, но изображение продолжает отображаться как не работающее в Gmail. Вот мой код:

Почтовая программа:

 attachments.inline['signature'] = {
  content: @project_addition.signature.split(',')[1],
  mime_type: 'image/png',
  encoding: 'base64'
}
  

Вид:

 <%= image_tag attachments.inline['signature'].url, width: '25%' %>
  

Первые несколько символов строки:

 "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABowAAAC4CA....
  

Комментарии:

1. Какую ошибку вы получаете от gmail

2. @CdotStrifeVII ошибки нет, просто изображение не отображается (только поле с вопросительным знаком посередине, в котором gmail сообщает, что не может понять вложение)

3. Удалось ли вам заставить это работать?

Ответ №1:

если у вас нет uri данных изображения, другое решение приведено ниже в вашем помощнике

приложение / помощники /email_helper.rb

   def email_data_uri(image, **options)
    code = File.open("#{Rails.root}/app/assets/images/#{image}", 'r').read
    data = Base64.strict_encode64(code)
    type = image.split('.')[-1]
    name = image.split('/')[-1]
    attachments.inline[name] = {
      content: Base64.decode64(data),
      mime_type: "image/#{type}"
    }
    image_tag attachments.inline[name].url, **options
  end
  

приложение / просмотр / campaign_mailer

 = email_data_uri 'email/livechat-logo.png', style: 'width: 34px'
  

добавление параметров стиля

Ответ №2:

Вам нужно вызвать Base64.decode64 для декодирования содержимого, закодированного в base64, без указания кодировки

 attachments.inline['signature'] = {
  content: Base64.decode64(@project_addition.signature.split(',')[1]),
  mime_type: 'image/png'
}