2017-08-24 14 views
0

電子商取引サイトに接続するRailsアプリケーションで作業します。私たちが扱う電子商取引サイトの顧客に私たちのアプリから電子メールを送信することもあります。ユーザーがカスタムメールテンプレートをRailsで送信する方法を教えてください。

今のところ、html.erbというファイルに保存されている一般的な電子メールテンプレートがありますが、これらの電子商取引サイト(ユーザー)は独自のカスタム電子メールテンプレートを送信してそれぞれの顧客。

私の最初の本能は、ユーザーがテンプレートをテキストエリア形式で提出して、MySQLデータベースのテンプレートテーブルに保存できるようにすることでした。

  1. テンプレートは、我々はERB、HAM​​L、またはビュー内のRailsインスタンス変数と互換性のある他のいくつかの形式を必要とするだろうという意味、インスタンス変数にアクセスする必要があります。しかし、私はいくつかのことが心配です。
  2. このプロセスはどのように適切に機能しますか?私は、HTMLタグ、コンテンツ、CSSスタイルのタグでいっぱいのテキストエリアを取り上げています。テーブルに保存するには、それを巨大な文字列に変換する必要があります。どのようにして生のHTMLを文字列に変換し、HTMLに戻ってアクションを表示してメーラーを送信しますか?
  3. 不要なerbまたはRubyコードがユーザーのカスタムテンプレートに送信されないようにするための宝石やその他の方法がありますか?ここで心配しているのは、<% User.destroy_all %>やその他の有害なRubyコードをテンプレートとして送信しているユーザーです。
  4. このプロセスを実装する簡単な方法は、私が思っているものよりもありますか?データベースルートは私が最初に考えたものですが、ユーザーが自分のカスタムテンプレートを直接私たちに提出し、アプリケーションに直接保存させる方が良いかもしれないと考えています。しかし、これはもちろん、ユーザーがテンプレートを変更したいときはいつでも、テンプレートを再送信する必要があります。

私たちのアプリは、Rails 4.1.7とRuby 2.1.4p265を使用しています。

答えて

0

これにアプローチする方法の1つは、ユーザーがmjml templateをデータベースに保存できるようにすることです。

Theres a mjml-rails宝石を手助けするかもしれません。

mjml-includeタグがあり、レンダリングされる前にそれらを含めることができます。私はあなたのユーザーに適切な部分にリンクする許容可能なインクルードのリストを与えることができると思います。

+0

ありがとうございました!私はこれを調べます。 –

1

私は、ユーザーがどのような変数それらを伝えることで、データベースに基本的なHTMLや値下げテンプレートを保存し、彼らはそれを構築する方法を知っているように許可するシンプルなソリューション

  • となるだろう、あなたのニーズを1として使用するか使用する必要があります。
  • html入力を解析し、そこから有効な.erbファイルを構築するパーサークラスを作成します。

私はあなた次第実装を残すが、ここでは例として入力されます:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>[[title]]</title> 
</head> 
<body> 
    Hello [[username]], thank you for subscribing. 

    You can get started by visiting this <a href="[[link]]">link</a>. 
</body> 
</html> 

パーサが<%= @username %>[[username]]を変換し、その結果がこのようなものになります。

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title><%= @title %></title> 
</head> 
<body> 
    Hello <%= @username %>, thank you for subscribing. 

    You can get started by visiting this <a href="<%= @link %>">link</a>. 
</body> 
</html> 

あなたの懸念事項にお答えします:

1.これは既に上記のとおりです。
非常に簡単です.html_safeまたはraw()ヘルパー関数を使用します。
3.あなたが知っているセット変数のみをユーザに与えることを許可するので、ユーザが提出したコードを実行しないので、これは心配しないでください。あなたは単にeval()ではなく正規表現マッチを行います。
4.これは私が考えることができる最も簡単な解決策です。

+0

ありがとう!私はこの昨晩と同様の考えを持っていました。ユーザーがデータを表現するためにタグを入れてから、文字列を解析してバックエンドのerbに置き換えることができます。私たちが既存のテンプレートからCSSを利用することを決めたので、実際にはこのルートに行くかもしれません。単にユーザーが本文の中のテキストをカスタマイズし、単純な太字/斜体を追加できるようにしてください。 –

関連する問題