Мул вопросы ESB IMAP - PullRequest
       7

Мул вопросы ESB IMAP

1 голос
/ 08 февраля 2012

В настоящее время нам нужно получать почту с сервера IMAP, используя Mule ESB.После получения писем нам нужны только вложения и их сохранение на жестком диске.Все идет нормально.Теперь у меня есть пара вопросов:

  1. Как сохранить исходное имя без изменений, используя файл: outbound-endpoint?
  2. Как я могу проверить, сколько вложений я получил?
  3. Как сохранить копию письма на IMAP и локальном диске?

@ 1: я пробовал #header: fileName или #originalFileName или даже удалял outputpattern (это приводит кимя файла: «35c7dea0-519a-11e1-b8b2-092b658ae008.dat»)

@ 2: я пытаюсь создать поток, в котором я проверяю количество вложений.Если их меньше 1, я хочу сохранить файлы и больше не обрабатывать их.Если оно больше 1, сохраните его и обработайте.Я пробовал COUNT, но это не сработало.

@ 3: пытаюсь переместить сообщение, когда ЧИТАешь в резервную папку на IMAP-сервере.Кроме того, я сохраню копию на локальном сервере.Проблема заключается в том, что в текущем коде сообщение не помечается как прочитанное и не перемещается.Сообщения остаются непрочитанными и копируются (снова и снова, зацикливание), а не перемещаются в папку резервного копирования IMAP.При включении deleteReadMessages цикл прерывается, но сообщение не копируется в IMAP.

Вот код, который я сейчас использую:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:spring="http://www.springframework.org/schema/beans"
           xmlns:imap="http://www.mulesoft.org/schema/mule/imap"
           xmlns:file="http://www.mulesoft.org/schema/mule/file"
           xmlns:email="http://www.mulesoft.org/schema/mule/email"
           xmlns:vm="http://www.mulesoft.org/schema/mule/vm"
           xsi:schemaLocation="
           http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/3.2/mule.xsd
           http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/3.2/mule-file.xsd
           http://www.mulesoft.org/schema/mule/imap http://www.mulesoft.org/schema/mule/imap/3.2/mule-imap.xsd
           http://www.mulesoft.org/schema/mule/email http://www.mulesoft.org/schema/mule/email/3.2/mule-email.xsd
           http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/3.2/mule-vm.xsd">

        <imap:connector name="imapConnector" checkFrequency="5000" 
        backupEnabled="true" backupFolder="/home/mark/workspace/Eclipse/RHZ_Project/src/Archive/"
        mailboxFolder="INBOX" moveToFolder="INBOX.Backup" deleteReadMessages="false" 
        defaultProcessMessageAction="SEEN" />
        <expression-transformer name="returnAttachments">
            <return-argument evaluator="attachments-list" expression="*.txt,*.ozb,*.xml" optional="false"/>
        </expression-transformer>

        <flow name="Flow1_IMAP_fetch">
            <imap:inbound-endpoint user="USER" password="PASS" host="IP" 
                         port="143" transformer-refs="returnAttachments" disableTransportTransformer="true"/>               
            <collection-splitter/>          
            <file:outbound-endpoint path="/home/mark/workspace/Eclipse/RHZ_Project/src/Inbox/#[function:datestamp].dat">
                    <expression-transformer>
                        <return-argument expression="payload.inputStream" evaluator="groovy" />
                    </expression-transformer>
            </file:outbound-endpoint>      

        </flow>
</mule>

1 Ответ

0 голосов
/ 08 февраля 2012

1) Как сохранить исходное имя без изменений, используя файл: outbound-endpoint?

Вложения являются экземплярами javax.activation.DataHandler, поэтому вы должны иметь возможность вызывать для них getName () с выражением OGNL или Groovy. Например:

#[groovy:payload.name]

Должно дать вам оригинальное имя вложения.

2) Как я могу проверить, сколько вложений я получил?

Перед разделителем используйте маршрутизатор choice и условие, которое проверяет атрибут size () списка вложений, например:

#[groovy:payload.size()>1]

3) Как сохранить копию письма на IMAP и локальном диске?

Я не знаю, в чем здесь проблема. Возможно маркировка как видимая не поддерживается. Или, может быть, тот факт, что вы отключили транспортный преобразователь, не позволяет запустить действие после чтения.

Кстати, я предлагаю вам оставить транспортный преобразователь по умолчанию как есть и переместить преобразователь returnAttachments после входящей конечной точки, перед разделителем.

...