Помилка параметра виникає, тому що один з параметрів, які ви надсилаєте на save
команда є помилковою. The f
параметром є attachment
щоб бути врятовані - це добре.
Проблема є другим параметром, про який ви заявили: a POSIX file
шлях (один складається з передніх косих, напр. /Users/hitzg/Desktop/some_file.txt
).
Однак змінна saveAsName
походить від saveToFolder
, який отримує шлях від файлу choose folder
команду. Ця команда повертає шлях HFS (один складається з двокрапків, напр. Macintosh HD:Users:hitzg:Desktop:some_file.txt
).
Таким чином, виправити просто вирішити, який тип файлу шляху формат ви збираєтеся йти з, і дотримуватися його. Ти можеш НІ використовуйте шляхи posix, і змініть цей рядок скрипту (скорочений для читання) з цього:
set saveToFolder to (choose folder) as string
до цього:
set saveToFolder to POSIX path of (choose folder)
АБО використовуйте шляхи HFS і змініть цей рядок сценарію:
save f in POSIX file saveAsName
до цього:
save f in file saveAsName
Це виправляє помилку параметрів, але я не перевірив решту сценарію, щоб побачити, як він виконує. Прочитавши його, немає яскравих помилок, тому я не передбачаю інших важливих проблем.
ДОДАТОК
Я хотів би запропонувати кілька редагувань для вашого оригінального сценарію, який, на мою думку, спрощує код, роблячи його більш ефективним і ефективним. Ваш існуючий скрипт відмінний, проте з стратегічним використанням AppleScript whose
фільтр, ми можемо усунути перший repeat
петель, одночасно підвищуючи продуктивність другого.
set saveToFolder to (choose folder) as text
tell application "Microsoft Outlook"
set srcFolder to mail folder "Inbox" of exchange account "FOO"
set selectedMessages to a reference to (messages of srcFolder whose ¬
class of attachments contains attachment and ¬
"From: First Last <scanner@some.some>" is in headers)
set attFiles to a reference to attachments of selectedMessages
set [n, m] to [count selectedMessages, count attFiles]
repeat with f in the attFiles
set savePath to saveToFolder & name of f
save f in file savePath
end repeat
end tell
display alert "" & m & " attachments were saved" message ¬
"These belonged to " & n & " messages" as ¬
informational buttons {"OK"} default button 1
Ключовим елементом цієї версії сценарію є реалізація whose
фільтрувати тут:
set selectedMessages to a reference to (messages of srcFolder whose ¬
class of attachments contains attachment and ¬
"From: First Last <scanner@some.some>" is in headers)
Замість того, щоб шукати всі повідомлення в папці "Вхідні" для повідомлень, надісланих від конкретного відправника, а потім перехоплюючи вкладення, перший критерій фільтра миттєво вибирає лише повідомлення в папці "Вхідні", у яких є вкладення. повідомлення без вкладень зайві для наших потреб, тому нам навіть не потрібно їх розглядати. Другий критерій вказує, що електронні листи повинні надходити від конкретної особи, хоча address of sender
на жаль, не можна включити до фільтра, тому я скористався заголовками повідомлень, щоб переконатися, що він містить відповідний "From: ..."
рядок.
Щоб відформатувати цей рядок, просто отримайте headers
властивість для одного повідомлення від конкретного відправника, і пропустити його, поки ви не зустрінете кілька рядків, які виглядають так:
From: First Last <scanner@some.some>
Subject: Hello World!
Thread-Topic: Hello Again
Thread-Index: AdQD5jaiEJ7GiUlKRYeD5LaN3BaSpA==
Date: Thu, 14 Jun 2018 13:22:53 +0000
Message-ID: <B64BBE7A4C13095094C6A44D85FA3FDB5085651F@ABCD-mail.somemailbox.foo.com>
Це буде приблизно в середині тексту заголовка. Тоді просто переконайтеся, що текст фільтра відповідає "From:"
рядок (copy-n-paste), оскільки це майже напевно буде однаковим для всіх листів від цього відправника, якщо вони не змінюють своє ім'я та прізвище в будь-який момент (що, звичайно, може бути відсутнім).
Трохи слабший фільтр, якщо ви стурбовані тим, що ім'я та прізвище могли змінюватися з часом, це просто фільтрувати headers
щоб побачити, чи містяться вони лише адресу електронної пошти "scanner@some.some"
. Оскільки ви здійснюватимете пошук лише в папці "Вхідні", доцільно припустити, що будь-який випадок цієї адреси електронної пошти в заголовку повідомлення вхідної пошти означає, що електронна пошта вийшла з цієї адреси або була вказана на цю адресу, а також:
set selectedMessages to a reference to (messages of srcFolder whose ¬
class of attachments contains attachment and ¬
"<scanner@some.some>" is in the headers)
Решта сценарію є більш-менш однаковою, з виправленням помилки параметра.
Протестувавши сценарій на моїй системі, він працював як слід і виконувався дуже ефективно. Вузьке зіткнення в швидкості для мене змушений був завантажувати кожне вкладення для того, щоб його зберегти, тому було враховано питання передачі даних під час роботи з моєю поштовою папкою Exchange.
Під час роботи з локальною поштовою папкою з вже завантаженими вкладеннями збереження вкладень було практично миттєвим.