Al querer elegir aleatoriamente entre un grupo de archivos para enviar el contenido de los mismos como un correo electrónico, asegurando al mismo tiempo que el contenido de cada archivo se utiliza sólo una vez, requiere mantener un lista de nombres de archivos desde el que ya se ha enviado el contenido. Hay varias maneras de que esto lista se puede crear, acceder y mantener.
No se puede evitar el uso de Automatizador y utilizando AppleScript para todo el proceso, lo más fácil sería como AppleScript property
variable Sin embargo, un AppleScript property
variable consigue reiniciar si el script es recompilado en Script Editor y o salvado de nuevo después de haber sido originalmente guardado .
Esto no es necesariamente un problema, si una vez que el script se ha configurado adecuadamente para satisfacer las necesidades y funciona correctamente durante las pruebas, entonces se guarda como un aplicación y no modificado o salvado de nuevo después de que la tirada inicial de la misma haya sido guardado como aplicación . Si eso puede ser un problema, entonces el lista tendrá que ser guardado como archivo de disco . (Personalmente, optaría por utilizar el archivo de disco .)
Salvando el lista de nombres de archivos cuyo contenido ya ha sido enviado por correo electrónico como archivo de disco también puede hacerse de varias maneras. Básicamente, hay que elegir una de las formas posibles y codificarla en consecuencia.
Lo siguiente AppleScript código ejemplos, muestra dos formas de realizar la tarea general. La primera, utilizando un AppleScript property
variable y el segundo utilizando un archivo de disco para mantener el lista .
- Nota: En uno de mis comentarios, pregunté "¿Los archivos tienen que ser Rich Text o pueden ser Plain Text?", y la razón es que, como Texto sin formato el archivo no tendría que abrirse en el GUI para recuperar el contenido, mientras que con Texto enriquecido habría que abrirlo en TextEdit para recuperar el contenido. No tener que hacerlo a través del GUI es más rápido y visualmente menos molesto. Además, si esto se hace en Automatizador utilizando el Obtener el contenido del documento de TextEdit acción recupera el contenido como texto sin formato de todos modos. Por lo tanto, es realmente ventajoso utilizar Texto sin formato archivos sobre Texto enriquecido para empezar. Estos ejemplos están codificados para utilizar Texto enriquecido y TextEdit , con una modificación que se muestra después si se utiliza Texto sin formato .
En el primer ejemplo AppleScript código Hay algunos variables que tendrá que establecer:
thisFolder
- La ubicación de la carpeta que contiene los 100 archivos.
theRecipientName
- El nombre del destinatario del correo electrónico.
theRecipientAddress
- La dirección de correo electrónico del destinatario del correo electrónico.
theSubject
- El asunto del mensaje de correo electrónico.
En el segundo ejemplo AppleScript código Además de la variables que se muestra arriba:
theAlreadySentListFilename
- La ubicación y el nombre del archivo que contiene los nombres de los archivos de los que ya se ha enviado el contenido.
El resto de la script se codifica de manera ( tokenizado ) para trabajar con estos variables y otros set dentro del script . Además, el tell application "Mail"
bloque de código está codificado para enviar el mensaje automáticamente, sin embargo se ha comentado, hasta que se hagan las pruebas y o si no se quiere enviar automáticamente. Descomentar en consecuencia.
Para utilizar este script , en Script Editor crear un nuevo documento y guardarlo como aplicación en /Aplicaciones , nombrándolo, por ejemplo, como 100 mensajes para enviar.app .
A continuación, copie y pegue el ejemplo AppleScript código abajo en el 100 mensajes para enviar.app en script Editor y golpear el Compilar botón en el Barra de herramientas .
Modificar el variables , mencionada anteriormente.
Salvar el aplicación y prueba desde dentro Script Editor .
Una vez que haya terminado con las pruebas, pulse el botón Compilar botón en el Barra de herramientas para restablecer el theAlreadySentList
AppleScript property
variable a un vacío lista y luego guardar y cerrar el 100 mensajes para enviar.app para no reiniciar el theAlreadySentList
AppleScript property
variable una vez que comienza el modo de producción.
Primer ejemplo de AppleScript código :
-- ### Folder Path Variable
-- # Set the location of the folder containing the 100 files.
-- # NOTE: All 100 files must be in the same individual folder.
set thisFolder to (path to documents folder as text) & "100 Messages to Send"
-- ### Mail Variables
set theRecipientName to "John Doe"
set theRecipientAddress to "johndoe@domain.com"
set theSubject to "Hello World"
-- # Leave the following as 'missing value'.
set theMessageContent to missing value
-- ##### DO NOT modify below this line unless necessary. #####
-- ### Some Other Variables
-- # The property variable 'theAlreadySentList', is a list of
-- # filenames from which the messages have already been sent.
-- # The value of this property is maintained so long as
-- # this script is not save again or recompiled after it
-- # has been originally saved for the first time.
property theAlreadySentList : {}
global thisFile
-- ### Handler
on chooseRandomFileFrom(thisFolder)
tell application "Finder"
set thisFile to some file of container thisFolder
end tell
return thisFile
end chooseRandomFileFrom
-- # Get the count of entries in the 'theAlreadySentList' list.
-- # This is used to display a message and break the 'repeat' loop
-- # once all 100 messages have been sent.
set theCount to (count of theAlreadySentList) as integer
-- # Choose a file at random.
set thisFileName to name of chooseRandomFileFrom(thisFolder)
-- # Evaluate the sent status of 'thisFileName' and respond accordingly.
repeat -- 200 times -- # Uncomment if you want a failsafe out of the 'repeat' loop.
if theCount is equal to 100 then
display dialog "All 100 messages have already been sent!" buttons {"OK"} default button 1
exit repeat
else if thisFileName is in theAlreadySentList then
-- # Choose another file at random.
set thisFileName to name of chooseRandomFileFrom(thisFolder)
else
-- # This file has not been used yet, process accordingly.
set end of theAlreadySentList to thisFileName
tell application "TextEdit"
open thisFile
activate
delay 1 --# Adjust as necessary. Time must be given for the file to open before proceeding.
set theMessageContent to text of front document
close front document
end tell
tell application "Mail"
activate
set theMessage to make new outgoing message with properties {visible:true, subject:theSubject, content:theMessageContent}
tell theMessage
make new to recipient at end of to recipients with properties {name:theRecipientName, address:theRecipientAddress}
end tell
-- delay 1 --# Adjust as necessary. Uncomment to use this command.
-- send theMessage --# Uncomment to use this command.
end tell
exit repeat
end if
end repeat
En este segundo ejemplo AppleScript código , a archivo de disco se utiliza para almacenar el lista de nombres de archivos cuyo contenido ya ha sido enviado como mensaje de correo electrónico.
Para utilizar este script , en script Editor crear un nuevo documento y guardarlo como aplicación en /Aplicaciones , nombrándolo, por ejemplo, como 100 mensajes para enviar.app . Esto se hace para poder añadir un texto sin formato al archivo paquete de aplicaciones a utilizar para el lista de nombres de archivos ya enviados. (Prefiero mantener los archivos de apoyo relacionados dentro del paquete de aplicaciones .)
Una vez guardado el documento como aplicación Ahora abra el paquete de aplicaciones (en Buscador , Haga clic con el botón derecho del ratón en Mostrar el contenido del paquete ) a Contenidos/Recursos/ y crear el, por ejemplo Mensajes enviados Lista de archivos.txt como un archivo vacío, y luego cerrar el paquete de aplicaciones .
A continuación, copie y pegue el ejemplo AppleScript código a continuación en el e.g. 100 mensajes para enviar.app en Script Editor y golpear el Compilar botón en el Barra de herramientas .
Modificar el variables como se ha mencionado anteriormente.
Salvar el aplicación y prueba desde dentro script Editor .
Una vez que haya terminado con las pruebas, borre las entradas del Mensajes enviados Lista de archivos.txt , por lo que es un archivo vacío cuando se ejecuta el aplicación por primera vez en modo de producción.
Segundo ejemplo de AppleScript código :
-- ### Folder Path Variable
-- # Set the location of the folder containing the 100 files.
-- # NOTE: All 100 files must be in the same individual folder.
set thisFolder to (path to documents folder as text) & "100 Messages to Send"
-- ### Mail Variables
set theRecipientName to "John Doe"
set theRecipientAddress to "johndoe@domain.com"
set theSubject to "Hello World"
-- # Leave the following as 'missing value'.
set theMessageContent to missing value
-- ### Sent Messages Filename List Location Variable
-- # Set the location and name of the file containing the
-- # filenames from which the content has already been sent.
set myPath to POSIX path of (path to me as string)
set theAlreadySentListFilename to myPath & "Contents/Resources/Sent Messages Filename List.txt"
-- ##### DO NOT modify below this line unless necessary. #####
-- ### Some Other Variables
global thisFile
global theAlreadySentList
set theAlreadySentList to {}
-- ### Handlers
on buildListFromDiskFile(thisDiskFile)
set thisContent to do shell script "cat " & quoted form of thisDiskFile
repeat with thisParagraph in paragraphs of text in thisContent
set end of theAlreadySentList to (thisParagraph as text)
end repeat
end buildListFromDiskFile
on chooseRandomFileFrom(thisFolder)
tell application "Finder"
set thisFile to some file of container thisFolder
end tell
return thisFile
end chooseRandomFileFrom
-- # Load data from disk file for: 'theAlreadySentList'
buildListFromDiskFile(theAlreadySentListFilename)
-- # Get the count of entries in the 'theAlreadySentList' list.
-- # Used to display a message once all 100 messages have been sent.
set theCount to (count of theAlreadySentList) as integer
-- # Choose a file at random.
set thisFileName to name of chooseRandomFileFrom(thisFolder)
-- # Evaluate the sent status of 'thisFileName' and respond accordingly.
repeat -- 200 times -- # Uncomment if you want a failsafe out of the 'repeat' loop.
if theCount is equal to 100 then
display dialog "All 100 messages have already been sent!" buttons {"OK"} default button 1
exit repeat
else if thisFileName is in theAlreadySentList then
-- # Choose another file.
set thisFileName to name of chooseRandomFileFrom(thisFolder)
else
-- # This file has not been used yet, process accordingly.
-- #
-- # Add the filename to the list.
do shell script "echo " & thisFileName & " >> " & quoted form of theAlreadySentListFilename
-- # Get the content of the Rich Text file.
tell application "TextEdit"
open thisFile
activate
delay 1 --# Adjust as necessary. Time must be given for the file to open before proceeding.
set theMessageContent to text of front document
close front document
end tell
-- # Create the Mail Message (and Send it).
tell application "Mail"
activate
set theMessage to make new outgoing message with properties {visible:true, subject:theSubject, content:theMessageContent}
tell theMessage
make new to recipient at end of to recipients with properties {name:theRecipientName, address:theRecipientAddress}
end tell
-- delay 1 --# Adjust as necessary. Uncomment to use this command.
-- send theMessage -- # Uncomment to use this command.
end tell
exit repeat
end if
end repeat
NOTA: Si va a utilizar Texto sin formato en lugar de los archivos Texto enriquecido archivos, entonces todo el tell application "TextEdit"
bloque de código puede sustituirse por las siguientes dos líneas de código :
set thisFile to POSIX path of (thisFolder & ":" & thisFileName)
set theMessageContent to do shell script "cat " & quoted form of thisFile
También puedes cambiar el comentario de arriba, -- # Get the content of the Rich Text file.
, intercambiando Rich con Llano .