使用Mule的IMAP传输时如何解析入站电子邮件?

时间:2013-02-07 17:53:35

标签: mule mule-studio

我刚刚开始学习骡子,所以如果这是一个非常基本的问题,请原谅我。

我已成功配置mule来监控我的邮箱,所以无论何时收到邮件我都会将邮件写入文本文件(仅用于测试)。

现在我需要解析这封邮件并从邮件中获取消息/ From / To。

<flow name="testFlow" doc:name="testFlow">
        <imap:inbound-endpoint host="ip"
            port="143" user="username" password="pwd" doc:name="IMAP"
            responseTimeout="10000" transformer-refs="Message_Properties">
        </imap:inbound-endpoint>
        <file:outbound-endpoint path="C:\"
            outputPattern="#[function:datestamp].dat" doc:name="File">
        </file:outbound-endpoint>
    </flow>

我以为我可以使用下面的表达式(使用表达式变换器)获取标题信息

#[inboundProperties['email-header-name']] 

但这似乎不起作用。我也尝试过以下表达式,但没有用,

#[map-payload:HOST]
#[map-payload:MESSAGE]
#[map-payload:TIMESTAMP]

有人可以帮忙吗?也有人知道是否有一个包含可用表达式列表的文档?

编辑:

我包含了记录器以查看属性,它显示了所有属性,但我找不到正文..另外,我尝试使用

获取fromAddress
#[map-payload:fromAddress] and #[inboundProperties['fromAddress']] 

但没有奏效,有人能告诉我哪里错了吗?

属性如下所示,

inbound.fromAddress=Service <service@xx.com> 
inbound.subject=Test Final inbound.toAddresses=Service

编辑2:

这是我尝试但不起作用的:(

我正在尝试检索电子邮件主题并写入文件或仅使用基于电子邮件主题的记录器显示它但我收到以下错误。

ERROR 2013-02-07 19:22:45,275 [[test].connector.file.mule.default.dispatcher.01] org.mule.exception.DefaultMessagingExceptionStrategy:
********************************************************************************
Message : Could not find a transformer to transform "SimpleDataType{type=javax.mail.internet.MimeMessage, mimeType='*/*'}" to "SimpleDataType{type=java.io.InputStream, mimeType='*/*'}".
Code : MULE_ERROR-236 

你能让我知道我在哪里弄错了吗?

<flow name="testFlow1" doc:name="testFlow1">
<imap:inbound-endpoint host="ip"
port="143" user="uname" password="pwd" doc:name="IMAP"
responseTimeout="10000" disableTransportTransformer="true">
</imap:inbound-endpoint>
<logger message="#[message.inboundProperties['inbound.fromAddress']]" level="INFO" doc:name="Logger"/>
<choice doc:name="Choice">
<when expression="message.inboundProperties['inbound.subject']=='plain test'">
<processor-chain>
<logger message="#[message.inboundProperties['inbound.fromAddress']]" level="INFO" doc:name="Logger"/>
</processor-chain>
</when>
<otherwise>
<processor-chain>
<file:outbound-endpoint path="C:\mule" outputPattern="#[function:datestamp].dat" responseTimeout="10000" disableTransportTransformer="true" doc:name="File">
</file:outbound-endpoint>
</processor-chain>
</otherwise>
</choice>
</flow>  

1 个答案:

答案 0 :(得分:4)

不幸的是,IMAP connector documentation没有列出收到新邮件时创建的邮件属性。您可以通过添加:

找到所有创建的属性
<logger level="WARN" />
imap:inbound-endpoint之后

。这将记录WARN级别的所有消息元信息,包括属性。

您还可以在MailProperties JavaDoc中找到属性名称。例如,inbound.fromAddress是包含发件人电子邮件地址的入站属性。

邮件正文是文本电子邮件内容,除非它是多部分电子邮件。在这种情况下,如果第一部分是text/plain,它将被设置为消息有效负载,否则所有部分都将作为入站消息附件提供。