通过ScriptingBridge从Mail.app保存附件(目标C)

时间:2012-07-13 19:02:54

标签: objective-c scripting-bridge

我正在尝试通过scriptingbridge从Mail.app检索附件。我正在使用以下代码来访问我的收件箱邮件。

MailApplication *mailApp = [SBApplication applicationWithBundleIdentifier:@"com.apple.mail"];
MailMailbox *inbox = [mailApp inbox];
SBElementArray *messages = [inbox messages];

通过迭代SBElementArray,我可以访问单个MailMessage对象。

每个MailMessage对象都有一个getter,可以检索另一个SBElementArray,这次填充MailMailAttachment个对象。

它正常工作,因为如果我放了一个NSLog(@"count:%lu",mailitem.attachments.count);,它会打印正确数量的附件。文件名和大小也正确打印。

但是当我遍历附件数组并保存它时,没有任何反应。

NSURL *url = [[NSURL new] initFileURLWithPath:@"/Users/usr/Documents/tmp/"];
NSLog(@"count:%lu",mailitem.attachments.count);
for (MailMailAttachment *attachment in mailitem.attachments) {
   NSLog(@"name:%@",attachment.name);
   NSLog(@"size:%ld",attachment.fileSize);
   [attachment saveIn:url as:MailSaveableFileFormatNativeFormat];
}

我没有找到任何关于此方法的文档。从头文件中,它说:

- (void) saveIn:(NSURL *)in_ as:(MailSaveableFileFormat)as;  // Save a document.

我假设NSURL是我想要存储文件的地方,但我不知道MailSaveableFileFormat。我正在传递MailSaveableFileFormatNativeFormat,我在头文件中找到了,但正如我所说,没有任何反应。甚至不是简单的错误消息。

我还尝试使用目录和完整的文件路径(路径+文件名)初始化NSURL。结果相同。

有没有人有例子?我该如何保存?

TIA,

鲍勃

2 个答案:

答案 0 :(得分:1)

我设法解决了这个问题。我正在初始化NSURL错误......有效的代码是:

for (MailMailAttachment *attachment in mailitem.attachments) {
   NSString *filePath = [NSString stringWithFormat:@"%@%@",@"/Users/usr/Documents/tmp/",attachment.name];
   NSURL *fileUrl = [NSURL fileURLWithPath:filePath];
   [attachment saveIn:fileUrl as:MailSaveableFileFormatNativeFormat];
}

答案 1 :(得分:0)

在我的旧系统上,我使用文件路径,并且像[attachment saveIn:file_Path as:nil];

那样使用nil

在我的“Mail.h”中:saveIn:(NSString *)in_ as:(NSString *)as;

我知道它在Lion NSURL 而非 NSString 上已更改,但在AppleScript脚本中没有更改,您必须指定文件路径而不会遇到任何其他参数 - > save thisAttachment in filePath -- Applescript

所以我认为完整的文件路径+ as:nil 应该有效。