objective-c - 从 Cocoa 中的 Apple Mail 获取丢弃的邮件消息

标签 objective-c cocoa drag-and-drop

我用谷歌搜索并阅读了文档。在 SO 上搜索,找到了建议使用 Applescript 的答案,但由于沙箱,我无法使用 Applescript。

我正在开发 Cocoa 应用程序(用 Objective-C 和沙盒编写)。我正在从 Apple Mail 应用程序中实现拖放操作。应用程序应像 Finder 一样接收或复制 eml 邮件消息。

我试着查看 NSPromisedFilesPboardType但几乎不知道我应该如何使用它。我在 - (BOOL)acceptDrop:(id<NSDraggingInfo>)info 中尝试过这样的代码方法:

if ([info.draggingPasteboard.types containsObject:@"MV Super-secret message transfer pasteboard type"]) {
    NSURL *tempFolder = [FM createTempFolderInFolder:AppDataDir()];
    NSArray *filenames = [info namesOfPromisedFilesDroppedAtDestination:tempFolder];
    // tempFolder is filepath of generated temp folder in appdata directory so it is accessible for sandboxed app
    // filenames becomes nil
    return YES;
}

当我尝试遍历粘贴板中的所有类型时,我看到的是:

Dropped types are:
Type: dyn.ah62d4rv4gu8y4zvanr41a3pwfz30n25wqz4ca5pfsr30c35feb4he2pssrxgn6vasbu1g7dfqm10c6xeeb4hw6df (null)
Type: MV Super-secret message transfer pasteboard type (null)
Type: dyn.ah62d4rv4gu8zg7puqz3c465fqr3gn7bakf41k55rqf4g86vasbu1g7dfqm10c6xeeb4hw6df (
        {
        account = Gmail;
        id = 6622;
        mailbox = INBOX;
        subject = "got SUV?";
    }
)
Type: Super-secret Automator pasteboard type (
        {
        account = Gmail;
        id = 6622;
        mailbox = INBOX;
        subject = "got SUV?";
    }
)
Type: dyn.ah62d4rv4gu8yc6durvwwa3xmrvw1gkdusm1044pxqyuha2pxsvw0e55bsmwca7d3sbwu (
    eml
)
Type: Apple files promise pasteboard type (
    eml
)
Type: public.url (null)
Type: CorePasteboardFlavorType 0x75726C20 (null)
Type: dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwu (
    "message:%3C1a392cb9-b78c-402d-8d7f-dbd1d4a9ec42@Neptune.do.losaltos.k12.ca.us%3E",
    ""
)
Type: Apple URL pasteboard type (
    "message:%3C1a392cb9-b78c-402d-8d7f-dbd1d4a9ec42@Neptune.do.losaltos.k12.ca.us%3E",
    ""
)
Type: public.url-name (null)
Type: CorePasteboardFlavorType 0x75726C6E (null)
Type: com.apple.pasteboard.promised-file-content-type com.apple.mail.email
Type: com.apple.pasteboard.promised-file-url (null)
Type: dyn.ah62d4rv4gu8y6y4usm1044pxqzb085xyqz1hk64uqm10c6xenv61a3k (null)
Type: NSPromiseContentsPboardType (null)

谁能帮帮我?

最佳答案

我刚刚经历了这个过程,实际上很容易。

在粘贴板类型中查找“com.apple.pasteboard.promised-file-content-type = com.apple.mail.email”,如果找到,只需使用放置目标 URL 和文件调用 namesOfPromisedFilesDroppedAtDestination(来自 NSDraggingInfo)将在拖动完成时创建。

关于objective-c - 从 Cocoa 中的 Apple Mail 获取丢弃的邮件消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14765063/

相关文章:

ios - didFinishNavigation 没有被调用

ios - AFNetworking在JSON响应键中添加引号

java - 将 ImageView 拖放到容器中进行验证

javascript - 检查拖动的 div 是否位于正确的位置

objective-c - 如何在 NSOutlineView 或 NSTableView 中选择时反转图标

ios - 在 UIView 中绘制触摸点会在边界上产生模糊的绘制效果

objective-c - 基于 NSOutlineView 的 View 中的单元格是否在折叠时被释放?

c# - 如何检测表单何时被拖动?

cocoa - NSURL → NSImage → NSImageView

cocoa - 使用 AES-128 和 key 加密 NSString