当前位置: 首页 > 知识库问答 >
问题:

使用apache camel下载邮件附件时出错

阎涵忍
2023-03-14

我正在一个apache camel项目中下载收件箱中的任何附件,以实现我遵循http://camel.apache.org/mail.html中使用附件的邮件示例中的信息。除了附件的文件名带有特殊的字符或空格外,其他操作都很正常。例如,如果附件的文件名为“voucher.pdf”,则程序将运行并下载该文件,但如果附件的文件名为“Pase de abordar en Línea(1).pdf”,则会出现以下错误:

消息历史记录----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

null

这是我的主要方法:

public class Main {

    public static void main(String[] args) throws FileNotFoundException {

        KeyStoreParameters ksp = new KeyStoreParameters();
        ksp.setResource("C://Program Files (x86)//Java//jre1.8.0_161//lib//security");
        ksp.setPassword("changeit");

        KeyManagersParameters kmp = new KeyManagersParameters();
        kmp.setKeyStore(ksp);
        kmp.setKeyPassword("changeit");

        SSLContextParameters scp = new SSLContextParameters();
        scp.setKeyManagers(kmp);        


        BasicConfigurator.configure();
        RutaMail routeBuilder = new RutaMail();

        SimpleRegistry jndi= new SimpleRegistry();
        jndi.put("keystore", scp);              

        CamelContext ctx = new DefaultCamelContext(jndi);





        try {

            ctx.addRoutes(routeBuilder);
            ctx.start();
            Thread.sleep(30000);
            ctx.stop();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

这是骆驼路线:

public void configure() throws Exception {

        from("imaps://imap.gmail.com:993?username=user@gmail.com&password=password"
                + "&delete=false&unseen=true&consumer.delay=60000&contentType=multipart/MIXED")
                        .convertBodyTo(String.class, "UTF-8")
                        .process(new MailProcessor())

                        .to("file:C:/outputFolder/?flatten=true&fileName=${header.nombref}")
                        .log("el nombre del archivo es  ${header.nombref}").end();
    }

}

这是处理器:

public class MailProcessor implements Processor {

    public void process(Exchange exchange) throws Exception {
                String nombre="";


        // the API is a bit clunky so we need to loop
        Map<String, DataHandler> attachments = exchange.getIn().getAttachments();

        String file="";

        if (attachments.size() > 0) {
            for (String name : attachments.keySet()) {                


                DataHandler dh = attachments.get(name);

                String filename =dh.getName();
                nombre =filename;


                byte[] data = exchange.getContext().getTypeConverter()
                                  .convertTo(byte[].class, dh.getInputStream());                                             

                exchange.getIn().setBody( data);
                exchange.getIn().setHeader("nombref", filename);
            }          


        }
   }

}

谢谢你的帮助。

共有1个答案

程谦
2023-03-14

看来你的操作系统不允许用这样的名字保存文件

 类似资料:
  • 问题内容: 我查看了参考文档,Spring似乎对发送邮件有很好的支持。但是,我需要登录到邮件帐户,阅读邮件并下载所有附件。Spring mail API是否支持下载邮件附件? 我知道您可以使用Java Mail API来执行此操作,但是在过去,我发现使用它非常冗长且令人不愉快。 编辑 :我收到了一些指向教程的答复,这些教程描述了如何发送带有附件的邮件,但是我要问的是如何从 收到的 邮件中 读取 附

  • 如何从内容类型为“多部分/备选”的邮件中下载附件;

  • 我有一个网络应用程序,用户可以点击按钮下载PDF报告。 我的用户要求在下载PDF时立即将其作为电子邮件附件打开(有点像单击mailto锚时)。 这可能吗?我在想也许可以在幕后使用js生成锚定标记,但我读到mailto并不真正支持附件。 如果这很重要,PDF将使用PHP mPDF设置为下载输出模式在服务器端生成。

  • 我一直在使用此脚本向某些员工发送电子邮件,但由于我的系统发生了更改,我现在必须随电子邮件发送附件,我尝试了多个代码来完成此任务,但都没有成功。。。我仍然收到电子邮件,但没有附件,这在这种情况下是毫无意义的,我已经把我正在使用的脚本放在下面 我已经删除了我使用的真实地址和smtp服务器 我也尝试了一些其他的emtods附加的文件,但似乎没有工作任何帮助是大大的

  • 我需要将邮件从我的gmail帐户发送到另一个帐户。我使用了以下代码。 但我得到的错误如下。。。javax。邮政MessaginException:无法连接到SMTP主机:SMTP。gmail。com,端口:25 我该怎么解决这个问题。你能帮我吗?

  • 这是我发送邮件的代码 我在tomcat的lib文件夹中添加了和。我将eclipse与Tomcat7、JRE7和Struts2一起使用。通过Java发送邮件时出现以下控制台错误: