我正在研究Spring mail sample。该代码的作用是,每当新邮件到达Gmail收件箱时,它将打印邮件。

package org.springframework.integration.samples.mail.imapidle;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHandler;
import org.springframework.messaging.MessagingException;


/**
 * @author Oleg Zhurakousky
 * @author Gary Russell
 *
 */
public class GmailInboundImapIdleAdapterTestApp {
    private static Log logger = LogFactory.getLog(GmailInboundImapIdleAdapterTestApp.class);


    public static void main (String[] args) throws Exception {
        @SuppressWarnings("resource")
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext(
                "/META-INF/spring/integration/gmail-imap-idle-config.xml");
        DirectChannel inputChannel = ac.getBean("receiveChannel", DirectChannel.class);
        inputChannel.subscribe(new MessageHandler() {
            public void handleMessage(Message<?> message) throws MessagingException {
                logger.info("Message: " + message);
            }
        });
    }
}


我发送了2封电子邮件,最终这些行出现在Eclipse控制台上:


  16:04:52.851信息
  [pool-2-thread-1] [org.springframework.integration.samples.mail.imapidle.GmailInboundImapIdleAdapterTestApp]
  讯息:GenericMessage
  [payload=org.springframework.integration.mail.AbstractMailReceiver$IntegrationMimeMessage@4ac650aa,
  标头= {id = 869e46a9-8fd0-4351-4f1e-bb181286b05f,
  timestamp = 1570611892844}] 16:09:31.063信息
  [pool-2-thread-1] [org.springframework.integration.samples.mail.imapidle.GmailInboundImapIdleAdapterTestApp]
  讯息:GenericMessage
  [payload=org.springframework.integration.mail.AbstractMailReceiver$IntegrationMimeMessage@76114690,
  标头= {id = 6c791751-668e-69c5-3e05-1ae1ec72f853,
  timestamp = 1570612171063}]


现在如何检索身体内容?例如,邮件正文上是“ hello world 123”?

最佳答案

通过访问正在记录的对象的文档(Message接口)[0],您将找到一个getPayload方法,该方法将返回Message的实际有效载荷:


  T getPayload()
  
  返回消息有效负载。


此有效负载对象可能具有检索电子邮件数据的方法。在您的情况下,有效载荷是IntegrationMimeMessage [1],它扩展了MimeMessage并具有getContent方法[2]。因此,您应该可以执行以下操作:

logger.info("Message content: " + message.getPayload().getContent());


[0] https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/messaging/Message.html

[1] https://github.com/spring-projects/spring-integration/blob/master/spring-integration-mail/src/main/java/org/springframework/integration/mail/AbstractMailReceiver.java#L646

[2] https://docs.oracle.com/javaee/6/api/javax/mail/internet/MimeMessage.html#getContent()

关于java - 如何打印Spring Message捕获的电子邮件正文内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58300837/

10-10 16:46