2016-07-18 20 views
1

我收到電子郵件春天,一個非常基本的腳本到目前爲止如何正確地獲得與Spring集成入站郵件標題

ApplicationContext ac = new ClassPathXmlApplicationContext("imap.xml"); 
DirectChannel inputChannel = ac.getBean("receiveChannel", DirectChannel.class); 
inputChannel.subscribe(message -> { 
    System.out.println(message.getHeaders()); 
    System.out.println(message.getPayload()); 

    MessageHeaders headers = message.getHeaders(); 
    String from = (String) headers.get("mail_from"); 
}); 

據我以爲頭會得到自動解析的documentation,但頭我與第一System.out.println();得到只是

{id=c65f55aa-c611-71ee-c56d-6bf13c6f71d0, timestamp=1468869891279} 

第二輸出(用於getPayload())是

org.springframewo[email protected]6af5615d 

from輸出null ...

然後我試圖使用MailToStringTransformer

MailToStringTransformer a = transformer(); 
    a.setCharset("utf-8"); 
System.out.println(a.transform(message)); 

,它輸出的有效載荷和我預料的所有頭,但是(自然)爲一個字符串。

我需要做些什麼來獲取對象中的消息標題和文本?

回答

1

不知道該文檔你指的,但目前的4.3版本有這樣的:

默認情況下,入站適配器產生的信息的有效載荷是原始MimeMessage;您可以使用該對象查詢標題和內容。從版本4.3開始,您可以提供HeaderMapper<MimeMessage>將標頭映射到MessageHeaders;爲了方便,爲此提供了DefaultMailHeaderMapper

及以下有點:

當你不提供一個頭映射器,消息負載是javax.mail呈現的MimeMessage。該框架提供了一個MailToStringTransformer ...

如果你需要映射一些定製你總是可以提供自己的HeaderMapper<MimeMessage>實現或DefaultMailHeaderMapper擴展。

+0

謝謝你的迴應。你引用了我已鏈接的文檔。謝謝你。你真的能幫我嗎?我真的不知道如何使用HeaderMapper – baao

+0

試着從'DefaultMailHeaderMapper'注入你的'imap-idle-channel-adapter'。並且要注意'embedded-parts-as-bytes'選項。 –

+0

謝謝,我以爲我以前完全錯了。問題實際上是我的Spring集成版本錯誤,並且沒有DefaultMailHeaderMapper類。現在它正在工作 – baao