Path Applescript不在山狮工作的路径

Path Applescript不在山狮工作的路径,path,applescript,osx-mountain-lion,Path,Applescript,Osx Mountain Lion,这个脚本已经在10.7及更高版本上运行,但在10.8中,它似乎已经崩溃了。该行: set theFilePath to ((path to application support from user domain) as rich text) & "AppFolderName:" & UniqueName as string set theFileReference to open for access theFilePath with write permission 在以前

这个脚本已经在10.7及更高版本上运行,但在10.8中,它似乎已经崩溃了。该行:

set theFilePath to ((path to application support from user domain) as rich text) & "AppFolderName:" & UniqueName as string
set theFileReference to open for access theFilePath with write permission
在以前的版本中运行良好,但苹果显然在阻止它在山狮上正常运行。在Mountain Lion中有没有其他方法可以通过Apple脚本访问该文件夹

编辑:我已包含脚本的全部代码,该代码将在邮件规则中将整个邮件导出到我的程序可以导入的文本文件中。文本文件被发送到~/Library/Application Support/MyProgram/MailImport/

确保目录已经存在于你的机器上,就像在我的机器上一样,并且苹果脚本不会对它进行任何检查

应用程序支持路径
在代码中时,此脚本不工作,但将其更改为
桌面路径
工作正常,这意味着写入应用程序支持文件夹时出现问题,但代码可以工作

要进行测试,您可以在Mail中创建新规则,并让每封邮件都运行脚本。您必须将脚本放在~/Library/Application Scripts/com.apple.mail中/

然后,它将作为选项显示在规则窗口中。您可以在消息上单击鼠标右键,然后选择“应用规则”在单个消息上测试脚本

using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule
        tell application "Mail"
            repeat with eachMessage in theMessages
                set sub to subject of eachMessage
                set mid to message id of eachMessage
                set sen to sender of eachMessage
                set recp to ""
                repeat with thisRecpt in recipients of eachMessage
                    set recp to recp & address of thisRecpt & ","
                end repeat
                set {year:y, month:m, day:d, hours:hh, minutes:mm} to (date sent of eachMessage)
                set dat to (y * 10000 + m * 100 + d) as string
                set tim to (hh * 100 + mm) as string
                set con to content of eachMessage

                set TotalString to "<!STDMessageSubject>" & sub & "<!STDMessageSubject>" & "<!STDMessageID>" & mid & "<!STDMessageID>" & "<!STDMessageSender>" & sen & "<!STDMessageSender>" & "<!STDMessageRecipient>" & recp & "<!STDMessageRecipient>" & "<!STDMessageDate>" & dat & "<!STDMessageDate>" & "<!STDMessageTime>" & tim & "<!STDMessageTime>" & "<!STDMessageContent>" & con & "<!STDMessageContent>"

                set UniqueName to do shell script "uuidgen"

                set theFilePath to ((path to application support from user domain) as rich text) & "MyApplication:MailImport:" & UniqueName as string
                set theFileReference to open for access theFilePath with write permission


                write TotalString to theFileReference
                close access theFileReference
            end repeat
        end tell
    end perform mail action with messages
end using terms from
使用应用程序“邮件”中的术语
在上,使用消息执行邮件操作规则的消息
告诉应用程序“邮件”
对消息中的每条消息重复
将sub设置为每条消息的主题
将mid设置为每条消息的消息id
将sen设置为每条消息的发送者
将recp设置为“”
在每个邮件的收件人中重复此记录
将recp设置为recp&此RECPT的地址&“
结束重复
将{year:y,month:m,day:d,hours:hh,minutes:mm}设置为(每条消息的发送日期)
将dat设置为(y*10000+m*100+d)作为字符串
将tim设置为(hh*100+mm)作为字符串
将con设置为每条消息的内容
将TotalString设置为“&sub&&&”&mid&&&sen&&recp&&dat&&tim&&con&”
将UniqueName设置为执行shell脚本“uuidgen”
将文件路径设置为((用户域中应用程序支持的路径)作为富文本)和“MyApplication:MailImport:”&UniqueName作为字符串
将文件引用设置为打开以访问具有写权限的文件路径
将TotalString写入文件引用
关闭对文件引用的访问
结束重复
结束语
结束对邮件执行邮件操作
结束使用来自的术语

