Applescript för att skapa nytt mail till viss person i Microsoft Entourage

Tråden skapades och har fått 16 svar. Det senaste inlägget skrevs .
1

Hejsan!

Om ni vill lära er lite Applescript och använder Microsoft Entourage som epostprogram och märker att ni skickar mail flera gånger om dagen till ett fåtal personer, så kanske ni är intresserade av att läsa nedanstående.

Det är en beskrivning över hur man skapar ett Applescript som skapar ett nytt mail i Entourage i Office X adresserat till en viss person med ett visst avsändarkonto, signatur, inledning av mailet och ärenderad.

Det riktigt fiffiga är att man kan aktivera detta script på flera olika sätt, bland annat genom att trycka CTRL + den bokstav man bestämt sig för genom att spara scriptet på rätt plats och med rätt namn. Mycket smidigt.

Bakgrund
Jag som skickar mail till samma person mellan 5 och 25 gånger per dag (min affärspartner på annan ort) tycker att det är för många steg att:

* Starta Entourage
* Öppna ett nytt epostmeddelande via kommando + N
* Skriva de fyra första bokstäverna i namnet
* Välja rätt person med piltangenterna
* Trycka tab fyra gånger
* Fylla i ett ärende
* Skriva "Hejsan!"
* Trycka ny rad två gånger

...innan jag kan skriva resten av meddelandet. Jag kan åstadkomma allt detta genom att trycka ett snabbkommando, (tex CTRL+S) med hjälp av Applescript.

Att starta ett script
Jag kan spara detta script på flera ställen för att göra det lätt att starta det. Jag kan spara det som en liten programvara i Applications/Program-mappen, jag kan lägga det i dockan, jag kan ha ett alias på skrivbordet, jag kan lägga ett alias i en Script-meny som finns brevid klockan längst upp till höger på skärmen och jag kan ha det i en scriptmeny inuti Entourage, där det reagerar på snabbkommandon.

Kommentarer i Applescript
Man skall kommentera sina script, i Applescript kan du skriva kommenterar på två sätt.

Om du skriver -- i en rad eller i början av den, så kommer allt efter -- att hoppas över av Applescript fram till att nästa rad börjar. Så en kort kommentar på en rad skriver man alltså med --

set Account_Name to "Intelligent Mammals.se" -- Kontonamnet i Entourage

Vill du skriva en kommentar på flera rader skriver du en inledande (* och en avslutande *). Allt mellan (* och *) är kommentar och hoppas över av Applescript.

(*
Nu skapar vi ett nytt meddelande med de variabler vi
satte längre upp i scriptet.
*)

ScriptEditor
I Mac OS X heter programmet för att skapa Applescript Script Editor och finns i mappen Applications/Program.

Starta det programmet och börja skriva (eller kopiera det färdiga manuset längst ner).

Passa också på att klicka på programmets ikon i dockan med CTRL-tangenten intryckt och välj "Behåll i dock".

Scriptets uppbyggnad - SET
Vi börjar med att skapa lite variabler. Det är ganska snyggt om man anger sina variabler i början av scriptet, då blir det lättare att ändra sådant som skall vara likadant i hela scriptet eller om man vill göra om scriptet för att skicka epost till en ny person. Här är de Applescript-kommandon som skapar våra variabler.

[I]set Account_Name to "Intelligent Mammals.se" -- Kontonamnet i Entourage
set To_Email to "Ola_Remove_Me_@intelligentmammals.se"
set To_Name to "Ola Andersson"
(*
Notera placeringen av citat-tecknet två rader längre ner, det är för att
få två blankrader i meddelandet. Man kan skriva \r om man vill också.
*)
set email_subject to "XXXX"
set email_message to "Hejsan Ola!

"[I]

Scriptets uppbyggnad - TELL
I Applescript så skriver man Tell för att ange vilket program man vill rikta ett kommando till. Activate förstår alla program och det betyder att om de inte är igång så skall de starta, så när vi börjar skriva scriptet så börjar vi med detta:

tell application "Microsoft Entourage"
activate
end tell

Detta får Microsoft Entourage att starta.

Om du råkar stava fel på namnet på din programvara, dvs anger ett namn på en applikation som inte finns, så kommer Manusredigeraren att fråga dig var applikationen ligger. Du pekar då på den och sedan ändrar Manusredigeraren i manuset så att det står rätt.

