Правила Mail.app отправляют неправильные сообщения в AppleScript

У меня есть следующий AppleScript, вызванный правилом Mail.app:

using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule
        repeat with msg in theMessages
            set theText to subject of msg & return & content of msg & date sent of msg
            display dialog (theText)
        end repeat
    end perform mail action with messages
end using terms from

Если я выбираю сообщение, щелкаю правой кнопкой мыши и выбираю «Применить правила», оно работает правильно. Однако, если скрипт запускается входящим сообщением, кажется, что в Messages есть случайное сообщение.

Вот правило: введите здесь описание изображения

Как получить правильное сообщение?

Я использую High Sierra с Mail 11.2.


person ghenne    schedule 17.01.2018    source источник
comment
случайное сообщение одинаково каждый раз, когда происходит триггер?   -  person A STEFANI    schedule 24.01.2018


Ответы (2)


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


Не могли бы вы запустить Mail, затем отсортировать электронную почту по дате (с самой последней наверху позиции), затем выйти и повторно запустить Mail (чтобы дважды проверить, что конфигурация была сохранена)

Затем проверьте, работает ли ваш скрипт.


Если вы не хотите устанавливать фильтр вручную, согласно этому, вы можете добавить в следующий скрипт в начало:

tell application "System Events" to click menu item "Date" of menu "Sort By" of menu item "Sort By" of menu "View" of menu bar item "View" of menu bar 1 of process "Mail"

для сортировки электронной почты по дате перед запуском скрипта, чтобы получить правильное сообщение.

Вы также можете посмотреть здесь, здесь и здесь чтобы проверить и перепроверить правильность настройки правил.

person A STEFANI    schedule 24.01.2018
comment
Это решение не работает. Даже после сортировки он все равно выбирает случайное сообщение. Помните, что сценарий запускается почтовым правилом для входящей транзакции. Мы ожидаем увидеть сообщение, выбранное правилом, но получаем другое сообщение, - person ghenne; 24.01.2018
comment
Не могли бы вы сделать принтскрин правила, потому что кажется, что условие правила настроено неправильно? - person A STEFANI; 24.01.2018
comment
Изображение добавлено в исходное сообщение. - person ghenne; 24.01.2018
comment
Пишите в одну строчку, как положено!: tell application "System Events" to click menu item "Date" of menu "Sort By" of menu item "Sort By" of menu "View" of menu bar item "View" of menu bar 1 of process "Mail" - person user3439894; 24.01.2018
comment
Иногда может помочь отступ, но я меняю по вашему совету. @ user3439894, вы знаете, почему его фильтр не работает? - person A STEFANI; 24.01.2018
comment
Да, отступы и разумное использование пробелов очень полезны при кодировании, однако одно системное событие, позволяющее щелкнуть элемент меню так, как вы опубликовали, — это, по-моему, плохой способ кодирования одного такого события. Если вы хотите, чтобы это не было на одной строке, вы можете разбить его, как в этом примере paste.ee/p/ kfKkN , в любом случае лучше, чем изначально опубликовано. Тем не менее, чтобы ответить на вопрос в вашем комментарии ... Поскольку я не в состоянии протестировать код OP в Mail, я действительно не могу эффективно устранить проблему. Хотя для бонуса +100 очень хотелось бы протестировать. - person user3439894; 24.01.2018
comment
Чтобы уточнить, что я сделал, я отсортировал список рассылки вручную в приложении. Сортировать с помощью скрипта не пробовал, так как это было бы лишним. - person ghenne; 24.01.2018
comment
Можете ли вы попробовать добавить условия правил: Статус | Непрочитано и удалите действие, прекратите оценку правил, и добавьте действие для перемещения электронной почты в папку, чтобы ваш фильтр не обрабатывал одно и то же электронное письмо бесконечно долго, а затем останавливался. - person A STEFANI; 24.01.2018
comment
Mail.app не имеет возможности проверять статус почты как непрочитанный. Другие ваши предложения ничего не изменили. - person ghenne; 25.01.2018

Судя по всему, обработка входящих сообщений с помощью правил — это асинхронный процесс. При вызове on perform mail action сообщение еще не полностью обновлено. Немедленно доступны только частичные данные.

Возможный обходной путь — добавить в скрипт delay 1. Это даст Mail секунду, чтобы завершить обновление сообщения. Вот как тогда выглядит скрипт:

using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule
        repeat with msg in theMessages
            -- delay a bit of time for msg to load
            delay 1

            set theText to subject of msg & return & content of msg & date sent of msg

            — do other processing

        end repeat
    end perform mail action with messages
end using terms from
person ghenne    schedule 01.02.2018