【发布时间】:2015-02-19 19:18:58
【问题描述】:
上下文
mail_view、mailcatcher、rails_email_preview 等 Gem 似乎更面向开发人员(一种调试模板的方法)。但我需要我的 Rails 应用程序的受信任用户在生产中使用的东西。
我的应用程序是一个项目管理应用程序,项目经理可以在其中更新他们的项目状态、操作,在此期间必须向项目承包商、开发人员、客户等发送电子邮件。
项目经理必须能够判断他是否要发送电子邮件(这很容易),并且能够在一定程度上自定义消息内容(不是设计,只有特定的文本部分就足够了) .他们确实希望对即将发送的电子邮件进行一些控制,即他们需要预览他们自定义的电子邮件。为什么?
- 项目经理是受信任的用户/程序员,我让他们添加 HTML 作为电子邮件的自定义部分(我们谈论的是小型应用程序,项目经理都是受信任的员工)。但是结束标签很容易被遗忘,所以我想为他们提供一种方法来检查是否有任何问题。例如。文本不会全部显示为
<h2>,只是因为他们忘记了结束</h2> - 一些电子邮件模板已经包含一些关于 PM 所写内容的信息,而 PM 可能不知道(理解:可能喝得太醉而记不住)。电子邮件预览只是避免重复句子的一种方法(例如两次
Hello M. President,) - CSS 样式应用于电子邮件。很难预料
<h2>等标签的效果。所以我需要使用 CSS 呈现电子邮件
备注
预览和发送按钮
项目经理可以访问将内容提供给我的 Rails 应用程序的表单。我正在考虑同时拥有一个普通的提交按钮和一个预可视化按钮。我可能会使用this SO question 给出的一些技巧来区分两个按钮的行为
Letter_opener : 一个不错的宝石,但独一无二?
我正在使用 letter_opener 进行调试(因此上下文不同),但 这通常是我想向项目经理展示的预览。但是为了使用,letter_opener 需要修改action_mailer 配置config.action_mailer.delivery_method = :sendmail # (or :letter_opener)。所以我只能预览电子邮件,或者真实发送它们,而不是两者?我会接受一个解决方案,让我选择是使用 letter_opener 还是真正发送电子邮件
小编辑器?
与其盲目相信我的项目经理编写基本 html 而不会忘记结束标记的能力,也许您可以推荐一个不错的 WYSIWYG 编辑器来显示我的 f.text_area() 的内容?
这将是一个奖励,而不是我的问题的实际答案
邮件渲染引擎?
我现在知道不同的电子邮件客户端可以以不同的方式呈现电子邮件客户端。我暂时忽略这个。所以预览的呈现方式并不重要。不过我喜欢letter_opener 的渲染
当前代码
视图 > 控制器 > 邮件程序
my_email_view.html.erb
<%= form_tag some_mailing_list_path %>
<%= fields_for :email do |f| %>
<!-- f.text_field(:subject, ....), etc -->
<% end %>
<%= submit_tag("Send email") %>
<%= submit_tag("Preview") %>
<% end %>
my_controller.rb
before_action :prep_email # Strong parameters, define @mail with form contents
# Handles the POST
def some_action
check(:to, :from, :subject) # I check the parameters in private functions
if email_alright? # Above checks will raise a flag if something went wrong
if Rails.env.production?
MailingListsMailer.my_action(@mail).deliver_later
else
MailingListsMailer.my_action(@mail).deliver_now
end
flash.notice = "Email sent"
redirect_to :back
else
redirect_to :back
end
end
mailing_list_mailer.rb
def my_action(message)
format_mail_params(message) # Will set more variables
@etude = etude
@include_reference = message[:include_reference]
@include_description = message[:include_description]
dst = Proc.new { read_emails_file }
mail(
to: dst,
from: message[:from],
subject: @subject_full)
end
【问题讨论】:
-
您的目标是什么电子邮件客户端?在 Outlook 中查看的电子邮件可能与在 Gmail、Hotmail 或 Thunderbird 中呈现时的外观大不相同。
-
电子邮件客户端之间真的有区别吗?好吧,当我说“它的真实样子”时,我的意思是在 rails 应用程序插入了与数据库相关的内容之后。我在一些电子邮件中确实有一些 HTML/CSS 样式,但我想如果它们在电子邮件客户端之间看起来不完全相同也没关系。
-
感谢您的信息。这绝对是我会记住的。假设对于这个问题,我正在寻找一种方法来产生类似于
letter_openergem 的输出,或者甚至在通过 rails 处理后加载电子邮件 .erb 模板就足够了
标签: ruby ruby-on-rails-4 email