我正在尝试使用spring集成来接收电子邮件,解析它以调用服务,然后有条件地转发相同的电子邮件。我能够阅读,解析和发送电子邮件,但不能转发内容
@Bean
@Value("${imap.url}")
public IntegrationFlow mailListener( String imapUrl) {
return IntegrationFlows
.from(s -> s.imap(imapUrl)
.searchTermStrategy((f,l) -> fromAndNotSeenTerm())
.javaMailProperties(p -> p.put("mail.debug", "false")),
e -> e.autoStartup(true)
.poller(p -> p.fixedDelay(10000)))
.handle(Message.class, (payload, header) -> parseEmail(payload))
.<Boolean, Boolean>route(p -> p,
m -> m.channelMapping("true", "sendMailChannel")
.channelMapping("false", "nullChannel"))
.get();
}
@Bean
public IntegrationFlow sendMailFlow() {
return IntegrationFlows.from("sendMailChannel")
.enrichHeaders(Mail.headers().subjectFunction(m->"Email SUbj").from("xyz@abc.com").toFunction(m -> new String[] { "abc@abc.com" }))
.handle(Mail.outboundAdapter("smtp.host.net")
.port(25)
.protocol("smtp")
.javaMailProperties(p -> p.put("mail.debug", "true")))
.get();
}
使用上面的代码,问题是将从电子邮件(有效负载)读取的内容传递给sendEmailChannel。目前,parseEmail(Boolean)的输出将转到频道。你能告诉你完成它的方法吗?仍然无法想出如何解决这个问题
UPDATE1:
@Bean
@Value("${imap.url}")
public IntegrationFlow mailListener( String imapUrl) {
return IntegrationFlows
.from(s -> s.imap(imapUrl)
.searchTermStrategy((f,l) -> fromAndNotSeenTerm())
.javaMailProperties(p -> p.put("mail.debug", "false")),
e -> e.autoStartup(true)
.poller(p -> p.fixedDelay(10000)))
.enrichHeaders(s -> s.headerExpressions(h -> h
.put("saved", "payload")))
.handle(Message.class, (payload, header) -> parseEmail(payload))
.<Boolean, Boolean>route(p -> p,
m -> m.channelMapping("true", "sendMailChannel")
.channelMapping("false", "nullChannel"))
.get();
}
我按照建议将有效负载添加到标头中,但无法找出转换以从标头设置有效负载。但即使我在路由之前将其设置回有效载荷,它是否会打破流量?因为parse方法(布尔)的输出应该驱动路径决定
最终更新
感谢Gary的帮助,我可以通过添加过滤器和转换
来实现我的第一个集成流程public IntegrationFlow mailListener( String imapUrl) {
return IntegrationFlows
.from(s -> s.imap(imapUrl)
.searchTermStrategy((f,l) -> fromAndNotSeenTerm())
.javaMailProperties(p -> p.put("mail.debug", "false")),
e -> e.autoStartup(true)
.poller(p -> p.fixedDelay(10000)))
.enrichHeaders(s -> s.headerExpressions(h -> h
.put("saved", "payload")))
.handle(Message.class, (payload, header) -> parseEmail(payload))
.filter((Boolean p) -> p == true)
.transform("headers['saved']")
.channel(MessageChannels.queue("sendMailChannel"))
.get();
}
答案 0 :(得分:1)
使用标头集合器来保存标头中的原始有效负载(标头名称= saved
表达式= payload
),然后在解析器之后将变换器移回到paylaod(表达式= { {1}})。