如何从Rails应用程序创建和发送包含图像和正确格式的电子邮件?就像你从facebook那样得到的那些。
答案 0 :(得分:32)
假设您知道如何使用ActionMailer从Rails发送普通的纯文本电子邮件,要使HTML
个电子邮件正常工作,您需要为您的电子邮件设置内容类型。
例如,您的notifer可能如下所示:
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 documentation是一个很好的资源
答案 1 :(得分:1)
对于图像,您可以在定义image_tag
ActionMailer::Base.asset_host = 'http://www.your-domain.com'
助手
我使用Paperclip存储我的图像,因此在我的情况下,我可以使用此功能将图像添加到电子邮件中。
image_tag result.photo.url(:small)
答案 2 :(得分:0)
阅读How to Create Great HTML Emails with CSS,这是一个好的开始。所有电子邮件都需要遵循HTML 3.0!