首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AppleScript电子邮件附件在处理程序中不起作用

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

Stack Overflow用户
提问于 2019-09-04 03:14:54
回答 1查看 116关注 0票数 2

我们有一个工作的AppleScript,它创建一个带有附件的电子邮件,并且它在脚本编辑器中工作得很好。但是,我们无法让附件在我们的macOS应用程序中使用的处理程序中工作。很难找到doc,也很难弄清楚activate和send命令的区别。感谢您能提供的任何帮助。

这是AppleScript

代码语言:javascript
复制
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

下面是处理程序:

代码语言:javascript
复制
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)

}
EN

回答 1

Stack Overflow用户

发布于 2019-09-04 14:42:00

传递路径字符串将不起作用;沙箱将阻止它。必须传递文件对象(别名/POSIX文件)。

沙箱还将限制您自己的应用程序访问任意文件系统位置的能力。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57777548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档