Scriptets uppbyggnad - MAKE
De flesta program förstår ordet make och det brukar vara det man skriver för att skapa ett nytt dokument i programmet. Det som skiljer sig åt är vad man skriver efteråt för vissa program kan nämligen skapa flera olika sorters objekt. Entourage kan tex skapa både epostmeddelanden, kontakter, evenemang och anteckningar. Claris Works, för att ta ett annat exempel, kan skapa flera olika typer av dokument. Programmet Finder kan skapa både mappar, filer och alias.

Så här står det i ordlistan för Microsoft Entourage
make
new type class -- the class of the new element.
at anything -- the location at which to insert the element
[with data anything] -- the initial data for the element
[with properties record] -- the initial values for
-- the properties of the element
Result: reference -- to the new object(s)


Ordlistan för Microsoft Entourage?
För att ta reda på vad man kan skapa i ett program så använder man sig av ordlistan för programmet. Enklaste sättet att öppna ordlistan för ett visst program som man har i dockan är att klicka på ikonen av programmet i dockan när man har kommando-tangenten intryckt. Då kommer en mapp att öppnas, den innehåller programikonen för det programmet. Den ikonen drar du och släpper på ikonen för Script Editor (som du väl också har i dockan) och vips öppnas ordlistan för det programmet. Ordlistan är alltså en lista över kommandon och parametrar som kan sättas av Applescript i ett visst program.

Ordlistan är inte så bra för nybörjare, men när du är mer varm i kläderna med Applescript så är det lättare att förstå den och se vad man skall leta efter.

Skapa nytt fönster
Vårt kommando för att skapa ett epostmeddelande skriver vi efter activate, så här:
tell application "Microsoft Entourage"
activate
make new draft window with properties {account:POP account Account_Name,
subject:email_subject, content:email_message, recipient:{{address:{display
name:To_Name, address:To_Email}, recipient type:to recipient, delivery
status:unsent}}}

Jag kunde valt att skapa ett meddelande i Ut-korgen, klart att skickas med:

make new outgoing message at the out box folder with properties {account:POP
account Account_Name, subject:email_subject, content:email_message,
recipient:{{address:{display name:To_Name, address:To_Email}, recipient type:to
recipient, delivery status:unsent}}}

... men eftersom jag ju vill skriva meddelandet själv så är det bättre med "make new draft window" som öppnar ett nytt fönster istället.

Nu skall jag förklara ovanstående:

{} - Listor
I Applescript så kan man skapa en lista av saker genom att tilldela en variabel ett antal objekt i en lista:

set pannkaksrecept to {"mjöl", "mjölk", "ägg", "salt", "smör"}

pannkaksrecept är alltså namnet på variabeln och det mellan måsvingarna är sakerna i listan.

En annan sak som Applescript håller reda på är data-typer, du har tex text, nummer, datum och alias som separata datatyper bland annat. Det är viktigt att hålla reda på datatypen man använder sig av då de flesta kommandon förväntar sig data av en viss typ och de flesta funktioner lämnar ifrån sig data av en viss typ. Ibland är det nödvändigt att konvertera en typ av data till en annan, men mer om det en annan gång.

En lista är också en datatyp, men varje sak i en lista kan ha sin egen datatyp. Jag kan alltså i samma lista lagra både texter, nummer och även andra listor. Ibland förväntar sig ett kommando en lista på sk "properties" som är ett antal parametrar som ett objekt skall ha.

Ett nytt meddelande-fönster, som vi ser kommandot för ovan, är ett objekt och det objektet har parametrar (properties) som tex vilket konto det hör till, en mottagare, en ärenderad och lite annat. Dessa parametrar tilldelar vi fönstret genom att skriva en lista över dessa. En del av parametrarna i listan är listor, som tex recipient/mottagare.

Parametrarna för ett nytt epostmeddelande
{account:POP account Account_Name, subject:email_subject, content:email_message, recipient:{{address:{display name:To_Name, address:To_Email}, recipient type:to recipient, delivery status:unsent}}}

Så såg det ut och här är en förklaring:

account - typ och namn på det konto som du vill skicka meddelandet med.
subject - ärenderaden
content - innehållet i meddelandet
recipient - här är en lista i en lista, en mottagare består nämligen av en adress, som är en lista i sig, med namn och en adress som saker i den listan. Vidare anger man även i mottagarlistan typ av mottagare och om det är skickat eller inte till denna mottagare.

