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

Apache Camel将电子邮件附件上传到ftp

鲁才艺
2023-03-14

我使用以下处理器获取电子邮件的第一个附件并将其上传到ftp服务器。

路由配置

<from uri="imaps://...
<to uri="ejb:java:global/Dms/MailProcessor"/>
<to uri="ftp://....

邮件处理器

@Named("MailProcessor")
@Stateless
public class MailProcessor implements Processor {

    @Override
    public void process(Exchange exchange) throws Exception {

        exchange.getOut().setHeaders(exchange.getIn().getHeaders());

        Map<String, DataHandler> attachments = exchange.getIn().getAttachments();
        if (attachments.size() > 0) {
            for (String name : attachments.keySet()) {
                DataHandler dataHandler = attachments.get(name);

                // SET ATTACHMENT FILENAME TO OUTPUT FILENAME HEADER
                String filename = dataHandler.getName();
                filename = MimeUtility.decodeText(filename);
                exchange.getOut().setHeader("filename", filename);

                // SET INPUT ATTACHMENT TO OUTPUT BODY
                byte[] data = exchange.getContext().getTypeConverter().convertTo(byte[].class, dataHandler.getInputStream());
                exchange.getOut().setBody(data);

                // SET ONLY THE FIRST ATTACHMENT
                break;
            }
        }else{
            exchange.getOut().setBody(exchange.getIn().getBody());
    }

}

这通常有效,但对于“大”附件来说,它实际上需要永远。(仅 5 MB 附件半小时)

原木

TRACE [org.apache.camel.component.file.remote.FtpOperations] (Camel (example) thread #119 - imaps://mail.example.com) Changing directory: upload
TRACE [org.apache.camel.component.file.remote.FtpOperations] (Camel (example) thread #119 - imaps://mail.example.com) doStoreFile(ID-example-local-59752-1494841993139-21-11)
DEBUG [org.apache.camel.component.file.remote.FtpOperations] (Camel (example) thread #119 - imaps://mail.example.com) About to store file: ID-example-local-59752-1494841993139-21-11 using stream: com.sun.mail.util.BASE64DecoderStream@601a11dc
TRACE [org.apache.camel.component.file.remote.FtpOperations] (Camel (example) thread #119 - imaps://mail.example.com) Client storeFile: ID-example-local-59752-1494841993139-21-11
 -- long pause --

我还尝试像这样转换附件:

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

但这给了我以下信息:

2017-05-15 11:23:20,968 TRACE [org.apache.camel.impl.converter.DefaultTypeConverter] (Camel (example) thread #133 - imaps://mail.example.com) Converting org.apache.camel.Processor$$$view63 -> org.apache.camel.Processor with value: Proxy for view class: org.apache.camel.Processor of EJB: MailProcessor
2017-05-15 11:23:20,968 TRACE [org.apache.camel.component.bean.BeanProcessor] (Camel (example) thread #133 - imaps://mail.example.com) Using a custom adapter as bean invocation: Proxy for view class: org.apache.camel.Processor of EJB: MailProcessor
2017-05-15 11:23:20,990 TRACE [org.apache.camel.impl.converter.DefaultTypeConverter] (Camel (example) thread #133 - imaps://mail.example.com) Converting com.sun.mail.util.BASE64DecoderStream -> byte[] with value: com.sun.mail.util.BASE64DecoderStream@28442828
2017-05-15 11:23:20,990 TRACE [org.apache.camel.impl.converter.DefaultTypeConverter] (Camel (example) thread #133 - imaps://mail.example.com) Using converter: StaticMethodTypeConverter: public static byte[] org.apache.camel.converter.IOConverter.toBytes(java.io.InputStream) throws java.io.IOException to convert [class com.sun.mail.util.BASE64DecoderStream=>class [B]
2017-05-15 11:23:20,990 TRACE [org.apache.camel.util.IOHelper] (Camel (example) thread #133 - imaps://mail.example.com) Copying InputStream: java.io.BufferedInputStream@24b2cffb -> OutputStream:  with buffer: 4096 and flush on each write false
-- long pause --

使用Filezilla上传到ftp服务器非常有效。另外,当我在另一条路径上使用camel-ftp时(由文件上传触发),上传到ftp服务器的速度非常快。所以我有一种感觉,是依恋的转换让事情慢了下来。

问题:

我的假设是正确的吗?我怎样才能加快速度?

共有1个答案

章建木
2023-03-14

解决方案是使用< code >

https://community.oracle.com/thread/2604843?start=0

 类似资料:
  • 我正试图传送一封电子邮件到控制器,但由于某些原因它不工作,我收到404错误。 当我将email变量更改为没有“.”的字符串时。它起作用了。 这就是它在客户端的样子- 在控制器里- 感谢任何帮助!!谢谢

  • 问题内容: 我想发送带有PDF附件的电子邮件。我创建了PDF文件,然后执行了以下操作,但我认为这是错误的: 在发送电子邮件之前,我可以看到附件,但是当我发送电子邮件时,它的发送没有附件,这是因为我没有正确附加文件。 问题答案: 您错了。使用代替。

  • 问题内容: 我正在使用sendgrid发送电子邮件,并且使用以下代码可以正常工作,但没有附件。 但是我需要发送附件,因此我搜索了github源和Web文档API,由于某种原因,没有javadocs,但是有一个示例GitHub sendgrid, 所以我一直在尝试直到它起作用为止,我缩小了一些异常和响应代码,起初我是被禁止的未经授权,最好是响应202,表示有效且已排队(在此处检查),这是我的代码发送

  • 问题内容: 有没有办法将图像附加到用PHP创建的html格式的电子邮件中? 我们需要确保在发送给可能在阅读电子邮件时无法访问Internet的客户的电子邮件上带有公司徽标(显然,他们可以下载文件)。 问题答案: 尝试使用PEARMail_Mime软件包,该软件包可以为您嵌入图像。 您需要使用addHTMLImage()方法并传递内容ID(cid),这是一个唯一的文本字符串,您还将在img的src属

  • 我试图发送一个附加的json文件到电子邮件,但是由于某种原因,在发送/创建电子邮件时,json文件没有被附加。注意:我不希望用户选择要附加的文件,我希望它被固定/自动设置。 我有以下权限在我的 还有密码 编辑1:在做了@piyushpk建议的建议更改后,我现在在选择电子邮件应用程序时会出现以下错误: 然而,根据我的打印声明,文件大小只有69KB。。。

  • 我使用Apache Fop和XSL-FO生成PDF。然后,我尝试将pdf流式传输为apache的附件。平民邮政HtmlEmail;我收到带有附件的电子邮件,但我收到以下错误。长度为0字节,无编码。我能够在文件系统上创建一个没有任何问题的pdf,所以我知道这段代码的FOP部分没有问题,所以我不确定为什么它不起作用。有人能告诉我我错过了什么吗? 我的代码。 Fop类 }