Camel Beans - 动态电子邮件主题

时间:2015-03-23 18:55:53

标签: xslt jms apache-camel activemq

您好我在activemq中配置了camel.xml文件来发送邮件。这是xml配置代码

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="
 http://camel.apache.org/schema/spring                                                   http://camel.apache.org/schema/spring/camel-spring.xsd
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
<propertyPlaceholder id="properties" location="classpath:properties"/>

<route>
  <description>Event Detected</description>
  <from uri="activemq:topic:Events?selector=JMSType='Event'"/>
  <to uri="xslt:file:{{activemq.conf}}/XLSs/Event.xsl"/>
  <to uri="smtp://mail.net:25?from=abc@abc.com&amp;to=abc@abc.com&amp;subject= Hello World!&amp;contentType=text/html"/>
</route>
</camelContext>
</bean>
</beans>

以下是我用来将xml转换为html的Event.xslt,以便在邮件正文中发送。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet   version="1.0"                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/Event">
  <html>
    <head>
      <title>Event Detected!</title>
    </head>
    <body>
    <h2>
      Event Detected!
    </h2>       
    <xsl:value-of select="Title"/>       
  </body>
</html>

有没有办法可以动态地将邮件主题设置为邮件正文中的Title属性?

这是我的xml

 <?xml version="1.0" encoding="utf-8" ?> 
 <Event xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <Title>Test</Title>  
 </Event>

1 个答案:

答案 0 :(得分:3)

您可以使用xpath从消息体中提取标题,并将其设置为名称为Subject的标题。然后邮件组件将使用标题中的值作为电子邮件主题。

的长篇大论
<setHeader headerName="Subject">
  <xpath>/Event/Title/text()</xpath>
</setHeader>

请注意,xpath可能很棘手,特别是如果您的xml使用名称空间。如果是这种情况,那么xpath表达式也必须使用命名空间映射。

详情请见