Resultatet!
Ett make-kommando brukar lämna ifrån sig ett resultat och det kan man läsa av och tilldela en variabel för att senare i scriptet kunna referera till det nyskapade objekt och kanske göra andra saker med det, som tex flytta på det, sätta fler properties eller göra något annat. Vi behöver bara tilldela en variabel resultatet, så har vi skapat en variabel vi kan använda för att referea till meddelandet vi just skapade.

set newmessage to the result

Signaturen!
Jag vill avsluta manuset med att sätta rätt signatur på mitt meddelande, för även om jag angivit rätt konto och det kontot har en standard-signatur, så dyker inte den upp i mitt nya meddelande.

Om man kollar i ordlistan för Microsoft Entourage på "draft window" så står det att det finns två properties som har med signaturen på ett meddelande att göra. Så man borde kunna sätta dessa parametrar, men hur jag än provar att skriva detta så vill det sig inte. Så istället så löste jag detta med en workaround, dvs ett annat sätt att göra samma sak. Jag sätter den parametern (vilken signatur meddelandet skall ha) med hjälp av den referens till det nya meddelandet jag just skapat genom att skriva:

set the other signature choice of newmessage to signature id 27

Här följer en förklaring av ovanstående.
set - kommandot för att tilldela en parameter eller en variabel ett värde
the other signature choice - namnet på parametern
of - jag anger att det jag givit namnet på hör till ett visst objekt
newmessage - variabeln som innehåller en referens till objektet
to - värdet jag vill tilldela följer efter to
signature id 27 - signaturen med ID 27 som jag sparat bland signaturer i min Entourage

Signature ID 27?
Jag har mer än sextio signaturer lagrade i min Entourage, du kanske inte är lika knäpp som jag, men om du vill ha en viss signatur så måste du referea till den genom att ta reda på vilket ID den har.

Ett enkelt sätt att få fram en lista på alla signaturers innehåll och vilket ID de har är följande snutt du kan klistra in i ett nytt manus-fönster.

tell application "Microsoft Entourage"
set allsigs to ""
repeat with sig in (get signatures)
set allsigs to allsigs & "ID: " & (ID of sig) & " " & (content of sig) & "\r\r"
end repeat
allsigs
end tell

Sedan skriver du bara rätt siffra på rätt ställe i ditt manus.

Det kompletta scriptet
(*
----------------------------------------------------------------
Maila Ola
----------------------------------------------------------------
Av: Ola_Remove_Me_@intelligentmammals.se", 2003-07-03
http://www.intelligentmammals.se/

Detta manus är omgjort för Entourage i Mac OS X, 2003-07-03

Detta manus gör ett nytt mail i Entourage till Ola_Remove_Me_@intelligentmammals.se

För att ta reda på vilket id som en viss signatur har, använd:

tell application "Microsoft Entourage"
set allsigs to ""
repeat with sig in (get signatures)
set allsigs to allsigs & "ID: " & (ID of sig) & " " & (content of sig) & "

"
end repeat
allsigs
end tell

*)

set Account_Name to "Intelligent Mammals.se" -- Kontonamnet i Entourage
set To_Email to "Ola_Remove_Me_@intelligentmammals.se""
set To_Name to "Ola Andersson"
-- Notera placeringen av citat-tecknet två rader längre ner, det är för att få två blankrader i
-- meddelandet. Man kan skriva \r om man vill också.
set email_subject to "XXXX"
set email_message to "Hejsan Stefan!\r\r"
(*
Nu skapar vi ett nytt meddelande med de variabler vi
satte längre upp i scriptet.
*)
tell application "Microsoft Entourage"
activate
make new draft window with properties {account:POP account Account_Name, subject:email_subject, content:email_message, recipient:{{address:{display name:To_Name, address:To_Email}, recipient type:to recipient, delivery status:unsent}}}
-- Här fixar vi en referens på meddelandet vi just skapade, så att vi kan referera till det senare:
set newmessage to the result
-- Här sätter vi signaturen, det går visst inte att göra i samma rad som make new draft...
set the other signature choice of newmessage to signature id 27
end tell

Lycka till!

Om du får problem med detta script så skriv en rad i denna tråd så hjälper jag eller någon annan dig.

Det står alla fritt att hjälpa till eller komma med frågor och kommentarer.

Jag återkommer med instruktioner för hur man sparar detta manus på rätt ställen.

/Ola

Senast redigerat 2003-07-04 03:00

När du testat scriptet genom att trycka på play-knappen i Script Editor/Manusredigeraren så kan du nu spara scriptet på lite olika ställen för att det skall vara lätt att starta det:

Script-menyn i Entourage
Genom att döpa scriptet till:

