如何使用带有DSL配置的Spring Integration邮件在邮件中添加附件

问题描述 投票:1回答:1

我是Spring集成的新手,尝试使用带有DSL配置的spring集成邮件依赖项发送带有附件的电子邮件(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("[email protected]")
                        .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();
    }


}`
java spring-integration-dsl
1个回答
2
投票

查看文档:https://docs.spring.io/spring-integration/docs/current/reference/html/mail.html#mail

MailSendingMessageHandler具有使用Spring的MailMessage抽象的各种映射策略。如果接收到的消息的有效负载已经是MailMessage实例,则直接发送该消息。因此,我们通常建议您在此使用方之前使用一个变压器,以应对非平凡的MailMessage施工要求。但是,Spring Integration支持一些简单的消息映射策略。例如,如果消息有效负载是字节数组,则映射到附件。

关于此事的代码如下:

    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);
    }

因此,您需要将mailSender作为独立的bean。使用代码将其注入到您的一些转换器中,以构建这样的MimeMailMessage以及该代码Mail.outboundAdapter()。请参见JavaMailSenderImpl如何执行此操作。

另请参阅此文档以获取更多信息:https://docs.spring.io/spring/docs/5.2.6.RELEASE/spring-framework-reference/integration.html#mail-javamail-mime-attachments

© www.soinside.com 2019 - 2024. All rights reserved.