Подтвердить что ты не робот

Каков правильный способ встраивания изображений в электронную почту с помощью Rails?

Каков правильный способ встраивания изображения в электронную почту с помощью Rails?

4b9b3361

Ответ 1

Я объединил ответ от Oksana с пользовательским вспомогательным подходом и получил следующее, чтобы работать довольно хорошо.

app/helpers/email_helper.rb

module EmailHelper
  def email_image_tag(image, **options)
    attachments[image] = File.read(Rails.root.join("app/assets/images/#{image}"))
    image_tag attachments[image].url, **options
  end
end

app/mailers/base_mailer.rb

class BaseMailer < ActionMailer::Base
  add_template_helper(EmailHelper)
end

app/mailers/my_mailer.rb

class MyMailer < BaseMailer

  def send_my_mail(email)  
    mail to: email, subject: "My Subject"
  end
end

Тогда, например, если я хочу добавить логотип компании в свой файл макета электронной почты, я бы использовал

app/views/layouts/email.html.erb

<%= email_image_tag("company_logo.png") %>


Обратите внимание, что опции ** делают тег более расширяемым, но он работает только в ruby >= 2. Чтобы сделать эту работу в ruby ​​< 2 вам придется использовать более старый способ обработки ключевых слов.

Ответ 2

Добавление на ответы Oksana и tdubs

Модуль tdubs пишет работы на рабочем столе, но для мобильного gmail-клиента изображения отображаются как вложения. Чтобы исправить это, сделайте это для

Приложение/хелперы/email_helper.rb

module EmailHelper
    def email_image_tag(image, **options)
        attachments[image] = {
            :data => File.read(Rails.root.join("app/assets/images/emails/#{image}")),
            :mime_type => "image/png",
            :encoding => "base64"
        }
        image_tag attachments[image].url, **options
    end
end

В остальном следуйте ответам на tdubs.

Ответ 3

RAILS 5

В вашем почтовом методе добавьте встроенное вложение, указывающее на ваше изображение:

class ConfirmationMailer < ActionMailer::Base
  def confirmation_email
      attachments.inline["logo.png"] = File.read("#{Rails.root}/app/assets/images/logo.png")
      mail(to: email, subject: 'test subject')
  end
end

Затем в вашей почте html просмотрите image_tag с URL-адресом приложения:

<%= image_tag(attachments['logo.png'].url) %>

Ответ 4

После многих исследований я нашел очень чистый способ встраивания изображений в электронную почту. Просто добавьте следующую строку в production.rb и development.rb

config.action_mailer.asset_host = 'YOUR HOST URL'

По вашему мнению вставьте изображение, используя следующий код.

<%= image_tag('My Web Site Logo.png') %>

Примечание. Обязательно обновите ВАШ ХОСТ-URL и Мой веб-сайт Logo.png в над кодом.

Подробные сведения об использовании Action Mailer см. в ActionMailer:: Base.

Ответ 5

Копия, вставленная здесь

http://api.rubyonrails.org/classes/ActionMailer/Base.html#class-ActionMailer::Base-label-Inline+Attachments

Встроенные вложения

Вы также можете указать, что файл должен отображаться в строке с другим HTML. Это полезно, если вы хотите отображать корпоративный логотип или фотографию.

    class Notifier < ApplicationMailer
      def welcome(recipient)
       attachments.inline['photo.png'] = File.read('path/to/photo.png')
       mail(to: recipient, subject: "Here is what we look like")
     end
   end

Затем, чтобы ссылаться на изображение в представлении, вы создаете файл welcome.html.erb и делаете вызов image_tag, проходящего во вложении, которое хотите отобразить, а затем вызываете url на вложении, чтобы получить путь относительного содержания для источника изображения:

  <h1>Please Don't Cringe</h1>

  <%= image_tag attachments['photo.png'].url -%>

Поскольку мы используем метод Action View image_tag, вы можете передать любые другие параметры, которые вы хотите:

 <h1>Please Don't Cringe</h1>

 <%= image_tag attachments['photo.png'].url, alt: 'Our Photo', class: 'photo' -%>

Ответ 6

Я не знаю много о рельсах, но я работал над проектами на С#, которые создают электронные письма, а затем вставляют их в почтовый ящик пользователей через API Google. Чтобы создать письмо, мне пришлось сгенерировать строку с нуля. Если вы включите multipart для электронной почты, тогда байты изображения будут включены в многостраничный раздел с использованием кодировки base64.

Вы можете проверить пакеты TMail и RubyMail, чтобы узнать, поддерживают ли они эти действия для вас.