【问题标题】:Download mail attachments from Gmail, getting Exchange[MailMessage: null]从 Gmail 下载邮件附件,获取 Exchange[MailMessage: null]
【发布时间】:2014-11-01 12:55:31
【问题描述】:

我需要使用 java 程序从 Gmail 帐户下载附件。 使用Apache Camel

在跑步时,我得到了,

Exchange[MailMessage: null],因此 attachments.size() 为 0

我也发布了我的测试代码

@Test
public void configureExcange() throws Exception {

    try {
        CamelContext context = new DefaultCamelContext();

        Endpoint endpoint =
                context.getEndpoint("imaps://imap.gmail.com?username=" + mailId + "&password=" + password
                        + "&delete=false&unseen=true&consumer.delay=60000");

        // PollingConsumer consumer = endpoint.createPollingConsumer();
        Exchange exchange = endpoint.createExchange();

        process(exchange);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void process(Exchange exchange) throws Exception {
    // the API is a bit clunky so we need to loop
    Map<String, DataHandler> attachments = exchange.getIn().getAttachments();
    if (attachments.size() > 0) {
        for (String name : attachments.keySet()) {
            DataHandler dh = attachments.get(name);
            // get the file name
            String filename = dh.getName();

            // get the content and convert it to byte[]
            byte[] data = exchange.getContext().getTypeConverter().convertTo(byte[].class, dh.getInputStream());

            // write the data to a file
            FileOutputStream out = new FileOutputStream(filename);
            out.write(data);
            out.flush();
            out.close();
        }
    }
}

如何获取附件?

【问题讨论】:

    标签: java email apache-camel email-attachments


    【解决方案1】:

    Endpoint.createExchange() 只是创建要使用的交换,它不会从邮件服务器中提取消息。 您需要使用 ConsumerTemplate 从 gmail 服务器中提取消息。

    【讨论】:

      【解决方案2】:

      更新功能,展示如何轮询邮件账户。

      @Test
      public void configureExcange() throws Exception {
      
          PollingConsumer pollingConsumer = null;
          try {
              CamelContext context = new DefaultCamelContext();
              Endpoint endpoint =
                      context.getEndpoint("imaps://imap.gmail.com?username="
                      + mailId + "&password=" + password
                      + "&delete=false&peek=false&unseen=true&consumer.delay=60000&closeFolder=false&disconnect=false");
                  // options unseen=true, will only poll unread mails
      
                  //Polling an END point
                  pollingConsumer = endpoint.createPollingConsumer();
                  pollingConsumer.start();
                  pollingConsumer.getEndpoint().createExchange();
      
                  Exchange exchange = pollingConsumer.receive(60000);
      
                  while (exchange != null) {
                      process(exchange);
                      //each time "pollingConsumer" will poll 1 mail at a time
                      exchange = pollingConsumer.receive(60000);
                  }
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-15
        • 2012-11-23
        • 2016-09-12
        • 1970-01-01
        • 2014-11-08
        • 2011-08-24
        • 1970-01-01
        • 2022-08-24
        相关资源
        最近更新 更多