Почему этот простой яблочный скрипт больше не работает в ML mail.app (как правило)

Это работает только тогда, когда вы щелкаете правой кнопкой мыши по почтовому сообщению и выбираете «выполнить правила», но не для входящих сообщений (без взаимодействия).

Первый диалог отображается как при входе, так и при запуске вручную, а второй диалог (с идентификатором) отображается только при запуске вручную. В console.log ничего не отображается

Любые идеи?

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

обновление: я добавил блок try catch вокруг

set theId to id of theMessage

и это ошибка, которую я получаю:

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

Есть идеи, что это значит? Я не получаю ошибку при применении правил вручную.

Обновление 2: хорошо, я обнаружил, что у входящих сообщений еще нет идентификатора. Это проблема, так как я хочу сохранить письмо на диск:

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 & "';"

Есть ли способ обойти это?


person Community    schedule 26.01.2013    source источник
comment
Какую версию OS X и Mail вы используете?   -  person John Sauer    schedule 26.01.2013
comment
@JohnSauer 10.8.2 и почта 6.2 (1449) Спасибо   -  person    schedule 26.01.2013
comment
У меня есть несколько сценариев Apple Mail Rule двухлетней давности, в которых я отметил, что входящие сообщения еще не имеют идентификатора. Когда я увидел ваш вопрос сегодня, я погуглил соответствующую документацию или опыт других пользователей, но ничего не нашел. Итак, сегодня я провел некоторое тестирование, но обнаружил, что могу получать ids и message ids для входящих сообщений. Странно... Вас интересует мой AppleScript, способный получать ids и message ids?   -  person John Sauer    schedule 26.01.2013
comment
@John Sauer - да, я бы хотел это увидеть! Я нашел эту ветку с подробным описанием похожей (или такой же) ошибки, в которой говорится, что причиной является 10,8 ML - discussions.apple.com/thread/4186119?start=15&tstart=0, но я не нахожу решение удовлетворительным. Возможно, вместо этого я настрою cron, который будет искать базу данных SQLite каждые 10 минут? Я хотел бы сначала посмотреть, что у вас есть. Ты на горном льве?   -  person    schedule 26.01.2013
comment
И еще один пост: bee -software.net/блог/   -  person    schedule 26.01.2013


Ответы (1)


Как и было обещано в мой комментарий, вот AppleScript, который записывает сообщения Mail subject, id и message 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

Я также использую OS X 10.8.2 и Mail 6.2. Как я уже сказал, я удивлен, но запуск вышеупомянутого AppleScript через почтовое правило работает так же хорошо для входящих сообщений, как и при выборе меню «Применить правила».

person John Sauer    schedule 26.01.2013
comment
спасибо за это, к сожалению, это не работает. Ошибка, которую я получаю: не может получить класс mssg 1 класса mbxp Входящие сообщения POP класса Mact Telenet. Неверный индекс. У вас POP или imap? Кажется, я где-то читал, что это связано только с POP. У меня нет почтового ящика с именем Входящие сообщения POP, так что это что-то внутреннее. - person ; 27.01.2013
comment
Да, почтовая учетная запись, с которой я тестировал, — это IMAP. Я бы не ожидал, что это будет иметь значение, но ваш опыт показывает, что это так. Извини! - person John Sauer; 27.01.2013
comment
Спасибо за вашу помощь. Сейчас я использую обходной путь: сначала перемещаю сообщения в специальный почтовый ящик, а затем обрабатываю все сообщения в этом почтовом ящике, а не только новые. Таким образом, сообщение всегда имеет идентификатор. После обработки я перемещаю его обратно в папку «Входящие», чтобы специальный почтовый ящик всегда был пуст. - person ; 27.01.2013