2017-08-29 4 views
0

MJMLで書かれたメールのテンプレートで、Varsから配列の値を使用して送信者が受信したいアイテムのリストを生成するメール受信者。配列内のすべての値はプレーンテキスト値です。Mailjet:varsによって配列の値を指定すると、メールが送信時にブロックされる

APIリクエストに渡されたデータは次のようになります限りvar:recordsがで送信されたデータに設定されていないよう

 ... 
     </mj-text> 
     <mj-raw> {% if var:records:false %} </mj-raw> 
     <mj-text> 
      <p> 
      I, <strong>{{var:userName}}, born on {{var:userBirthDate}}</strong> am asking you to provide the following documents: 
      </p> 
     </mj-text> 
     <mj-raw> {% for item in var:records %} </mj-raw> 
     <mj-text> 
      {{item}} 
     </mj-text> 
     <mj-raw> {% endfor %} </mj-raw> 
     <mj-raw> {% else %} </mj-raw> 
     <mj-text> 
      <p> 
      I, <strong>{{var:userName}}, born on {{var:userBirthDate}}</strong>, am asking you to provide all my existing documents. 
      </p> 
     </mj-text> 
     <mj-raw> {% endif %} </mj-raw> 
     <mj-text> 
      ... 

{ 
    "FromEmail":"[email protected]", 
    "FromName":"Chris Crumble", 
    "Subject":"Data Request", 
    "MJ-TemplateID":"200000", 
    "MJ-TemplateLanguage":true, 
    "Recipients":[ 
     { 
      "Email":"[email protected]", 
      "Name":"Hans Henson" 
     } 
    ], 
    "Vars":{ 
     "mailTitle":"Data Request", 
     "userName":"Chris Crumble", 
     "imageUrl":"http://my.host.com/image.jpg", 
     "userBirthDate":"1.3.1982", 
     "recipientName":"Hans Henson", 
     "uploadUrl":"https://my.upload.com/", 
     "authVideoUrl":"https://my.authvideo.com", 
     "records":["Document A","Document B"], 
     "authPhone":"113777840097" 
    } 
} 

テンプレートは以下のようにvar:recordsを使用しています要求すると、メールは期待通りに送信されます。要求に(空ではない)配列値が提供されるとすぐに、Mailjetは送信時にメールをブロックし、理由の詳細を知らせません。

この仕組みをどのように取得するかわかりません。

UPDATE:私は問題にもう少し洞察を得ることができましたMailjetによって提供されるエラー報告機構にZhivkoのヒントに

感謝。言及したラインがために値なしの場合のために定義されfalseのデフォルト値を持つif条件であるように、これはまだ私にはどんな意味がありません

expression parsing error ## Unknown identifier: var:records:false ## near ## var:records:false ## 

テンプレートには、次のエラーを生成しますvar:recordsにはapiリクエストが提供されています。 また、値がVarsに明示的に設定されていて、でない場合、このテンプレートはこのエラーを生成しません。が空です。 これまでのテストでは、指定された値がの配列の値でなければならない場合があります。数値が平文の場合は問題ありません。の文字列です。

答えて

1

私は同じ問題を追加し、そのスラックにMJMLチームを尋ねた後、私は答えを追加します。この方法が正しいとMJMLのコアメンテナがちょうど言う

{% if defined(employees) %} 
    My employees : 
    <ul> 
    {% for employee in var:employees %} 
     <li>{{employee.firstname}} {{employee.lastname}}</li> 
    {% endfor %} 
    </ul> 
{% endif %} 

It's not publicly documented yet 

PS:彼らのスラックはこれを聞いて良い場所です

例:ちょうどdefined()メソッドを使用します質問の種類と私は数分で応答を持っていた。 (mjml.slack.com

2

テンプレート言語のエラーによりメッセージがブロックされている可能性があります。エラーの詳細を表示するには、error reporting mechanismを有効にします。エラーメッセージをデバッグする際に問題が発生した場合は、特定のテンプレートの詳細な調査のためにMailjetでsupport ticketを開きます。

+0

ヒントのためにありがとう。問題の詳細を知ることができました。質問を更新しました。サポートチケットも開きます。 – Oliver

0

私が知る限り、Mailjetは配列をパーソナライズされたvarとして許可しません。

DataType: the type of data that is being stored (this can be either a str, int, float or bool)

https://dev.mailjet.com/guides/#manage-contacts

関連する問題