代码之家  ›  专栏  ›  技术社区  ›  Persimmonium

如何检测IMAPMessage不是电子邮件而是任务或日历项

  •  1
  • Persimmonium  · 技术社区  · 14 年前

    我通过IMAP使用javamail访问Lotus和Groupwise,递归地访问所有文件夹并处理找到的电子邮件。但是在像Tasklist和Calendar这样的文件夹中(它们来自Groupwise,但我记得Lotus也有类似的东西),我把这些项目作为IMAPMessage的实例放在那里,所以它们就像邮件一样被处理。

    我知道这些项目通过IMAP协议暴露为邮件(无论是设计还是错误),但我只想处理正确的邮件。有办法吗?到目前为止,我已经驳斥了以下做法:

    • 按名称忽略文件夹(如日历和任务列表):并不完全正确,因为用户可以在这些文件夹中移动邮件。

    我正在寻找的是一些IMAP api调用我错过了迄今为止或在这些行的东西。。。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Lukas Pokorny    14 年前

    我不熟悉javamail,但我熟悉IMAP协议( RFC 3501 )我会尝试以下方法:


    IMAP命令示例:

    TAG0001 FETCH 1 BODY.PEEK[HEADER.FIELDS (CONTENT-TYPE)]
    

    IMAP服务器响应示例:

    * 1 FETCH (BODY[HEADER.FIELDS (CONTENT-TYPE)] {69}...data..})
    TAG0001 OK Success
    

    “…data…”的内容是内容类型标头:

    Content-Type: text/calendar;
     name="meeting.ics";
     method=REQUEST
    

    • 如果由于该项是multipart/something之类的常见类型,因此无法确定该项是否为消息内容类型标头中的日历项,请使用FETCH命令检索消息结构,并在MIME树中搜索具有适当内容类型的任何日历项。

    IMAP命令示例:

    TAG0002 FETCH 2 (BODY)
    

    * 1 FETCH (
      BODY
      (
        (
          ("text" "plain" ("charset" "iso-8859-2") NIL NIL "quoted-printable" 194 1)
          ("text" "html" ("charset" "iso-8859-2") NIL NIL "quoted-printable" 1173 1)
          ("text" "calendar"
            ("name" "meeting.ics" "charset" "windows-1252" "method" "REQUEST") NIL NIL "8bit" 1531 1)
            "alternative"
          )
          "mixed"
        )
      )
    TAG0002 OK FETCH completed.
    

    (添加大量空白以提高可读性)


    签出部分 6.4.5 7.4.2 有关FETCH命令及其响应格式的详细信息,请参阅RFC3501的。不幸的是,我不知道如何使用javamail实现这一点。