"Maila Ola\cO" när du döper det och sedan spara det som kompilerat manus i mappen:

Macintosh HD: Users: [ditt namn]: Documents: Microsoft användardata: Entourage Script Menu Items:"

Filnamet innehåller alltså ett sk "backslash" - ett bakåtlutande snedstreck följt av ett c och sedan direkt efter det den tangenten du vill ha ditt snabbkommando på.

Efter en liten stund kan du klicka i script-menyn, så ser du ditt script där.

Du kan även trycka CTRL+O i mitt exempel ovan för att aktivera scriptet.

Spara det som en egen applikation
I Script Editor/Manusredigeraren så väljer du "Spara som".

Under format väljer du: Program.

Kryssa för "Visa inte startruta" och spara sedan med vilket namn du vill, var du vill, förslagsvis på skrivbordet eller i din mapp, eller i applikationsmappen.

Nästa steg är att lägga alias av den applikation du just skapade på olika ställen. I dockan tex, eller på skrivbordet eller i...

Scriptsmenyn i Mac OS X
Du kanske inte har en liten script-symbol brevid din klocka i menyraden, längst upp till höger på skärmn?

Den får du genom att:
* Öppna mappen Applescript i mappen Program
* Dubbelklicka på Script Menu.menu

Då bör det dyka upp en liten meny på det stället jag beskrev.

Du kan sedan öppna den mapp där du kan lägga script du vill kunna komma åt inifrån alla program genom att i Scripts-menyn välja "Open Scripts Folder".

Den ligger här:

Macintosh HD: Users: [ditt namn]: Library: Scripts

Placera ett alias av ditt script här, så kan du starta det oavsett i vilket program du är.

Lycka till!

/Ola

  • Medlem
  • International user
  • 2003-07-05 19:58

tjena Ola,

Kanonbra script! Har precis lagt in ett för email till tjejen.

En fråga. Går det att fixa så kortkommandot använder en funktionstangent? Typ bara F1 istället för ctrl+O

Verkar inte som kortkommandon funkar när man lägger det i Finder-menyn... synd...

  • Medlem
  • Stockholm
  • 2003-07-06 18:31

Taz,

allas vår hjälte!:D

Vänligen,Ylan

OM man istället vill ha ett action-script kopplat till en mapp som motsvarar 1 motagare... går det att fixa ihop med antingen "Mail.app" eller "Entourage"... tänkte att man bara kunde släppa filer/bilagor på mappen och vips så åker den iväg till motagaren.

Olle

  • Medlem
  • International user
  • 2003-07-06 20:08
Citat:

Skrevs ursprungligen av Olle@mac.com
OM man istället vill ha ett action-script kopplat till en mapp som motsvarar 1 motagare... går det att fixa ihop med antingen "Mail.app" eller "Entourage"... tänkte att man bara kunde släppa filer/bilagor på mappen och vips så åker den iväg till motagaren.

Olle

Går nog lättare att göra med en en droplet, men jag försökte mig iaf på att göra om det till ett folderactionscript... funkar dock inte av ngn anledning

set Account_Name to "mb" -- Kontonamnet i Entourage
set To_Email to "nn@xxx.se"
set To_Name to "nn nn"
-- Notera placeringen av citat-tecknet två rader längre ner, det är för att få två blankrader i
-- meddelandet. Man kan skriva \r om man vill också.
set email_subject to "Subject"
set email_message to "Hej!

"

(*
Nu skapar vi ett nytt meddelande med de variabler vi
satte längre upp i scriptet.
*)

on adding folder items to this_folder after receiving added_items
-- Snodde denna rad från ett folder action script som kommer med OS X
try

tell application "Microsoft Entourage"
activate
make new draft window with properties {account:POP account Account_Name, subject:email_subject, content:email_message, recipient:{{address:{display name:To_Name, address:To_Email}, recipient type:to recipient, delivery status:unsent}}}
-- Här fixar vi en referens på meddelandet vi just skapade, så att vi kan referera till det senare:
set newmessage to the result

(make attachment newmessage with added_items) as alias
-- Detta är mitt lilla försök att lägga till ett attachment
end tell
end try
end adding folder items to
-- Scriptet funkar dock inte Måste ha missat ngt...

Senast redigerat 2003-07-09 15:42
  • Medlem
  • Stockholm
  • 2003-07-07 00:21

Kolla raden:
on adding folder items to this_folder

this_folder är inte definierad!

