#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. Отличный ответ! Быстрое дополнение: как бы вы изменили сценарий, чтобы перебирать все входящие?