[英]AppleScript Email Attachment not working in handler
We have a working AppleScript that creates an email with an attachment and it works fine in the Script Editor. 我们有一个工作正常的AppleScript,可以创建带有附件的电子邮件,并且可以在“脚本编辑器”中正常工作。 However, we cannot get the attachment to work in the handler used in our macOS app. 但是,我们无法使附件在macOS应用程序中使用的处理程序中工作。 Difficult to find doc and figure out the difference between activate and send commands. 很难找到文档并弄清楚激活和发送命令之间的区别。 Thanks for any help you can provide. 感谢您的任何帮助,您可以提供。
Here is the AppleScript 这是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
Here is the Handler: 这是处理程序:
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)
}
Passing a path string will not work; 传递路径字符串将不起作用; the sandbox will block it. 沙箱将阻止它。 You must pass a file object (alias/POSIX file). 您必须传递文件对象(别名/ POSIX文件)。
The sandbox will also restrict your own app's ability to access arbitrary file system locations. 沙箱还将限制您自己的应用程序访问任意文件系统位置的能力。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.