J'ai récemment obtenu mon premier Mac et j'étais confronté à la même situation concernant mes habitudes d'écriture de courrier (j'utilise Thunderbird avec un éditeur externe et vi sous Linux). Jusqu'à présent, je n'ai pas pu trouver de réponse appropriée. J'ai donc commencé à me pencher sur Applescript.
Je voudrais saisir des adresses de courrier ou ajouter des pièces jointes dans la fenêtre de composition d'Apple Mail, tout en modifiant le corps du message dans vi. Je commence donc par une fenêtre de composition (soit pour un nouveau courrier, soit pour une réponse à un autre courrier) et, une fois les adresses saisies, je ferme la fenêtre de composition et enregistre le message comme brouillon.
Avec l'Applescript script suivant, je peux alors extraire les adresses, le sujet et le corps du message dans un fichier texte et l'ouvrir avec vi :
tell application "Mail"
# Set global variables.
set msgfilename to "/Users/me/Documents/message"
set msgheaderdelimiter to linefeed & "#+#+#+#+#+#This line serves as delimiter for applescript.#+#+#+#+#+#" & linefeed
set msgdraft to first item of messages of drafts mailbox
# Open file to edit message.
try
set msgfile to open for access msgfilename with write permission
on error number -49
say "Error, file already open."
close access msgfilename
set msgfile to open for access msgfilename with write permission
end try
set eof msgfile to 0
# Extract information from the message and write it to the file
set msgrecipients to to recipients of msgdraft
write "To: " to msgfile as «class utf8»
repeat with rcp in msgrecipients
set addr to address of rcp
write addr to msgfile as «class utf8»
write "," to msgfile as «class utf8»
end repeat
write linefeed & "CC: " to msgfile starting at -1 as «class utf8»
set msgrecipients to cc recipients of msgdraft
repeat with rcp in msgrecipients
set addr to address of rcp
write addr to msgfile as «class utf8»
write "," to msgfile as «class utf8»
end repeat
write linefeed & "Subject: " to msgfile starting at -1 as «class utf8»
set msgsubject to subject of msgdraft
write msgsubject to msgfile starting at eof as «class utf8»
set msgcontent to content of msgdraft
write msgheaderdelimiter to msgfile as «class utf8»
write msgcontent to msgfile starting at eof as «class utf8»
close access msgfile
delete msgdraft
end tell
# Start gvim with the prepared message file
do shell script "/usr/local/bin/gvim /Users/me/Documents/message"
Après avoir modifié le corps du message, j'enregistre le fichier texte et je ferme vi. Avec le script suivant, je peux alors ouvrir une nouvelle fenêtre de composition de message avec les informations du fichier texte :
tell application "Mail"
# Set global variables.
set fillinToAddresses to false
set fillinCCAddresses to false
set defaultDelimiters to AppleScript's text item delimiters
set msgfilename to "/Users/me/Documents/message"
set msgheaderdelimiter to linefeed & "#+#+#+#+#+#This line serves as delimiter for applescript.#+#+#+#+#+#" & linefeed
# Open file to create outgoing message.
set msgfile to open for access msgfilename
set fields to read msgfile from 1 for 10000 using delimiter linefeed as «class utf8»
# Extract To addresses
set AppleScript's text item delimiters to " "
set bufferarray to every text item of item 1 of fields
if (count of bufferarray) = 2 then
set AppleScript's text item delimiters to ","
set msgtoaddresses to every text item of item 2 of bufferarray
set fillinToAddresses to true
end if
# Extract CC addresses
set AppleScript's text item delimiters to " "
set bufferarray to every text item of item 2 of fields
if (count of bufferarray) = 2 then
set AppleScript's text item delimiters to ","
set msgccaddresses to every text item of item 2 of bufferarray
set fillinCCAddresses to true
end if
# Extract subject
set AppleScript's text item delimiters to "Subject: "
set bufferarray to every text item of item 3 of fields
set msgsubject to item 2 of bufferarray as «class utf8»
# Extract mail body
set buffer1 to read msgfile from 1 for 10000 as «class utf8»
set AppleScript's text item delimiters to msgheaderdelimiter
set buffer2 to every text item of buffer1
set msgbody to item 2 of buffer2
# Create outgoing message object
set newmsg to make new outgoing message
tell newmsg
if fillinToAddresses then
repeat with addr in msgtoaddresses
make new to recipient at end of to recipients with properties {address:addr}
end repeat
end if
if fillinCCAddresses then
repeat with addr in msgccaddresses
make new cc recipient at end of cc recipients with properties {address:addr}
end repeat
end if
set the subject to msgsubject
set the content to msgbody
end tell
# Close file
close access msgfile
end tell
Maintenant, j'ajoute des pièces jointes et j'envoie le courrier.
Il y a évidemment encore quelques faiblesses : Les champs BCC et reply-to sont toujours absents, mais peuvent facilement être ajoutés. Un peu plus grave, les pièces jointes sont perdues lorsque l'on passe du compositeur de messages à vi et inversement. Il serait souhaitable, que la nouvelle fenêtre du compositeur de messages soit ouverte automatiquement lorsque vi est fermé, sans un démarrage manuel script comme ci-dessus. Donc, je ne suis pas encore complètement satisfait, mais peut-être que c'est un point de départ où certains utilisateurs plus avancés peuvent ajouter des améliorations.
2 votes
Bien qu'il s'agisse d'une solution plus généralisée, cette réponse à une question similaire répond certainement à vos critères. Note complémentaire : c'est simple pour configurer un
.authinfo
si vous vous consacrez à l'utilisation deEmacs
.0 votes
La question est vraiment d'avoir le meilleur des deux mondes : éditer dans emacs, mais rechercher via spotlight, synchronisation IMAP raisonnable, etc. J'ai utilisé mutt + offlineimap pendant un certain temps, mais je suis devenu trop vieux pour cela.
0 votes
Je ne connais pas l'automatisation d'emacs, je ne peux donc pas vous répondre directement. Vous devriez être capable d'utiliser "Keyboard Maestro". Voici un exemple de travail avec un autre éditeur GUI : rocketink.net/2013/05/quickcursor-keyboard-maestro.html Si vous faites en sorte que cela fonctionne avec emacs, je serais ravi de voir votre réponse.
3 votes
Qu'en est-il du "copier/coller" ?
0 votes
Ce type le fait dans BBEdit et a posté son code : lists.apple.com/archives/applescript-users/2013/Apr/
0 votes
Le copier/coller était une blague, non ? Le truc de BBEdit semble être une très mauvaise idée en combinaison avec IMAP et aussi autrement. Cela se cassera sur les connexions Internet faibles, quand Apple changera le format de la base de données, et aussi ce n'est pas pour la composition initiale des e-mails, juste pour les e-mails qui sont déjà stockés.