El parámetro de error surge porque uno de los parámetros que usted está enviando a la save
comando es errónea. El f
parámetro es el attachment
para ser salvos-esto está bien.
El problema es que el segundo parámetro, que usted haya declarado es un POSIX file
ruta (un compuesto de barras diagonales, por ejemplo /Users/hitzg/Desktop/some_file.txt
).
Sin embargo, la variable saveAsName
se deriva de saveToFolder
, que se obtiene de su ruta de acceso del archivo de la choose folder
comando. Este comando devuelve una HFS camino (uno compuesto de dos puntos, por ejemplo Macintosh HD:Users:hitzg:Desktop:some_file.txt
).
Por lo que la solución es simplemente decidir que tipo de archivo de formato de ruta que vamos a ir con el, y se adhieren a ella. Usted puede ya SEA el uso de posix caminos, y cambiar esta línea de la secuencia de comandos (acortado para mejorar la legibilidad) a partir de esto:
set saveToFolder to (choose folder) as string
a este:
set saveToFolder to POSIX path of (choose folder)
O el uso de HFS caminos, y cambiar esta línea de la secuencia de comandos:
save f in POSIX file saveAsName
a este:
save f in file saveAsName
Que corrige su error de parámetro, pero yo no he probado el resto de la secuencia de comandos para ver cómo se comporta. Leer a través de él, no hay errores garrafales, por lo que no preveo ningún otro de los principales problemas.
ANEXO
Me gustaría ofrecer un par de modificaciones en el guión original, que creo que optimiza el código de tiempo que se hace más eficaz y eficiente. Su secuencia de comandos existente es excelente, sin embargo, con el uso estratégico de la AppleScript whose
filtro, podemos eliminar el primero de la repeat
bucles, mientras que mejora el rendimiento de la segunda.
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
El elemento clave de esta versión de la secuencia de comandos es la implementación de la whose
filtro:
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)
En lugar de buscar a través de todos los mensajes en su bandeja de entrada para los mensajes enviados desde un remitente en particular, luego agarrar los archivos adjuntos, el filtro del primer criterio al instante elige solo los mensajes en su bandeja de entrada que tienen datos adjuntos; los mensajes sin archivos adjuntos son superfluas a nuestras necesidades, por lo que ni siquiera necesita considerar. El segundo criterio se especifica que los correos electrónicos deben provenir de una persona específica, aunque el address of sender
lamentablemente, no puede ser incorporado en el filtro, por lo que en su lugar he utilizado los encabezados de los mensajes para asegurarse de que contiene la correspondiente "From: ..."
cadena.
El formato de esta cadena, simplemente obtener el headers
de la propiedad de un mensaje del remitente, y descremada a través de ella hasta llegar a través de un par de líneas como esta:
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>
Va a estar aproximadamente en el centro de la cabecera de texto. A continuación, sólo asegúrese de que el filtro de texto coincide con el "From:"
línea (copia-n-paste), ya que esta casi seguro que sea el mismo a lo largo de todos los correos de ese remitente, a menos que cambiaron sus nombres y apellidos en cualquier punto (que, por supuesto, estar ausente).
Un poco más flojo de filtro si usted está preocupado de que los nombres y apellidos podría haber cambiado con el tiempo, sería simplemente filtrar la headers
, para ver si contienen sólo la dirección de correo "scanner@some.some"
. Ya que sólo se va a estar buscando a su bandeja de entrada, es razonable suponer que la aparición de esa dirección de correo electrónico en la bandeja de entrada de encabezado de mensaje significa que el correo electrónico se originó a partir de la dirección o estaba en copia a la dirección así como:
set selectedMessages to a reference to (messages of srcFolder whose ¬
class of attachments contains attachment and ¬
"<scanner@some.some>" is in the headers)
El resto de la secuencia de comandos es más o menos el mismo, con la corrección por el error de parámetro implementado.
Después de haber probado el script en mi sistema, no funcionó como se esperaba y se realiza de manera muy eficiente. El cuello de botella en la velocidad para mí fue tener que descargar cada archivo adjunto con el fin de salvar, por lo que hubo una transferencia de datos consideración cuando se ejecuta en contra de mi correo de Exchange carpeta.
Cuando se ejecuta contra un local en la carpeta de correo con archivos adjuntos ya descargado, el ahorro de los archivos adjuntos que fue prácticamente instantáneo.