简体   繁体   English

为什么这个简单的applescript在ML mail.app中不再起作用(通常)

[英]Why doesn't this simple applescript work any more in ML mail.app (as a rule)

It works only when you right click on the mail message and choose "run rules", but not on incoming messages (without interaction). 它仅在您右键单击邮件并选择“运行规则”时有效,而对传入消息无效(无交互)。

The first dialog is shown both when incoming or running manually, but the second dialog (with the id) is only shown when running manually. 无论是传入还是手动运行,都会显示第一个对话框,但是只有手动运行时,才会显示第二个对话框(带有id)。 Nothing is shown in console.log console.log中未显示任何内容

Any ideas? 有任何想法吗?

using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule
        tell application "Mail"
            repeat with theMessage in theMessages
                display dialog "inside"

                set theId to id of theMessage

                display dialog "the id is " & theId

            end repeat
        end tell
    end perform mail action with messages
end using terms from

update: i added a try catch block around 更新:我在周围添加了一个try catch块

set theId to id of theMessage

and this is the error I get: 这是我得到的错误:

Can't get class mssg 1 of class mbxp "Incoming POP messages" of class mact "Telenet". Invalid index. -1719

Any idea what this means? 知道这意味着什么吗? I don't get the error when applying rules manually. 手动应用规则时,我没有收到错误消息。

Update 2: OK i found out that incoming messages don't have an ID yet. 更新2:好的,我发现传入的消息还没有ID。 That's a problem since I want to save the email to disk: 这是一个问题,因为我想将电子邮件保存到磁盘:

set theEmail to (do shell script "mdfind -onlyin ~/Library/Mail \"kMDItemFSName = '" & theId & ".emlx'\"")
set archiveName to theId & "-" & (extract address from theMessage's sender) & ".emlx"
set saveLocation to "Users:wesley:Documents:Incoming:"

do shell script "cp '" & theEmail & "' '" & POSIX path of saveLocation & "';"

Is there any way around this? 有没有办法解决?

As promised in my comment , here's an AppleScript that logs Mail messages' subject , id , and message id to ~/Desktop/log.txt. 我的评论中所承诺的,这是一个AppleScript,可将邮件消息的subjectidmessage id到〜/ Desktop / log.txt中。

using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule
        try
            repeat with theMessage in theMessages
                LogText("subject:    " & (theMessage's subject as string))
                LogText("id:         " & (theMessage's id as string))
                LogText("message id: " & (theMessage's message id as string))
                LogText("")
            end repeat
        on error errorText number errorNumber
            tell application "Mail" to display alert ("Error: " & errorNumber) message errorText
            return
        end try
    end perform mail action with messages
end using terms from


on LogText(theText)
    tell application "Finder"
        set logPath to (path to the desktop as text) & "log.txt"
        try
            set writeText to open for access file logPath with write permission
            set currentDateAsString to do shell script "date +\"%Y-%m-%d %T\""
            write (currentDateAsString & "    " & (theText as text) & return) to writeText starting at ((get eof writeText) + 1)
            close access writeText
        on error errorText number errorNumber
            close access writeText
            error errorText number errorNumber
        end try
    end tell
end LogText

I'm also running OS X 10.8.2 and Mail 6.2. 我也在运行OS X 10.8.2和Mail 6.2。 As I said, I'm surprised to say this, but triggering the above AppleScript via mail rule works just as well for incoming messages as it does when selecting the menu "Apply Rules". 就像我说的那样,我很惊讶,但是通过邮件规则触发上面的AppleScript与选择菜单“应用规则”时的传入消息一样有效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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