1

我正在开发一个宁静的网络服务,该网络服务的目的是根据传入的请求发送电子邮件。

我们决定使用 Mule 来实现这一点。我们在 mule 中定义了一个流,它接受请求(POST),然后将其写入队列。然后会有另一个流从这个队列中读取,然后使用 sendmail 或任何其他 java 邮件 api 发送消息。

我负责创建一个从队列中读取然后发送电子邮件的流。下面是将消息写入队列的 mule_config.xml 流程:

   <!-- This is the persistent VM connector -->
   <vm:connector name="mailQueueConnector" queueTimeout="1000">
         <vm:queue-profile>
        <file-queue-store />
         </vm:queue-profile>
   </vm:connector>


    <flow name="MailService">
        <https:inbound-endpoint address="https://localhost:71234/message/email"
            method="POST"
            exchange-pattern="request-response"
            contentType="application/xml"/>

        <vm:outbound-endpoint path="mailQueue" connector-ref="mailQueueConnector">
            <message-property-filter pattern="http.status=200" />
            <logger message="INTO mailQueue" level="INFO"/>
        </vm:outbound-endpoint>
        <response>
            <message-property-filter pattern="http.status=200" />
            <script:transformer>
                <script:script engine="groovy">
                    <script:text>
                        import groovy.xml.*
                        def writer = new StringWriter()
                        def xml = new MarkupBuilder(writer)
                        xml.ApiMessage {
                            returnCode("200")
                            reason("Queued Succesfully!!!")
                        }
                        return writer.toString()
                    </script:text>
                </script:script>
            </script:transformer>
        </response>
    </flow>

从上面我可以看到,命中入站端点“https://localhost:71234/message/email”的 POST 电子邮件请求被写入队列“mailQueue”。但是对于我的任务,我如何阅读队列中的电子邮件并将其序列化为电子邮件对象,以便我可以在 java 中编写代码来发送该电子邮件?我假设我必须为此编写一个新流程。我对吗?任何人都可以在这里为我指出正确的方向。

4

1 回答 1

2

使用以下命令创建新流程:

  • Avm:inbound-endpoint消耗mailQueue路径。
  • 可选的变压器来准备邮件正文。
  • smtp:outbound-endpoint发送电子邮件消息的一个,使用 MEL 表达式来表示其不同的属性(收件人、主题...)。

编辑 - OP 现在希望可以通过 HTTP 从外部和内部访问流。添加了一个复合源来做到这一点:

<flow name="emailer">
    <composite-source>
        <https:inbound-endpoint address="localhost:71234/message/sendEmail"
            method="POST" exchange-pattern="request-response"
            contentType="application/xml" />
        <vm:inbound-endpoint path="mailQueue"
            connector-ref="mailQueueConnector">
    </composite-source>
    <!-- Add transformers here if needed -->
    <smtp:outbound-endpoint ... />
</flow>
于 2012-12-19T23:12:58.013 回答