WSO2 ESB如何将JMS邮件中的电子邮件发送到自定义电子邮件地址?

时间:2014-08-01 23:26:52

标签: email jms wso2 wso2esb

我想知道是否有人可以帮我完成以下设置。

我想通过JMS向我的应用程序发送消息到WSO2 ESB,以便ESB可以通过电子邮件发送它。我使用ActiveMQ作为队列。到目前为止,当我通过ActiveMQ接口向队列发送消息时,wso2 esb获取它。然后,wso2 esb将邮件作为电子邮件发送到特定的电子邮件地址。

所以我可以配置ActiveMQ和WSO2 esb将JMS消息发送到特定的电子邮件地址(例如,specificaddress@test.com)。

这是我的问题。如何修改电子邮件的收件人地址?在ESB序列配置中,我目前使用特定地址。但地址取决于使用我的应用程序的用户。所以我必须改变" To"属性,取决于必须接收电子邮件的用户。

那么如何通过JMS消息将属性" To"以及#34; Subject"的值传递给WSO2 esb序列?

这是我所拥有的序列的配置:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="sendMail">
   <property name="messageType" value="text/html" scope="axis2" type="STRING"></property>
   <property name="ContentType" value="text/html" scope="axis2"></property>
   <property name="Subject" value="This is the subject." scope="transport"></property>
   <property name="To" value="specificaddress@test.com" scope="transport"></property>
   <property name="OUT_ONLY" value="true" scope="default" type="STRING"></property>
   <log level="full"></log>
   <send>
      <endpoint>
         <address uri="mailto:"></address>
      </endpoint>
   </send>
</sequence>

这是我的代理人:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
      name="sendToMailIn"
      transports="jms"
      statistics="disable"
      trace="disable"
      startOnLoad="true">
   <target inSequence="sendMail"/>
   <description/>
</proxy>

我希望有人知道。

更新

我想我有解决方案!哇:-)也许,起初,我是傻瓜,但这里是...

您可以做的是通过JMS消息将SOAP信封发送到WSO2 ESB。然后,使用XPath表达式,您可以获取传递的值。在代理和序列上需要改变一点。

这是新序列:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="sendMail">
   <property name="messageType" value="text/html" scope="axis2" type="STRING"></property>
   <property name="ContentType" value="text/html" scope="axis2"></property>
   <property xmlns:ns="http://org.apache.synapse/xsd" name="Subject" expression="$body/subject" scope="transport"></property>
   <property xmlns:ns="http://org.apache.synapse/xsd" name="To" expression="$body/to" scope="transport"></property>
   <property name="OUT_ONLY" value="true" scope="default" type="STRING"></property>
   <log level="full"></log>
   <send>
      <endpoint>
         <address uri="mailto:"></address>
      </endpoint>
   </send>
</sequence>

这是新代理:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="sendToMailIn"
       transports="jms"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target inSequence="sendMail"/>
   <parameter name="transport.jms.ContentType">
      <rules>
         <jmsProperty>contentType</jmsProperty>
         <default>text/xml</default>
      </rules>
   </parameter>
   <description/>
</proxy>

这是我的SOAP Envelop,WSO2 ESB从我的ActiMQ队列收到JMS消息:

<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org   /soap/envelope/">
<soapenv:Body>
    <subject>Email subject comes here.</subject>
    <to>address@test.com</to>
</soapenv:Body>
</soapenv:Envelope>

2 个答案:

答案 0 :(得分:0)

你有几个选择。

  1. 您可以使用http标头并将“to”,“subject”值发送给ESB。
  2. 将其作为有效负载值发送并使用XPath表达式提取

答案 1 :(得分:0)

我在JMS消息中使用JSON解决了这个问题。这是我的设置对我有用。

这是我的JSON消息:

{"to":"mail@test.com","subject":"TestSubject","mailbody":"Some body text ..."}

这是我的代理人:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="sendToMailIn"
       transports="jms"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target inSequence="sendMail"/>
   <parameter name="transport.jms.ContentType">
      <rules>
         <jmsProperty>contentType</jmsProperty>
         <default>application/json</default>
      </rules>
   </parameter>
   <parameter name="transport.mail.ContentType">application/xml</parameter>
   <description/>
</proxy>                            

这是我的序列:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="sendMail">
   <property name="messageType" value="text/plain" scope="axis2" type="STRING"></property>
   <property name="ContentType" value="text/plain" scope="axis2"></property>
   <property xmlns:ns="http://org.apache.synapse/xsd" name="Subject" expression="json-eval($.subject)" scope="transport"></property>
   <property xmlns:ns="http://org.apache.synapse/xsd" name="To" expression="json-eval($.to)" scope="transport"></property>
   <property name="OUT_ONLY" value="true" scope="default" type="STRING"></property>
   <script language="js">
      <![CDATA[var mailbody = mc.getPayloadJSON().mailbody.toString();    mc.setPayloadXML(                           
     <ns:text xmlns:ns="http://ws.apache.org/commons/ns/payload">{mailbody}</ns:text>);]]>
   </script>
   <log level="full"></log>
   <send>
     <endpoint>
        <address uri="mailto:"></address>
     </endpoint>
   </send>
</sequence>