我们有一个工作的AppleScript,它创建一个带有附件的电子邮件,并且它在脚本编辑器中工作得很好。但是,我们无法让附件在我们的macOS应用程序中使用的处理程序中工作。很难找到doc,也很难弄清楚activate和send命令的区别。感谢您能提供的任何帮助。
这是AppleScript
set recipientAddress to "joe@joe.com"
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 = script.compileAndReturnError(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.com"), 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)
}发布于 2019-09-04 14:42:00
传递路径字符串将不起作用;沙箱将阻止它。必须传递文件对象(别名/POSIX文件)。
沙箱还将限制您自己的应用程序访问任意文件系统位置的能力。
https://stackoverflow.com/questions/57777548
复制相似问题