简体   繁体   English

AppleScript电子邮件附件在处理程序中不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM