0
 Store store = session.getStore("imaps");
  store.connect(host, "username",
     "password");//change the user and password accordingly
  Folder folder = store.getFolder("inbox");
  if (!folder.exists()) {
     System.out.println("inbox not found");
        System.exit(0);
  }
  folder.open(Folder.READ_ONLY);
  Date today=new Date();
  SearchTerm st = new ReceivedDateTerm(ComparisonTerm.EQ,today);
  Message[] messages = folder.search(st);

  for(int i=0;i<messages.length;i++)
  {

    String s1=messages[i].getSubject();
    if(s1!=null&&s1!="")
    {
    String s2="EXT: FSG daily shipment information";
    if(s1.equalsIgnoreCase(s2))
    {
  String contentType = messages[i].getContentType();
  String messageContent = "";

  // store attachment file name, separated by comma
  String attachFiles = "";

  if (contentType.contains("multipart")) {
      // content may contain attachments
      Multipart multiPart = (Multipart) messages[i].getContent();
      int numberOfParts = multiPart.getCount();
      for (int partCount = 0; partCount < numberOfParts; partCount++) {
          MimeBodyPart part = (MimeBodyPart)   multiPart.getBodyPart(partCount);
          if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
              // this part is attachment
              String fileName = part.getFileName();
              attachFiles += fileName + ", ";
              part.saveFile("C:/Users/rb842469/Documents/MailAttachments" + File.separator + fileName);

              HttpClient client = new HttpClient();
              PostMethod method = new PostMethod("https://dt-microservice-blobstore.run.aws-usw02-pr.ice.predix.io/uploadMultiBlob");
              method.addParameter("file",fileName);
              method.addParameter("directory","C:/Users/rb842469/Documents/MailAttachments");
              method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
                                 new DefaultHttpMethodRetryHandler(3, false));
              client.getHostConfiguration().setProxy("ipaddress", port);

              int statusCode = client.executeMethod(method);
              byte[] responseBody = method.getResponseBody();
              //Print the response
             System.out.println(new String(responseBody));

          } 
      }
}

嗨,我正在研究 javax.mail 包以访问 webmail 或 Outlook 邮件。

  • 在这里,我可以下载邮件中存在的附件,这些附件是根据搜索条件过滤的(我的搜索条件是将今天的邮件作为接收日期和代码中给出的主题)。

  • 但下载附件后,我尝试使用 HttpClient 和 PostMethod 将文件上传到 blobstore。在我给 PostMethod(url) 的代码中,这个 url 是我从 predix blobstore serviceinstance 获得的微服务 url。

  • 所以在运行代码后我得到

    {"timestamp":1476867898345,"status":500,"error":"Internal Server Error","exception":"org.springframework.web.multipart.MultipartException","message":"当前请求不是多部分请求","路径":"/uploadMultiBlob"}

任何人都可以提出一些建议来解决这个问题吗?

4

1 回答 1

0

我可能开始的一个地方是分离问题。您在此处执行两项操作:1) 下载邮件附件和 2) 上传到 Blob 存储。此外,每个都涉及一个多部分对象,这很容易导致混淆。在测试时单独尝试每个以隔离您的问题。希望这将为您提供一个尝试将文件上传到 blob 存储的简洁示例。

一旦你有了它,你似乎正在尝试进行分段上传,但看起来你没有提供正确的分段参数,因此出现异常。您应该查看文档以查看您是否遗漏了有关如何对服务进行 REST 调用的内容: https ://www.predix.io/docs#ThVWuJTA

例如,您似乎在 POST 调用中发送了文件目录参数,但这些参数并未在文档中作为启动分段上传的参数列出。您可能只想简单地PUT一个对象。我也没有看到我认为有必要的Authorization标头。

希望这有助于您入门。您可能还想查看一些blobstore-samples,然后将其复制以匹配您的电子邮件附件下载用例。

于 2016-10-20T05:34:13.550 回答