为什么此 AppleScript 会出现“AppleEvent 处理程序失败"?Mac OS X 10.5 Leopard 上的错误? [英] Why does this AppleScript get an "AppleEvent handler failed" error on Mac OS X 10.5 Leopard?

查看:69
本文介绍了为什么此 AppleScript 会出现“AppleEvent 处理程序失败"?Mac OS X 10.5 Leopard 上的错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,我知道 Leopard 在这一点上是老生常谈,但它是我希望能够用这个脚本支持的最低限度,所以请耐心等待(在 Mac OS X 10.4 下甚至不可能Tiger 由于 错误 w/Mail redirect/forward/reply 我很久以前发现的错误).

First, I know, Leopard is the old-fogey at this point, but it's the minimum I'd like to be able to support with this script, so please bear with me (it's not even possible under Mac OS X 10.4 Tiger due to a bug w/Mail redirect/forward/reply bug I had uncovered long ago).

我一直在重新构建一个 AppleScript 以与 Topic Desk 的 spamtrainer,因此它会检查垃圾文件夹中的一系列邮件,并尝试将它们重定向到指定的邮箱.这是我到目前为止的内容(请注意,目前实际发送已被注释掉,稍后会详细介绍):

I've been revisiting building an AppleScript to work in conjunction with Topic Desk's spamtrainer, so it goes through a selection of messages in the Junk folder and attempts to redirect them to a specified mailbox. Here's what I have so far (note that the actual sending is commented out at the moment, more on that later):

(* Train Spam - Redirect (not forward) email from the Junk folder (which hasn't already been redirected or
 *             determined by the mail server to be spam) to an appropriate spam mailbox on the mail server.
 *             Developed to be used in conjunction w/spamtrainer on a Mac OS X Server mail server.
 * 
 * v0.1   2011-07-27 - Morgan Aldridge
 *                     Initial version.
 *)

using terms from application "Mail"
    on perform mail action with messages selectedMsgs in mailboxes selectedMailboxes
        tell application "Mail"
            -- configuration variables
            set junkPrefix to "***JUNK MAIL***"
            set junkRecipient to "junkmail@domain.tld"

            -- ensure that we're in the Junk mailbox
            -- (it'd be disasterous to accidentally redirect mail for training from another mailbox)
            if (count of selectedMailboxes) is 1 and (first item of selectedMailboxes) is junk mailbox then
                set selCount to (count of selectedMsgs)
                set redirectedCount to 0
                repeat with counter from 1 to selCount
                    set msg to item counter of selectedMsgs
                    -- if the subject doesn't start with junkPrefix and the message hasn't already been redirected, then redirect it
                    -- (otherwise, if it starts with junkPrefix, it means it was already detected as junk by the mail server)
                    -- (and, obviously, if it was already redirected, that was probably for the sake of junk training as well)
                    if subject of msg does not start with junkPrefix and not was redirected of msg then
                        set newRedirectMsg to redirect msg with opening window
                        tell newRedirectMsg
                            -- set the to recipient to that of the specified spam mailbox on the mail server
                        make new recipient at beginning of to recipients with properties {address:junkRecipient}
                            -- remove any bcc or cc recipient (we don't want to be spamming anyone else in the process)
                            delete bcc recipients
                            delete cc recipients
                        end tell
                        -- actually send the message
                        -- send newRedirectMsg
                    else
                        display dialog "Oops, the message was already flagged as junk by the mail server or you've already redirected it!"
                    end if
                end repeat
            else
                display dialog "Oops, you're not in your Junk mailbox!"
            end if
        end tell
    end perform mail action with messages
end using terms from
-- this is required when _not_ running from the Script menu (e.g. Script Editor, FastScripts, etc.)
using terms from application "Mail"
    on run
        tell application "Mail" to set sel to selection
        tell application "Mail" to set selBox to selected mailboxes of message viewer 1
        tell me to perform mail action with messages (sel) in mailboxes (selBox)
    end run
end using terms from

当从 Script Editor.app 运行它时(所以它通过 on runtell me to)和少量在邮件中选择垃圾邮件(这是在 Mac OS X 10.5.8 Leopard 下),它似乎适用于第一封邮件(打开一个新的重定向邮件,w/to 收件人设置,并清空 CC/BCC 字段),以及其他重定向的消息窗口打开,但它们的收件人/抄送/密件抄送字段未更新,并且 Script Editor.app 弹出带有邮件出错:AppleEvent 处理程序失败"错误的对话框.事件日志的内容如下:

When running it from Script Editor.app (so it goes through the on run and tell me to) and a small number of Junk messages select in Mail (this is under Mac OS X 10.5.8 Leopard), it seems to work for the first message (opening a new redirected message, w/to recipient set, and CC/BCC fields emptied), and the other redirected message windows open, but their To/CC/BCC fields are not updated and Script Editor.app pops up the dialog with the "Mail got an error: AppleEvent handler failed" error. The contents of the Event Log are as follows:

tell application "Mail"
    get selection
        {message id 464214 of mailbox "Junk", message id 464213 of mailbox "Junk", message id 464211 of mailbox "Junk"}
    get selected mailboxes of message viewer 1
        {junk mailbox}
    get junk mailbox
        junk mailbox
    get subject of message id 464214 of mailbox "Junk"
        ": Your Invitation Into a Global Directory"
    get was redirected of message id 464214 of mailbox "Junk"
        false
    redirect message id 464214 of mailbox "Junk" with opening window
        outgoing message id 400031520
    make new recipient at beginning of every to recipient of outgoing message id 400031520 with properties {address:"junkmail@domain.tld"}
        to recipient 1 of outgoing message id 400031520
    delete every bcc recipient of outgoing message id 400031520
    delete every cc recipient of outgoing message id 400031520
    get subject of message id 464213 of mailbox "Junk"
        "Nominate Your Favorite Products for the Community Choice Awards"
    get was redirected of message id 464213 of mailbox "Junk"
        false
    redirect message id 464213 of mailbox "Junk" with opening window
        outgoing message id 378471104
    make new recipient at beginning of every to recipient of outgoing message id 378471104 with properties {address:"junkmail@domain.tld"}
        "Mail got an error: AppleEvent handler failed."

所以,很明显,失败似乎是在除了第一条消息之外的所有内容中都设置了 to receivers.不重新启动 Mail 的后续脚本运行也会导致第一条消息失败.

So, clearly it seems like the failure is with setting the to recipients in all but the first message. Subsequent runs of the script without relaunching Mail result in failures on the first message as well.

这个问题最奇怪的部分是,在运行脚本后退出邮件时, 条重定向消息(即使是成功的消息)都有一个隐藏的空白窗口弹出询问您是否要保存更改.这听起来非常类似于这个主题,但我不确定是什么原因造成的.

The oddest part of this issue is that, when quitting mail after running the script, there's a hidden, blank window for each of the redirected messages (even the one that was successful) that pops up asking if you want to save changes or not. This sounds very similar to something noted in this thread, but I'm not sure what causes it.

那么,是什么导致了这个错误和失败?我该如何解决?而且,额外的功劳,为什么会创建隐藏的空白消息,我该如何防止这种情况发生?

So, what's causing this error and failure? How can I resolve it? And, for extra credit, why are the hidden, blank messages created and how can I prevent that from occurring?

推荐答案

我觉得你的脚本很好.

如果我是你,我会尝试在同一台计算机上的另一个 OS X 帐户中运行脚本,修复权限,查看你的日志(你已经这样做了,但它仍然是一个好主意),运行所有相关的软件更新,临时移动你的 ~/Library/Mail 文件夹以消除它作为一个因素,等等.告诉我会发生什么,特别是如果它再次工作:)

If I were you, I would try running the script in another OS X account on the same computer, repair permissions, look at your logs (you've already done that, but it's still a good idea), run all relevant software updates, temporarily move your ~/Library/Mail folder to eliminate it as a factor, etc. Tell me what happens, especially if it works again :)

这篇关于为什么此 AppleScript 会出现“AppleEvent 处理程序失败"?Mac OS X 10.5 Leopard 上的错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