Rails Action Mailer: изображения в электронных письмах

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

development.rb

  config.action_mailer.default_url_options = {
    :host => 'localhost:3000',
    :only_path => false
  }
  config.action_mailer.raise_delivery_errors = false
  config.action_mailer.asset_host = 'http://localhost:3000'

просмотреть файл:

<div class="image">
  <%= image_tag image_path('email-logo.png') %>
</div>

Где я совершил ошибку? Пожалуйста, спросите, нужна ли вам дополнительная информация.

Ответы

Ответ 1

попробовать

<div class="image">
  <%= image_tag('email-logo.png') %>
</div>

Убедитесь, что вы установили config.action_controller.asset_host и config.action_mailer.asset_host

Ответ 2

Вы отправляете электронные письма с localhost:3000, который не является общедоступным (и ограничен только вашей машиной).

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

Используйте сервис, например ngrok, чтобы открыть свой локальный домен.

После выполнения обязательно замените config.action_mailer.asset_host = 'http://localhost:3000'

с URL-адресом ngrok (что-то вроде config.action_mailer.asset_host = 'http://<xxx>.ngrok.com')

Кроме того, в вашем файле просмотра вам необходимо будет указать абсолютный URL-адрес для изображения (а не только относительный путь). Вы можете узнать больше об этом здесь: Как получить абсолютный URL-адрес для ресурса в Rails 3.1?

Ответ 3

Если вы используете

image_url('e-mail-logo.png')

вместо

image_path()

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

Ответ 4

Я согласен с Утсавом Кешарвани. Я недавно столкнулся с той же проблемой. Поскольку localhost не является общедоступным, вы не можете получить доступ к изображениям localhost.

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

Я лично предпочитаю Cloudinary - облачный сервис, предоставляющий комплексное решение для управления изображениями, включая загрузку, хранение, манипуляции, оптимизация и доставка.

Вы можете сослаться на документацию CloudLine для рельсов: http://cloudinary.com/documentation/rails_integration#getting_started_guide

Надеюсь, это поможет.