2016-07-02 9 views
2

Ich habe einen Proxy zum Senden von E-Mails. i erhalten mailto, Betreff und (im HTML-Format)WSO2 ESB HTML-E-Mail senden

i Config axis2.xml hinzufügen

<messageFormatter class="org.apache.axis2.transport.http.ApplicationXMLFormatter" contentType="text/html"/> 

und meine Sequenz, die senden, die E-Mail, aber mit einem fest codierten Körper funktioniert:

<sequence name="SendMailTransportSequence" trace="disable" 
    xmlns="http://ws.apache.org/ns/synapse"> 
    <property name="messageType" scope="axis2" value="text/html" /> 
    <property name="ContentType" scope="axis2" value="text/html" /> 
    <property name="OUT_ONLY" scope="default" value="true" /> 
    <property name="FORCE_SC_ACCEPTED" scope="axis2" value="true" /> 

    <!-- SUBJECT --> 
    <property expression="get-property('mail.asunto')" name="Subject" 
     scope="transport" /> 
    <!-- TO --> 
    <property expression="get-property('mail.destinatario')" name="uri.var.dest" 
     scope="default" type="STRING" /> 
    <header expression="fn:concat('mailto:',get-property('uri.var.dest'))" 
     name="To" scope="default" /> 

    <!-- BODY --> 
    <script language="js"><![CDATA[ 
     mc.setPayloadXML(<html><h1>this is the title</h1><br/><p>this is the content................</p></html>); 
    ]]></script> 

    <send /> 
</sequence> 

Der Postweg:

MAIL OK

Aber wenn ich versuche, den Körper von einer Unterkunft zu senden kippe ich erreichen

Ich versuche

<script language="js"><![CDATA[ 
    var body = mc.getProperty("mail.cuerpo"); 
    mc.setPayloadXML(<html>{body}</html>); 
]]></script> 

und versuchen

<script language="js"><![CDATA[ 
    var body = "<h1>this is the title</h1><br/><p>this is the content................</p>"; 
    mc.setPayloadXML(<html>{body}</html>); 
]]></script> 

in beiden Fällen ist der Inhalt wie Text versucht wird Mail Wrong

Auf der anderen Seite, ich versuche, Payload-Fabrik mit keinem Erfolg zu verwenden:

In diesem Fall wird der Inhalt wie eine Anlage senden ist mit noname

<payloadFactory media-type="xml"> 
    <format> 
     <Body>$1</Body> 
    </format> 
    <args> 
     <arg evaluator="xml" expression="get-property('mail.cuerpo')" /> 
    </args> 
</payloadFactory> 

und in diesem Fall wird der Mail-Körper wie Klartext empfangen wird zu

<payloadFactory media-type="xml"> 
    <format> 
     <ns:text xmlns:ns="http://ws.apache.org/commons/ns/payload">$1</ns:text> 
    </format> 
    <args> 
     <arg evaluator="xml" expression="get-property('mail.cuerpo')" /> 
    </args> 
</payloadFactory> 

Also, was ist die richtige Form um die E-Mail im HTML-Format zu senden? Vielen Dank im Voraus

+0

Haben Sie den Inhaltstyp richtig eingestellt? –

+0

Nicht sicher über die Implementierung, aber Methode setPayloadXML hängt von Entwicklern erwarten, dass die Variable in der Vorlage, nur kurze übliche Zeichenfolge anstelle von komplexen HTML-Inhalt. HTML kann schädlich sein, deshalb ist es maskiert. – simar

+0

Ein anderer möglicher Fall. Wenn Sie WebUI Management Console verwenden, handelt es sich immer um den Escape-Inhalt des Editors. Ich hatte Erfahrung zum Erfolg Zeit vor, nur manuelle Bearbeitung von XML-Datei mit Proxy-Beschreibung im einfachen Texteditor verwenden. Es hat einfaches Format nicht so schwierig beendet. – simar

Antwort

4

In diesem Fall können Sie kein XML-Element in Textzeichenfolge anhängen. also müssen Sie Werte als XML-Kind hinzufügen. Weil WSO2 esb Java Script Rhino verwenden. schreibe mit E4X.

var nextId = 1234; 
 
var first = "John"; 
 
var last = "Smith"; 
 

 
var c = <table> 
 
<tr> 
 
<th>Table header</th> 
 
<th>Table header</th> 
 
</tr> 
 
<tr> 
 
<td>{first}</td> 
 
<td>{last}</td> 
 
</tr> 
 
</table>; 
 

 
for (i = 0; i < 10; i++) { 
 
    c.table += <tr> 
 
<td>{i}</td> 
 
<td>{i}</td> 
 
</tr>; 
 
} 
 

 
mc.setPayloadXML(c); 
 
       

hoffen, dass Sie Idee von oben Code bekommen. Wenn Sie mehr wissen möchten. bitte beziehen Sie sich auf diesen Link. E4X Quick Start Guide