Как мне создать электронную почту с помощью CSS и изображений из Rails? - PullRequest
25 голосов
/ 23 января 2009

Как вы создаете и отправляете электронные письма из приложения Rails, которые содержат изображения и правильное форматирование? как те, которые вы получаете из Facebook и как.

Ответы [ 3 ]

32 голосов
/ 23 января 2009

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

Например, ваш уведомитель может выглядеть так:

class MyMailer < ActionMailer::Base
  def signup_notification(recipient)
    recipients   recipient.email_address_with_name
    subject      "New account information"
    from         "system@example.com"
    body         :user => recipient
    content_type "text/html"
  end
end

Обратите внимание на строку content_type "text/html". Это говорит ActionMailer отправлять электронную почту с типом содержимого text/html вместо значения по умолчанию text/plain.

Далее вы должны сделать так, чтобы ваш почтовый просмотр выводил HTML. Например, ваш файл просмотра app/views/my_mailer/signup_notification.html.erb может выглядеть следующим образом:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <style type="text/css" media="screen">
      h3 { color: #f00; }
      ul { list-style: none; }
    </style>
</head>
<body>
  <h3>Your account signup details are below</h3>
  <ul>
    <li>Name: <%= @user.name %></li>
    <li>Login: <%= @user.login %></li>
    <li>E-mail: <%= @user.email_address %></li>
  </ul>
</body>
</html>

Как видите, представление HTML может включать тег <style> для определения основных стилей. Поддерживаются не все HTML и CSS, особенно во всех почтовых клиентах, но вы определенно должны иметь достаточный контроль над форматированием стилей текста.

Встраивание изображений немного сложнее, если вы планируете показывать прикрепленные электронные письма. Если вы просто включаете электронные письма с внешних сайтов, вы можете использовать тег <img />, как обычно в HTML. Однако многие почтовые клиенты блокируют отображение этих изображений до тех пор, пока пользователь не авторизует их. Если вам нужно отобразить прикрепленные изображения, стоит посмотреть плагин Rails Inline Attachments .

Для получения дополнительной информации о поддержке рассылки Rails документация ActionMailer - отличный ресурс

1 голос
/ 18 августа 2012

Для изображений вы можете просто использовать обычный помощник image_tag после того, как вы определили ActionMailer::Base.asset_host = 'http://www.your-domain.com'

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

image_tag result.photo.url(:small)
0 голосов
/ 23 января 2009

Читать Как создавать отличные электронные письма в формате HTML с помощью CSS , это хорошее начало. Все письма должны следовать HTML 3.0!

...