问题描述
限时送ChatGPT账号..我们有一个有效的 AppleScript,它可以创建带有附件的电子邮件,并且在脚本编辑器中运行良好.但是,我们无法让附件在我们的 macOS 应用程序中使用的处理程序中工作.很难找到文档并弄清楚激活和发送命令之间的区别.感谢您提供的任何帮助.
We have a working AppleScript that creates an email with an attachment and it works fine in the Script Editor. However, we cannot get the attachment to work in the handler used in our macOS app. Difficult to find doc and figure out the difference between activate and send commands. Thanks for any help you can provide.
这是 AppleScript
Here is the AppleScript
set recipientAddress to "joe@joe"
set recipientName to "Joe"
set theSubject to "Estimate"
set theContent to "This is your Estimate. Please call with any questions."
set theAttachment to "/Users/iMac/Library/Containers/com.jzmobile.JZMac/Data/Documents/PDF1"
tell application "Mail"
set outgoingMessage to make new outgoing message with properties {subject:theSubject, content:theContent, visible:true}
tell outgoingMessage
make new to recipient with properties {name:recipientName, address:recipientAddress}
tell content of outgoingMessage
make new attachment with properties {file name:theAttachment}
end tell
end tell
activate
end tell
这是处理程序:
var script: NSAppleScript = {
let script = NSAppleScript(source: """
-- This is our handler definition
on sendMyEmail(theSubject, theContent, recipientName, recipientAddress, attachment)
tell application "Mail"
-- Create an email
set outgoingMessage to make new outgoing message ¬
with properties {subject:theSubject, content:theContent, visible:true}
-- Set the recipient
tell outgoingMessage
make new to recipient ¬
with properties {name:recipientName, address:recipientAddress}
tell content of outgoingMessage
make new attachment with properties {file name:attachment}
#activate
end tell
-- Send the message
send
end tell
end tell
#activate
end sendMyEmail
"""
)!
let success = scriptpileAndReturnError(nil)
assert(success)
return script
}()
@objc func runScript() {
let parameters = NSAppleEventDescriptor.list()
parameters.insert(NSAppleEventDescriptor(string: subject), at: 0)
parameters.insert(NSAppleEventDescriptor(string: "Some content of the email"), at: 0)
parameters.insert(NSAppleEventDescriptor(string: "John Smith"), at: 0)
parameters.insert(NSAppleEventDescriptor(string: "john@email"), at: 0)
parameters.insert(NSAppleEventDescriptor(string: attachmentFileURL), at: 0)
let event = NSAppleEventDescriptor(
eventClass: AEEventClass(kASAppleScriptSuite),
eventID: AEEventID(kASSubroutineEvent),
targetDescriptor: nil,
returnID: AEReturnID(kAutoGenerateReturnID),
transactionID: AETransactionID(kAnyTransactionID)
)
// this line sets the name of the target handler
event.setDescriptor(NSAppleEventDescriptor(string: "sendMyEmail"), forKeyword: AEKeyword(keyASSubroutineName))
// this line adds the parameter list we constructed above
event.setDescriptor(parameters, forKeyword: AEKeyword(keyDirectObject))
var error: NSDictionary? = nil
_ = self.script.executeAppleEvent(event, error: &error) as NSAppleEventDescriptor?
print ("runScript",self.script)
}
推荐答案
传递路径字符串不起作用;沙箱会阻止它.您必须传递一个文件对象(别名/POSIX 文件).
Passing a path string will not work; the sandbox will block it. You must pass a file object (alias/POSIX file).
沙盒还会限制您自己的应用访问任意文件系统位置的能力.
The sandbox will also restrict your own app’s ability to access arbitrary file system locations.
这篇关于AppleScript 电子邮件附件在处理程序中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
更多推荐
[db:关键词]
发布评论