Vänligen, Ylan

  • Medlem
  • Stockholm
  • 2003-07-07 01:11
Citat:

Skrevs ursprungligen av Ylan
Kolla raden:
on adding folder items to this_folder

this_folder är inte definierad!

Sorry, jag hade inte förstått hur skriptbara foldrar fungerar:rolleyes:

Vänligen, Ylan

  • Medlem
  • International user
  • 2003-07-07 01:14
Citat:

Skrevs ursprungligen av Ylan
Kolla raden:
on adding folder items to this_folder

this_folder är inte definierad!

hmm... Det är den inte i Apple's script heller. Jag trodde att this_folder är den folder som scriptet kopplas till.

Grymt bra instruktion Taz!

Sitter själv och fifflar lite med QuicKeys X2, och jag kan bara konstatera att det i QuicKeys är 1000 gånger enklare att göra precis samma sak. Men då får man iofs punga upp med ca 1000 kr för licensen först

/M

  • Medlem
  • Stockholm
  • 2003-07-07 01:26
Citat:

Skrevs ursprungligen av mattan
hmm... Det är den inte i Apple's script heller. Jag trodde att this_folder är den folder som scriptet kopplas till.

Så förstår jag det också nu. Jag har inte använt det än.

Har du slagit på "folder actions"?

Vänligen, Ylan

  • Medlem
  • International user
  • 2003-07-07 04:09
Citat:

Skrevs ursprungligen av Ylan
Har du slagit på "folder actions"?

Jepp, det gör man när man attachar scriptet.

Hmm, scriptet skall väl vara i compiled script format eller måste man göra en app?

Jag återkommer förhoppningsvis i morgon med goda råd och hjälp för vidareutveckling av detta script. Tack för era positiva kommentarer, det uppskattas!

/Ola

  • Medlem
  • International user
  • 2003-07-09 15:46

Nu har jag hittat problemet. Givetvis var det min hemmasnickrade sats för att lägga till ett attachment som inte fungerade. Så här det ut:

-- Scriptet funkar bara med en fil än så länge. Måste nog lägga till ngn loop för att fixa flera filer.

on adding folder items to this_folder after receiving this_item -- Snodde denna rad från ett folder action script som kommer med OS X
try
-- Jag la variablerna här eftersom scriptet klagade på att de inte var definierade
set Account_Name to "mb" -- Kontonamnet i Entourage
set To_Email to "nn@xxx.se"
set To_Name to "nn nn"
-- Notera placeringen av citat-tecknet två rader längre ner, det är för att få två blankrader i
-- meddelandet. Man kan skriva \r om man vill också.
set email_subject to "Subject"
set email_message to "Hej!

"
tell application "Microsoft Entourage"
activate
make new draft window with properties {account:POP account Account_Name, subject:email_subject, content:email_message, recipient:{{address:{display name:To_Name, address:To_Email}, recipient type:to recipient, delivery status:unsent}}}
-- Här fixar vi en referens på meddelandet vi just skapade, så att vi kan referera till det senare:
set newmessage to the result
-- Nu lägger vi till attachmentet
make new attachment at newmessage with properties {file:this_item}
end tell
end try
end adding folder items to

Om man vill ha en droplet istället. Så kan man byta ut "adding folder items to this_folder after receiving" mot "open" och sen ha "end open" sist. Spara som application.

  • Medlem
  • International user
  • 2003-07-09 15:53

hehe, var ju rätt lätt att fixa så det klarade flera filer. Använd denna loop för att lägga till filerna istället.

set newmessage to the result
repeat with this_item in these_items -- Nu lägger vi till filerna som attachment en och en
make new attachment at newmessage with properties {file:this_item}
end repeat

Märkte att scriptet drar igång även när man tar ut grejer ur mappen. Verkar som att den tolkar ändringar i den osynliga ds_store-filen som nya filer.... hur fixar man det?

En gammal tråd...

Hoppas ngn läser detta och berättar om man enkelt kan modifiera skriptet så att det funkar med mail. Jag kan inget om programmering men sånt här verkar mkt användbart.

  • Medlem
  • Stockholm
  • 2005-08-10 11:12
Ursprungligen av Islander:

Hoppas ngn läser detta och berättar om man enkelt kan modifiera skriptet så att det funkar med mail. Jag kan inget om programmering men sånt här verkar mkt användbart.

Kör du Tiger (10.4.x) har du ju tillgång till Automator som är ett visuelt grässnitt mot Applescript. Testa om du får tillfälle!

1
Bevaka tråden