2017-07-25 7 views
0

J'essaie de créer une sous-boîte aux lettres dans Apple Mail en utilisant JavaScript.JXA: Créer une boîte aux lettres dans Apple Mail

Je l'extrait de code de code suivant (parent est une référence à la boîte aux lettres dans laquelle je veux la nouvelle boîte aux lettres):

var mb = mail.Mailbox({name: "SubFolder"}); 
parent.mailboxes.push(mb); 

Les événements du journal affiche:

app = Application("Mail") 
app.mailboxes.byName("Local").mailboxes.byName("Archive").mailboxes.push(app.Mailbox({"name":"SubFolder"})) 

    --> Error -10000: AppleEvent handler failed. 

Qu'est-ce que je fais faux?

Merci, Craig.

par code:

var mb = mail.Mailbox({name: "Local/Archive/Test Archive/SubFolder"}) 
logger.logDebug("mb = '" + Automation.getDisplayString(mb) + "'."); 
mail.mailboxes.push(mb)      // create the subfolder 

Cela fonctionne tant qu'il n'y a pas d'espace dans le chemin. J'ai essayé de forcer l'espace en utilisant \\ devant, mais vous obtenez alors "Test \ Archive" comme nom.

Alors, comment puis-je obtenir un espace dans le nom pour travailler?

Merci.

Répondre

1

Pour créer un sous-dossier, vous avez besoin d'un nom comme un chemin posix ->"/theMasterMailbox/subMailBox1/subMailBox2/subMailBox3".


Alors, vous avez besoin:

  • Une boucle pour mettre le nom de chaque dossier parent dans un tableau. Utilisez join('/') pour joindre les éléments d'un tableau dans une chaîne.
  • Utilisation mail.mailboxes.push(mb) au lieu de parent.mailboxes.push(mb)

Voici un exemple de script qui crée une boîte aux lettres nommée "SubFolder" dans le dossier sélectionné (la boîte aux lettres):

mail = Application('com.apple.Mail') 
parent = mail.messageViewers()[0].selectedMailboxes()[0] 

mboxNames = [parent.name()] 
thisFolder = parent 
try { 
    while (true) { // loop while exists the parent folder 
     mboxNames.unshift(thisFolder.container().name()) // add the name of the parent folder to the beginning of an array 
     thisFolder = thisFolder.container() // get the parent of thisFolder 
    } 
} catch (e) {} // do nothing on error, because thisFolder is the top folder 

mboxNames.push("SubFolder") // append the name of the new subFolder to the array 

mBoxPath = mboxNames.join('/') // get a string (the names separated by "/") 
mb = mail.Mailbox({name:mBoxPath}) 
mail.mailboxes.push(mb) // create the subfolder 
+0

Merci. Je viens de le voir car je n'ai pas été averti lorsque vous avez posté. Je vais essayer cela dans un bac à sable et voir si je peux le faire fonctionner pour une boîte locale. – Crashmeister

+0

Voir l'extension de mon message ci-dessus. Je ne peux pas le faire fonctionner s'il y a des espaces dans l'un des noms de boîte aux lettres. – Crashmeister

+0

Votre code fonctionne correctement sur mon ordinateur ('macOS Sierra', ** Version 10.12.6 **). Désolé, je ne peux pas vous aider. – jackjr300