26

您如何从 Rails 应用程序创建和发送包含图像和正确格式的电子邮件?喜欢你从 facebook 获得的那些和喜欢的。

4

2 回答 2

33

假设您知道如何使用 ActionMailer 从 Rails 发送普通的纯文本电子邮件,为了让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>标签来定义基本样式。并非全部支持HTMLCSS尤其是在所有邮件客户端中,但您绝对应该对文本样式有足够的格式控制。

如果您打算显示附加的电子邮件,嵌入图像会有点棘手。如果您只是包含来自外部站点的电子邮件,您可以<img />像通常在HTML. 但是,在用户授权之前,许多邮件客户端会阻止显示这些图像。如果您需要显示附加图像,Rails 插件Inline Attachments可能值得一看。

有关 Rails 邮件支持的更多信息,ActionMailer 文档是一个很好的资源

于 2009-01-23T13:38:11.307 回答
1

对于图像,您可以在image_tag定义后使用普通助手ActionMailer::Base.asset_host = 'http://www.your-domain.com'

我使用回形针来存储我的图像,所以在我的情况下,我可以使用它将图像添加到电子邮件中。

image_tag result.photo.url(:small)
于 2012-08-17T22:37:44.193 回答