Lorsque l'on veut choisir de manière aléatoire dans un groupe de fichiers pour envoyer son contenu sous forme de courrier électronique, tout en veillant à ce que le contenu de chaque fichier ne soit utilisé qu'une seule fois, il faut maintenir un fichier de type liste de noms de fichiers à partir duquel le contenu a déjà été envoyé. Il existe plusieurs façons de procéder. liste peuvent être créés, accessibles et maintenus.
Rester à l'écart de Automator et en utilisant AppleScript pour l'ensemble du processus, le plus simple serait en tant que AppleScript property
variable Toutefois, une AppleScript property
variable obtient réinitialiser si le script es recompilé en scriptÉditeur et ou sauvé à nouveau après qu'il ait été initialement sauvegardé .
Ce n'est pas nécessairement un problème, si une fois que la script a été correctement configuré pour répondre aux besoins et fonctionne correctement pendant les tests, il est ensuite sauvegardé en tant qu'un application et non modifié o sauvé à nouveau après que la version initiale ait été sauvegardé comme un application . Si cela peut être un problème, alors le liste devra être sauvegardé en tant que fichier du disque . (Personnellement, je choisirais d'utiliser l'option fichier du disque .)
Sauver le liste de noms de fichiers dont le contenu a déjà été envoyé par e-mail en tant que fichier du disque peut également se faire de plusieurs manières. Vous devez essentiellement choisir l'une des méthodes possibles et la coder en conséquence.
Les éléments suivants AppleScript code montre deux façons d'accomplir la tâche globale. La première, qui utilise un AppleScript property
variable et la seconde en utilisant un fichier du disque pour maintenir la liste .
-
Nota: Dans l'un de mes commentaires, j'ai demandé : "Les fichiers doivent-ils être en Rich Text ou peuvent-ils être en Plain Text ?". Texte en clair le fichier n'aurait pas besoin d'être ouvert dans l'application GUI pour récupérer le contenu, alors qu'avec Texte enrichi il faudrait l'ouvrir en .e.g. TextEdit pour récupérer le contenu. Ne pas avoir à le faire par l'intermédiaire du GUI est plus rapide et visuellement moins gênante. De plus, si cela est fait dans Automator en utilisant le Obtenir le contenu d'un document TextEdit action il récupère le contenu sous la forme texte clair de toute façon. Ainsi, il est en fait avantageux d'utiliser Texte en clair les dossiers sur Texte enrichi pour commencer. Ces exemples sont codés pour utiliser Texte enrichi y TextEdit avec une modification montrée ensuite si l'on utilise Texte en clair .
Dans le premier exemple AppleScript code il y a quelques variables que vous devrez définir :
-
thisFolder
- L'emplacement du dossier contenant les 100 fichiers.
-
theRecipientName
- Le nom du destinataire de l'e-mail.
-
theRecipientAddress
- L'adresse e-mail du destinataire de l'e-mail.
-
theSubject
- Le sujet du message électronique.
Dans le deuxième exemple AppleScript code en plus de la variables montré ci-dessus :
-
theAlreadySentListFilename
- L'emplacement et le nom du fichier contenant les noms de fichiers à partir desquels le contenu a déjà été envoyé.
Le reste de la script est codé d'une manière ( tokenized ) pour travailler avec ces variables et autres set au sein de la script . En outre, le tell application "Mail"
bloc de code est codé pour envoyer le message automatiquement, cependant il a été commenté, jusqu'à ce que les tests soient faits et ou si vous ne voulez pas envoyer automatiquement. Décommentez en conséquence.
Pour utiliser ce script en scriptÉditeur créez un nouveau document et enregistrez-le sous le nom de application en /Applications en le nommant, par exemple, comme suit 100 messages à envoyer.app .
Ensuite, copiez et collez l'exemple AppleScript code ci-dessous dans le 100 messages à envoyer.app en scriptÉditeur et a touché le Compiler bouton sur le Barre d'outils .
Modifiez le variables mentionné plus haut.
Sauvegarder le application et tester de l'intérieur scriptÉditeur .
Une fois les tests terminés, cliquez sur le bouton Compiler bouton sur le Barre d'outils pour réinitialiser le theAlreadySentList
AppleScript property
variable à un vide liste puis enregistrez et fermez la page 100 messages à envoyer.app afin de ne pas réinitialiser le theAlreadySentList
AppleScript property
variable une fois le mode de production lancé.
Premier exemple AppleScript code :
-- ### 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
Dans ce deuxième exemple AppleScript code , a fichier du disque est utilisé pour stocker le liste de noms de fichiers à partir duquel le contenu a déjà été envoyé sous forme de message électronique.
Pour utiliser ce script en scriptÉditeur créez un nouveau document et enregistrez-le sous le nom de application en /Applications en le nommant, par exemple, comme suit 100 messages à envoyer.app . Ceci est fait pour que vous puissiez ajouter un texte clair vers le fichier paquet d'applications à utiliser pour le liste de noms de fichiers déjà envoyé. (Je préfère conserver les fichiers d'assistance connexes dans le dossier de l'utilisateur. paquet d'applications .)
Après avoir enregistré le document comme un application Maintenant, ouvrez le paquet d'applications (en Finder , Cliquez à droite sur Contenu de l'emballage du spectacle ) à Contenu/Ressources/ et créer le, par exemple Messages envoyés Liste de noms de fichiers.txt comme un fichier vide, puis fermez le fichier paquet d'applications .
Ensuite, copiez et collez l'exemple AppleScript code ci-dessous dans l'e.g. 100 messages à envoyer.app en scriptÉditeur et a touché le Compiler bouton sur le Barre d'outils .
Modifiez le variables comme indiqué plus haut.
Sauvegarder le application et tester de l'intérieur scriptÉditeur .
Une fois les tests terminés, effacez les entrées de l'écran d'accueil. Messages envoyés Liste de noms de fichiers.txt de sorte qu'il s'agit d'un fichier vide lors de l'exécution de la commande application pour la première fois en mode production.
Deuxième exemple AppleScript code :
-- ### 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
NOTE : Si vous voulez utiliser Texte en clair au lieu des fichiers Texte enrichi puis l'ensemble des fichiers tell application "TextEdit"
bloc de code peut être remplacé par les deux lignes suivantes de code :
set thisFile to POSIX path of (thisFolder & ":" & thisFileName)
set theMessageContent to do shell script "cat " & quoted form of thisFile
Vous pouvez également modifier le commentaire qui se trouve au-dessus, -- # Get the content of the Rich Text file.
, l'échange Rich con Plain .