在applescript中没有“富文本”这样的东西。它只能作为“文本”。此外,文件路径是一个字符串,因此在下一行中,您需要像这样引用它。。。打开文件路径以访问文件。注意“文件”这个词。您需要该单词将字符串转换为文件引用,这正是该命令所需的

编辑:现在我看到了您的全部代码,我会这样写。您的问题仍然可能是沙箱问题,但至少应该消除脚本中可能的编码错误的任何来源。这将为您提供获得成功脚本的最佳机会。如果它仍然不起作用,那么它可能是一个沙箱问题

我看到的基本编码问题是,您告诉Mail执行所有命令。Mail不知道诸如“应用程序支持路径”、“执行shell脚本”之类的命令,也不知道如何写入文件。它们是applescript命令,所以您不应该让Mail执行它们。它们不在Mail的applescript字典中,因此当Mail尝试执行它们时,它们可能会感到困惑。正如你所提到的,这当然是“文本”不断变为“富文本”的原因

试试看。如果您仍然存在问题,那么至少您知道您已经尽了最大努力消除代码中的错误源

using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule
        tell application "Mail"
            repeat with eachMessage in theMessages
                set sub to subject of eachMessage
                set mid to message id of eachMessage
                set sen to sender of eachMessage
                set recp to ""
                repeat with thisRecpt in recipients of eachMessage
                    set recp to recp & address of thisRecpt & ","
                end repeat
                set {year:y, month:m, day:d, hours:hh, minutes:mm} to (date sent of eachMessage)
                set dat to (y * 10000 + m * 100 + d) as string
                set tim to (hh * 100 + mm) as string
                set con to content of eachMessage

                set TotalString to "<!STDMessageSubject>" & sub & "<!STDMessageSubject>" & "<!STDMessageID>" & mid & "<!STDMessageID>" & "<!STDMessageSender>" & sen & "<!STDMessageSender>" & "<!STDMessageRecipient>" & recp & "<!STDMessageRecipient>" & "<!STDMessageDate>" & dat & "<!STDMessageDate>" & "<!STDMessageTime>" & tim & "<!STDMessageTime>" & "<!STDMessageContent>" & con & "<!STDMessageContent>"
                my writeToFile(TotalString)
            end repeat
        end tell
    end perform mail action with messages
end using terms from

on writeToFile(TotalString)
    set UniqueName to do shell script "uuidgen"
    set theFilePath to ((path to application support from user domain) as text) & "MyApplication:MailImport:" & UniqueName
    set theFileReference to open for access file theFilePath with write permission
    write TotalString to theFileReference
    close access theFileReference
end writeToFile

EDIT3:如果edit2不起作用,请查看。似乎其他人在将邮件写入特定位置时遇到了问题,并通过向邮件添加一个密钥以授予其权限来解决问题

所以这是一个沙箱问题。10.8版本中的Apple Mail通常使用沙盒应用程序支持文件夹位置,而不管您如何努力获取
~/Library/Application Support/
,因此从10.8版本的Mail中的AppleScript

path to application support from user domain
返回路径

~/Library/Containers/com.apple.mail/Data/Library/Application Support/

从那里可以创建和访问
MyApplication:MailImport:
文件夹。由于我们尝试读取输出的实际程序没有沙盒,我们现在可以从该位置读取和访问数据,因为它似乎工作正常。

这很可能与权利/沙盒乐趣有关,但希望有办法实现与以前系统相同的功能。在脚本编辑器中保存时,它会自动将用户域的
应用程序支持路径替换为text
,并将用户域的
应用程序支持路径规则类型rich text
替换为另一个注释,将
路径从原始代码更改为应用程序支持
路径到桌面
,会导致脚本执行正常,因此它必须是权限问题,而不是语法问题。第三条注释:我已经包含了整个脚本。当简单地将“应用程序支持路径”替换为“桌面路径”时,此脚本可以正确编译和运行。我理解您的3条评论。我在回答中添加了“编辑”部分。试试看。谢谢你的跟进。代码的工作原理与以前一样,只在写入桌面时正常工作,而在写入应用程序支持时不正常工作。这似乎与沙箱有直接关系。有没有办法去
~/Library/Containers/com.apple.mail/Data/Library/Application Support/