2017-08-29 4 views
0

Ich arbeite an einer E-Mail-Vorlage für Mailjet in MJML geschrieben, die einen Array-Wert über Vars verwendet, um eine Liste von Elementen zu generieren, die der Absender erhalten möchte Mail-Empfänger. Alle Werte im Array sind reine Textwerte.Mailjet: Array-Wert durch vars zur Verfügung gestellt blockiert E-Mail beim Senden blockiert

die Daten an die API-Anforderung übergeben wie folgt aussieht:

{ 
    "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" 
    } 
} 

Die Vorlage var:records wie folgt verwendet:

 ... 
     </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> 
      ... 

Solange var:records nicht in den Datensatz mit der gesendeten Anfrage wird die Mail wie erwartet gesendet. Sobald ein (nicht leerer) Array-Wert mit der Anfrage zur Verfügung gestellt wird, wird die Mail von Mailjet beim Versand gesperrt, ohne weitere Informationen über den Grund zu geben.

Keine Ahnung, wie man das funktioniert.

UPDATE:

Dank Zhivko der Hinweis auf die Fehlerberichterstattung Mechanismus von Mailjet versehen konnte ich ein wenig mehr Einblick in das Problem gewinnen.

Die Vorlage erzeugt den folgenden Fehler:

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

diese noch keinen Sinn für mich macht, wie die erwähnte Linie einen if Zustand mit einem Standardwert von false für den Fall festgelegt, dass kein Wert für var:records wird mit der API-Anfrage bereitgestellt. Auch die Vorlage erzeugt nur diesen Fehler, wenn der Wert explizit in Vars festgelegt ist und nicht leer ist. Meine bisherigen Tests lassen mich vermuten, dass es möglicherweise mit dem angegebenen Wert zu tun hat, der ein Array Wert ist, da die Linie keine Probleme verursacht, wenn der Wert einfach String ist.

Antwort

1

ich hinzufügen, das gleiche Problem und nach dem MJML Team auf ihre Slack fragen füge ich eine Antwort.Verwenden Sie einfach die defined() Methode:

Beispiel:

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

Diese Methode ist richtig und ein Kern Maintainer von MJML sagt nur:

It's not publicly documented yet 

PS: Ihr Slack ist ein guter Ort, dies zu fragen Art von Frage und ich hatte eine Antwort in Minuten. (mjml.slack.com)

2

Die Nachricht ist wahrscheinlich aufgrund eines Fehlers in der Vorlagensprache blockiert. Aktivieren Sie error reporting mechanism, um Details zu dem Fehler zu erhalten. Wenn Sie Probleme haben, die Fehlermeldung zu debuggen, öffnen Sie eine Mail mit der Nummer support ticket für eingehende Untersuchung der spezifischen Vorlage.

+0

Danke für den Hinweis. Hat mir geholfen, mehr Informationen über das Problem zu bekommen. Aktualisiert die Frage accododingly. Öffnet auch ein Support-Ticket. – Oliver

Verwandte Themen