如何从Spring Integration获取原始邮件标头?

时间:2018-07-20 09:49:44

标签: spring email encoding integration

我有问题。我使用Spring Integration将抛出的IMAP连接到邮件服务器并从中获取消息。 但是据我了解,不同的消息(来自不同的发件人)具有不同的主题编码(或格式),因此,当我尝试处理这些消息时

@ServiceActivator
public List<Message<?>> handle(javax.mail.Message eMailMessage) throws MessagingException {
    Address[] addresses = eMailMessage.getFrom();
    String subj = eMailMessage.getSubject();
 ...
}

我有这样的想法 Óâåäîìëåíèå î íîâîé òåìå â ïîäïèñàííîì ôîðóìå。 因此,我尝试使用库来了解此文本使用的编码(文本具有西里尔字母)。 在当前情况下,我的文字采用ISO-8859-1编码。 为了找到编码,我尝试使用org.apache.tika.parser:

private static String checkForErrorDecoding(String str) 
                        throws UnsupportedEncodingException {             
    byte bytes[] = str.getBytes();
    CharsetDetector detector = new CharsetDetector();
    detector.setText(bytes);
    CharsetMatch charset = detector.detect();
    CharsetMatch charsets[] = detector.detectAll();
    String charsetName = charset.getName();
    if(charsetName.equalsIgnoreCase("windows-1251")) 
        return str;
    bytes = str.getBytes(charsetName);
}

但是在某些情况下,该库(apache.tika)获得不同类型的编码:

 Óâåäîìëåíèå î íîâîé òåìå â ïîäïèñàííîì ôîðóìå ( From VRPN )

 Óâåäîìëåíèå î íîâîé òåìå â ïîäïèñàííîì ôîðóìå

在第一种情况下,它返回正确的ISO-8859-1(以及字符集变量中的其他类型的编码,例如UTF-8,...,但是ISO-8859-1是数组中的第一个)。在第二种情况下,它返回UTF-8(在charsets变量中,我完全看不到ISO-895-1编码)。

我该怎么办?

或者也许当我想使用不同的编码时,最好使用原始头,但是我不明白如何从Spring Integration中获取原始邮件头(或完整消息)。

当我查看日志时,比看到的

21 FETCH (ENVELOPE ("Tue, 03 Sep 2013 19:37:45 +0400" "=?koi8-r?b?9dfFxM/NzMXOycUgzyDOz9fPyg==?= =?koi8-r?b?INTFzcUg1yDQz8TQydPBzs7PzQ==?= =?koi8-r?b?IMbP0tXNxQ==?=" ...

因此,我认为最好使用原始标头

"=?koi8-r?b?9dfFxM/NzMXOycUgzyDOz9fPyg==?= =?koi8-r?b?INTFzcUg1yDQz8TQydPBzs7PzQ==?= =?koi8-r?b?IMbP0tXNxQ==?="

并且我知道在base64解码之后,我将使用KOI8-R编码文本。 但是我不明白如何获取原始标头。

0 个答案:

没有答案