Сценарій Apple не вдалося скопіювати вкладення з Outlook


4

Я намагаюся скопіювати всі вкладення, які я отримав від певного відправника (сканера) до папки. Я використовую Outlook, і я намагався написати сценарій, щоб зробити роботу. Не вдалося зберегти файл з кодом помилки:

error "Microsoft Outlook got an error: Parameter error." number -50

На жаль, я не зміг зрозуміти, що означає ця помилка, і б) як змусити сценарій працювати. Будь-яка допомога вітається.

Це мій сценарій:

set saveToFolder to (choose folder with prompt "Choose the destination folder") as string
set ctr to 0

tell application "Microsoft Outlook"
    set srcFolder to mail folder "inbox" of exchange account "FOO"
    set selectedMessages to messages of srcFolder
    repeat with msg in selectedMessages
        set ctr to ctr + 1
        set msgsender to the sender of msg
        set senderaddress to the address of msgsender
        if "scanner@some.some" = senderaddress then
            set attFiles to attachments of msg
            repeat with f in attFiles
                set attName to (get the name of f)
                log attName
                set saveAsName to saveToFolder & attName
                log saveAsName
                save f in POSIX file saveAsName
            end repeat
        end if
    end repeat
end tell
display dialog "" & ctr & " messages were processed" buttons {"OK"} default button 1
return ctr

У мене була інша проблема з Applescript + Outlook, і я дізнався, що є швидка підтримка Microsoft. На жаль, вони були марними (вони сказали, що моє питання є дизайном), але я думаю, що варто спробувати це. Якщо ви отримаєте відповідь від Microsoft, ви можете відповісти на це питання самостійно. Перейдіть до Outlook, перейдіть до меню Apple, виберіть пункт Довідка -> CheckForUpdates. Звідти ви можете приєднатися до програми "Insider Fast". Зроби це. (Ви можете роз'єднатися пізніше). Потім поверніться до меню довідки Outlook і з'явиться нова опція "Підтримка контакту", яка запускає сеанс чату з Microsoft. Варто спробувати.
jay613

@ jay613 спасибі за пропозицію. Я побачу, якщо я знайду час для цього.
hitzg

Ви пробували коментувати окремі рядки, щоб побачити, чи є якісь конкретні set … лінія викликає проблему?
Timothy Mueller-Harder

@ TimothyMueller-Harder Я не пробував цього. Не впевнений, хоча, якщо я розумію, що ви маєте на увазі. Якщо я коментувати будь-який set ... то лінія, яка породила б додаткову проблему, чи ні? Помилка викликана save ... лінії.
hitzg

На жаль, неправильно прочитали код! Ви, звичайно, маєте рацію.
Timothy Mueller-Harder

Відповіді:


1

Помилка параметра виникає, тому що один з параметрів, які ви надсилаєте на 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.

Під час роботи з локальною поштовою папкою з вже завантаженими вкладеннями збереження вкладень було практично миттєвим.


Велике спасибі за докладне пояснення. Просто використовую file замість POSIX file працює як шарм. Обгортання всіх повідомлень було досить швидким. Запропонована нова версія виглядає чудово. На жаль, він застряє на використанні фільтра ( set selectedMessages ... ). Але перша версія прекрасна, вона виконує свою роботу. Так ще раз спасибі!
hitzg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.