java - 如何打印使用 Spring Message 捕获的电子邮件正文内容
问题描述
我正在研究这个Spring 邮件示例。这段代码的作用是每次有新邮件到达 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 INFO [pool-2-thread-1][org.springframework.integration.samples.mail.imapidle.GmailInboundImapIdleAdapterTestApp] 消息:GenericMessage [payload=org.springframework.integration.mail.AbstractMailReceiver$IntegrationMimeMessage@4ac650aa, headers={id=869e46a9-8fd0-4351-4f1e-bb181286b05f,timestamp=1570611892844}] 16:09:31.063 INFO [pool-2-thread-1][org.springframework.integration.samples.mail.imapidle.GmailInboundImapIdleAdapterTestApp]消息:GenericMessage [payload=org.springframework.integration.mail.AbstractMailReceiver$IntegrationMimeMessage@76114690, headers={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());
[2] https://docs.oracle.com/javaee/6/api/javax/mail/internet/MimeMessage.html#getContent()
推荐阅读
- c# - VirusTotal 上传的文件为零字节
- jboss - Keycloak 不为事件发送电子邮件
- javascript - 如果我从 3 到 1 选项卡单击,选定的单选按钮答案类将被删除。但是对于直接邻居来说工作正常吗?
- javascript - 通过带有 formData 的 fetch 向 Nodejs 服务器发送文件返回 req.files null
- mysql - 续集迁移文件:添加 createdAt 和 updatedAt 列
- reactjs - 如何使用 PrimeReact FileUpload 组件上传文件
- selenium - 如何一次在硒中发送多行字符串?
- c++ - 有没有一种实用的方法可以在另一个 wxPanel 上创建 wxPanel?
- java - 多个 entityMangagerFactories(使用 1PC 模式)导致 java.lang.IllegalStateException: 'url' not set 异常
- mysql - 启动后在 mySQL 容器中播种数据