Applescript для удаления сообщения из категории в Outlook 2011

#macos #outlook #applescript

#macos #outlook #applescript

Вопрос:

Контекст

В Outlook 2011 у меня есть правило, которое автоматически устанавливает категорию для входящей почты — скажем, «Фиолетовая категория». Я бы хотел, чтобы электронное письмо из этой категории автоматически удалялось через неделю.

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

Проблема

Проблема в том, что я не могу выбирать сообщения в фиолетовой категории с помощью Applescript. Из описания словаря Outlook кажется, что сообщение и категория находятся на одном уровне:

Ниже приведено описание обоих элементов в словаре Outlook:

категория n, pl категории [inh. объект> элемент]: Категория.

содержится в приложении.


сообщение n [inh. todoable объект> категоризируемый объект> объект> элемент; см. Также Debug Suite]: сообщение электронной почты.

содержит получателей, получателям, получателям cc, получателям bcc, вложения;

содержится в приложениях, почтовых папках.

Как вы можете видеть, оба содержатся в приложении, поэтому в AppleScript, когда я пытаюсь:

 set messagesToDelete to message in inbox whose {category "Purple Category"}
  

Я получаю сообщение об ошибке, в котором говорится:

Не удается получить сообщение из папки входящих сообщений приложения «Microsoft Outlook», чья {категория «Фиолетовая категория»}. Доступ запрещен.

Остальная часть кода:

 set daysToPreserve to 7
set dateReference to (current date) - (daysToPreserve * days)
tell application "Microsoft Outlook"
set messagesToDelete to message in inbox whose {category "Purple Category"} and time received ≤ dateReference
if messagesToDelete is {} then
return
end if
permanently delete messagesToDelete
end tell
display dialog (count messagesToDelete) amp; " old Mail Messages Have Been Purged" as text buttons ["OK"]
  

Ответ №1:

необходимо перебирать все сообщения, имеющие категории

 tell application "Microsoft Outlook"

    repeat with afolder in mail folders
        set theMsgs to (every message of afolder where it's category is not {})

        -- loop through the messages
        repeat with aMsg in theMsgs
            -- get all the categories of the message
            set cats to categories of aMsg
            -- loop through the categories
            repeat with aCat in cats
                set catName to name of aCat
                -- check to see if this is the category of emails we want to delete
                if catName is "Purple Category" then
                    get time received of aMsg
                    set foo to date of time received of aMsg
                    -- compare dates  and delete aMsg
                    -- exit the loop so we don't error after deleting the message
                    exit repeat
                end if
            end repeat
        end repeat
    end repeat
end tell
  

Комментарии:

1. Я думал об этом изначально, но я не думаю, что это работает, потому что, как указано в правиле, оно применяется, когда сообщение приходит в папку «Входящие». Но, может быть, вы сможете найти обходной путь, я этого не сделал.

2. проблема с вашим решением заключается в том, что мне нужно применить правило вручную, что не является удовлетворительным: в Outlook я мог бы просто выбрать всю почту из категории, нажав Фильтр -> Категория и удалить их. Я ищу здесь автоматизацию.

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

4. Отличный ответ! Быстрое дополнение: как бы вы изменили сценарий, чтобы перебирать все входящие?