Lo script Apple non riesce a copiare l'allegato da Outlook

4

Sto provando a copiare tutti gli allegati che ho ricevuto da un certo mittente (scanner) in una cartella. Sto usando Outlook e ho provato a scrivere uno script per fare il lavoro. Non riesce a salvare il file con il codice di errore:

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

Purtroppo non sono stato in grado di capire a) cosa significhi quell'errore, e b) come far funzionare lo script. Qualsiasi aiuto è benvenuto.

Questo è il mio script:

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 "[email protected]" = 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
    
posta hitzg 11.10.2018 - 16:18
fonte

1 risposta

1

L'errore del parametro sta sorgendo perché uno dei parametri che invii al comando save è errato. Il parametro f è il attachment da salvare, questo va bene.

Il problema è il secondo parametro, che hai dichiarato è un percorso POSIX file (uno composto da barre in avanti, ad esempio /Users/hitzg/Desktop/some_file.txt ).

Tuttavia, la variabile saveAsName è derivata da saveToFolder , che ottiene il suo percorso file dal comando choose folder . Questo comando restituisce un percorso HFS (uno composto da due punti, ad esempio Macintosh HD:Users:hitzg:Desktop:some_file.txt ).

Quindi la soluzione è semplicemente decidere quale tipo di formato di percorso del file hai intenzione di andare, e attenersi ad esso. Puoi EITHER utilizzare i percorsi posix e modificare questa linea dello script (abbreviata per la leggibilità) da questo:

set saveToFolder to (choose folder) as string

a questo:

set saveToFolder to POSIX path of (choose folder)

O usa i percorsi HFS e modifica questa linea dello script:

save f in POSIX file saveAsName

a questo:

save f in file saveAsName

Questo corregge il tuo errore di parametro, ma non ho testato il resto del tuo script per vedere come si comporta. Leggendola, non ci sono errori evidenti, quindi non prevedo altri importanti problemi.

APPENDICE

Vorrei offrire alcune modifiche alla sceneggiatura originale che, a mio avviso, ottimizzano il codice rendendolo più efficiente e performante. Il tuo script esistente è eccellente, tuttavia con l'uso strategico del filtro whose di AppleScript, possiamo eliminare il primo dei loop repeat , migliorando le prestazioni del secondo.

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 <[email protected]>" 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

L'elemento chiave di questa versione dello script è l'implementazione del filtro whose qui:

    set selectedMessages to a reference to (messages of srcFolder whose ¬
        class of attachments contains attachment and ¬
        "From: First Last <[email protected]>" is in headers)

Invece di cercare tra tutti i messaggi nella tua casella di posta per i messaggi inviati da un particolare mittente, quindi afferrando gli allegati, il primo criterio del filtro seleziona immediatamente solo i messaggi nella tua casella di posta che hanno allegati; i messaggi senza allegati sono superflui ai nostri bisogni, quindi non abbiamo nemmeno bisogno di considerarli. Il secondo criterio specifica che le email dovrebbero provenire da una persona specifica, sebbene il address of sender sfortunatamente non possa essere incorporato nel filtro, quindi ho utilizzato le intestazioni dei messaggi per assicurarmi che contenga la stringa "From: ..." appropriata.

Per formattare questa stringa, ottieni semplicemente la proprietà headers per un messaggio dal mittente specifico e sfogliala fino a trovare alcune righe che assomigliano a questa:

From: First Last <[email protected]>
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>

Sarà approssimativamente nel mezzo del testo dell'intestazione. Quindi assicurati che il testo del tuo filtro corrisponda alla riga "From:" (copy-n-paste), poiché quasi sicuramente sarà uguale in tutte le e-mail di quel mittente, a meno che non abbiano cambiato nome e cognome in qualsiasi punto (che può , ovviamente, essere assente).

Un filtro leggermente più lento se si è preoccupati che il nome e il cognome possano essere cambiati nel tempo, sarebbe sufficiente filtrare headers per vedere se contengono solo l'indirizzo email "[email protected]" . Dato che cercherete solo nella vostra casella di posta, è ragionevole presumere che qualsiasi occorrenza di tale indirizzo di posta elettronica in un'intestazione del messaggio di posta in arrivo significhi che l'e-mail sia originata da tale indirizzo o che sia stata inviata a tale indirizzo come a voi:

    set selectedMessages to a reference to (messages of srcFolder whose ¬
        class of attachments contains attachment and ¬
        "<[email protected]>" is in the headers)

Il resto dello script è più o meno lo stesso, con la correzione per l'errore dei parametri implementato.

Dopo aver testato lo script sul mio sistema, ha funzionato come previsto ed eseguito in modo molto efficiente. Il rallentamento della velocità per me era il dover scaricare ogni allegato per poterlo salvare, quindi c'era una considerazione sul trasferimento dei dati durante l'esecuzione nella mia cartella di posta di Exchange.

Durante l'esecuzione su una cartella di posta locale con allegati già scaricati, il salvataggio degli allegati era praticamente istantaneo.

    
risposta data 19.10.2018 - 08:26
fonte

Leggi altre domande sui tag