【问题标题】:How to get dropped Mail message data in a Cocoa application?如何在 Cocoa 应用程序中获取丢弃的邮件消息数据?
【发布时间】:2011-05-06 04:25:42
【问题描述】:

我正在开发一个 Cocoa 应用程序,我希望允许将邮件消息丢弃到该应用程序中。

如果我在 Info.plist 文档类型中包含 public.plain-text,我可以在 Dock 中的图标上放置一条邮件消息,并从 application:openFiles: 委托方法中获取这样的文件路径:

"/Users/smokris/Library/Caches/TemporaryItems/Re_ multiplexer question 3.eml"

...我可以从这个文件中读取原始消息数据。到目前为止一切顺利。

但是,我还希望用户能够在应用程序窗口中放置邮件消息。所以我这样做:

[window registerForDraggedTypes:[NSArray arrayWithObjects:(NSString *)kPasteboardTypeFileURLPromise,nil]];

...在performDragOperation: 中,我从粘贴板中得到一个这样的 URL:

message:%3CAANLkTikeTeWYU39JpTovxF2PC0Mm=xkrU7fHNh6gGh6V@mail.gmail.com%3E

如果我尝试在此 URL 上执行 NSURLRequest,它会给我错误“不支持的 URL”。

如何从这个message: URL 获取原始消息数据?

【问题讨论】:

    标签: cocoa macos drag-and-drop nsurl apple-mail


    【解决方案1】:

    我使用 Apple 的 PasteboardPeeper 示例代码(来自http://developer.apple.com/library/mac/#samplecode/PasteboardPeeker/Introduction/Intro.html)进行了尝试,将一条消息拖到主目录中确实表明消息的​​路径可用:

    PasteboardRef: 1395632  ItemCount: 1
       Index: 1  item ID: 789514
          "dyn.ah62d4rv4gu8y4zvanr41xxxxx30n25wqz4ca5pfsr30c35feb4he2pssrxgn6vasbu1g7dfqm1"
          "MV Super-secret message transfer pasteboard type"
          '' ______ 82  /Users/guest/Library/Mail/IMAP-me@gmail.com@imap.gmail.com/INBOX.imapmb
    
          "dyn.ah62d4rv4gu8zg7puqz3c465fqr3gn7bakf41k55rqf4g86vasbu1g7dfqm10c6xeeb4hw6df"
          "Super-secret Automator pasteboard type"
          '' ______ 454  <?xml version= 1.0  encoding= UTF-8 ?> < DOCTYPE plist PUBLIC  -//Apple//DTD PLI
    
          "dyn.ah62d4rv4gu8yc6durvwwa3xmrvw1gkdusm1044pxqyuha2pxsvw0e55bsmwca7d3sbwu"
          "Apple files promise pasteboard type"
          '' ______ 212  <?xml version= 1.0  encoding= UTF-8 ?> < DOCTYPE plist PUBLIC  -//Apple//DTD PLI
    
          "public.url"
          ""
          'url ' ______ 74  message: 3C6EEF5CFD6A04D6395BC617836C91FC3A050542759970026E@cornell.edu 3E
    
          "public.url-name"
          ""
          'urln' ______ 56  A friend thought you would be interested in this station
    
          "com.apple.pasteboard.promised-file-content-type"
          ""
          '' ______ 23  dyn.ah6xxxqmxhk2x43prru
    
          "com.apple.pasteboard.promised-file-url"
          ""
          '' ______ 0  
    
          "dyn.ah62d4rv4gu8y6y4usm10xxxxqzb085xyqz1hk64uqm10c6xenv61a3k"
          "NSPromiseContentsPboardType"
          '' ______ 0  
    
          "dyn.ah62d4rv4gk81a4dgsq"
          ""
          'phfs' PT____ 14  ????????  Pssf
    

    我不知道“MV 超密消息传输粘贴板类型”是什么,但您可能不想依赖它作为键名;相反,也许您可​​以遍历所有键,看看它们中的任何一个看起来是否像文件路径。

    附:这可能也很有趣:http://www.wuffwuffware.com/developer.html

    【讨论】:

    • 谢谢。我确实浏览了所有[pboard types] 以列出它们的内容,但除了message: url、包含邮件的邮箱的文件路径(但没有链接到邮件本身)以及邮件的主题行。
    • 哦,wuffwuffware 示例使用 AppleScript 来获取消息正文。不理想(AppleScript 既慢又麻烦),但总比没有好。再次感谢。
    • 这个运气好吗?我正在尝试做同样的事情,虽然我可以在放置在 Dock 上时获得指向 .eml 文件的链接,但我似乎无法通过拖放在 NSTextView 上获得它
    猜你喜欢
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多