Java 如何使用spring integration mail和DSL配置在邮件中添加附件

Java 如何使用spring integration mail和DSL配置在邮件中添加附件,java,spring-integration-dsl,Java,Spring Integration Dsl,我是Spring integration的新手,尝试使用Spring integration邮件依赖项和DSL配置发送带有附件(excel工作表)的电子邮件。 我的问题是我不知道如何在Mail.outboundadapterIntegrationFlow中添加附件。是否有人有附件样本请张贴或分享一些样本代码?我已经阅读了spring文档,无法理解其中的附件概念。下面是我的代码 SampleClass.java @EnableAutoConfiguration @SpringBootApplic

我是Spring integration的新手,尝试使用Spring integration邮件依赖项和DSL配置发送带有附件(excel工作表)的电子邮件。 我的问题是我不知道如何在
Mail.outboundadapter
IntegrationFlow
中添加附件。是否有人有附件样本请张贴或分享一些样本代码?我已经阅读了spring文档,无法理解其中的附件概念。下面是我的代码

SampleClass.java

@EnableAutoConfiguration 
@SpringBootApplication(scanBasePackages = { "c.v.flan"})
@IntegrationComponentScan
public class SampleClass {

    public static void main(String[] args)  {
        new SpringApplicationBuilder(SampleClass.class)
                .web(WebApplicationType.SERVLET)
                .run(args);

    }

    @Bean
    @Qualifier("get_send_channel")
    MessageChannel getSendChannel() {
        return MessageChannels.direct().get();
    }





    @Bean
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
        JavaMailSender m = new JavaMailSender() {

            @Override
            public void send(SimpleMailMessage[] arg0) throws MailException {
                // TODO Auto-generated method stub

            }

            @Override
            public void send(SimpleMailMessage arg0) throws MailException {
                // TODO Auto-generated method stub

            }

            @Override
            public void send(MimeMessagePreparator[] arg0) throws MailException {
                // TODO Auto-generated method stub

            }

            @Override
            public void send(MimeMessagePreparator arg0) throws MailException {
                // TODO Auto-generated method stub

            }

            @Override
            public void send(MimeMessage[] arg0) throws MailException {
                // TODO Auto-generated method stub

            }

            @Override
            public void send(MimeMessage arg0) throws MailException {
                // TODO Auto-generated method stub

            }

            @Override
            public MimeMessage createMimeMessage(InputStream arg0) throws MailException {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public MimeMessage createMimeMessage() {
                // TODO Auto-generated method stub
                return null;
            }
        };
        MimeMessage mimeMessage = m.createMimeMessage();
           MailMessage mailMessage = new SimpleMailMessage();
            mailMessage.setTo("da.a");
            mailMessage.setFrom("d.cfa");
            mailMessage.setText("test");
            mailMessage.setSubject("tedt syb");

        System.out.println("inside the command liner ");
        return args -> {
            Message<?> message = MessageBuilder.withPayload(mailMessage).build();
            System.out.println("Message [ayload =>"+ message.getPayload());
            getSendChannel().send(message);
//          System.out.println("we are getting out in demosi "+getReceiveChannel().receive().getPayload());
        };
    }




    @Bean
    public IntegrationFlow sendMailFlowl() {

        return IntegrationFlows.from(getSendChannel())
                .enrichHeaders(Mail.headers().
                        subjectFunction(m -> "Sub test").from("sue@hm.com")
                        .toFunction(m -> new String[] { "1@gm"})
                        // Dont know how to add function and point to an excel sheet 
                        // .attachmentFilenameFunction(attachmentFilename)
                        )
                .handle(Mail.outboundAdapter("c.v.com").port(245)
                        .credentials("ccc@gm", "Twenty21").protocol("smtp"),
                        e -> e.id("endCHannel"))
                .get();
    }


}`
@EnableAutoConfiguration
@SpringBootApplication(scanBasePackages={“c.v.flan”})
@集成组件扫描
公共类样本类{
公共静态void main(字符串[]args){
新的SpringApplicationBuilder(SampleClass.class)
.web(WebApplicationType.SERVLET)
.run(args);
}
@豆子
@限定符(“获取\发送\通道”)
MessageChannel getSendChannel(){
返回MessageChannels.direct().get();
}
@豆子
公共命令行运行程序命令行运行程序(ApplicationContext ctx){
JavaMailSender m=新的JavaMailSender(){
@凌驾
公共无效发送(SimpleEmailMessage[]arg0)引发MailException{
//TODO自动生成的方法存根
}
@凌驾
公共无效发送(SimpleEmailMessage arg0)引发MailException{
//TODO自动生成的方法存根
}
@凌驾
public void send(mimessagepreparator[]arg0)引发MailException{
//TODO自动生成的方法存根
}
@凌驾
public void send(mimessagepreparator arg0)引发MailException{
//TODO自动生成的方法存根
}
@凌驾
public void send(mimessage[]arg0)引发MailException{
//TODO自动生成的方法存根
}
@凌驾
public void send(mimessage arg0)引发MailException{
//TODO自动生成的方法存根
}
@凌驾
公共MimeMessage createMimeMessage(InputStream arg0)引发MailException{
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共mimessage createmimessage(){
//TODO自动生成的方法存根
返回null;
}
};
MimeMessage MimeMessage=m.createMimeMessage();
MailMessage MailMessage=新建SimpleEmailMessage();
mailMessage.setTo(“da.a”);
mailMessage.setFrom(“d.cfa”);
mailMessage.setText(“测试”);
mailMessage.setSubject(“tedt syb”);
System.out.println(“在命令行内”);
返回参数->{
Message Message=MessageBuilder.withPayload(mailMessage.build();
System.out.println(“Message[ayload=>”+Message.getPayload());
getSendChannel().send(消息);
//println(“我们正在演示”+getReceiveChannel().receive().getPayload());
};
}
@豆子
公共集成流sendMailFlowl(){
从(getSendChannel())返回IntegrationFlows.from
.enrichHeaders(Mail.headers()。
主题功能(m->“子测试”)。来自sue@hm.com")
.toFunction(m->新字符串[]{”1@gm"})
//不知道如何添加函数并指向excel工作表
//.attachmentFilename函数(attachmentFilename)
)
.handle(Mail.outboundAdapter(“c.v.com”).port(245)
.证书(“ccc@gm“,“Twenty21”)。协议(“smtp”),
e->e.id(“endCHannel”))
.get();
}
}`
参见文档:

MailSendingMessageHandler
具有各种映射策略,使用Spring的
MailMessage
抽象。如果收到的消息的有效负载已经是
MailMessage
实例,则直接发送。因此,我们通常建议您在该消费者之前为非平凡的
邮件设置一个转换器sage
构造要求。但是,Spring集成支持一些简单的消息映射策略。例如,如果消息负载是字节数组,则映射到附件

关于这件事的密码是这样的:

    MimeMessage mimeMessage = ((JavaMailSender) this.mailSender).createMimeMessage();
    try {
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, multipartMode);
        helper.addAttachment(attachmentFileName, new ByteArrayResource(message.getPayload()));
        return new MimeMailMessage(helper);
    }
    catch (MessagingException e) {
        throw new MessageMappingException(message, "failed to create MimeMessage", e);
    }
因此,您需要将该
mailssender
作为一个独立的bean。将它与代码一起注入到转换器中,以构建这样一个
MimeMailMessage
以及
Mail.outboundAdapter()
。请参阅
JavaMailSenderImpl
如何做到这一点

有关更多信息,请参见本文档: