Mail: De naam van de afzender uitspreken
Met behulp van de optie 'Regels' in de standaard OS X Mail applicatie is het mogelijk om bepaalde acties uit te voeren wanneer er nieuwe e-mail wordt ontvangen. Je kunt bijvoorbeeld een e-mail kopiëren of verplaatsen naar een andere (sub)map, voorzien van een kleur of een applescript starten.
Wanneer je de laatste optie gebruikt dan zijn de mogelijkheden vanzelfsprekend oneindig. Zo kun je bijvoorbeeld de naam van de afzender laten uitspreken op het moment dat je een nieuwe e-mail hebt ontvangen.
Start de Applescript-editor en plak daarin het onderstaande script, bewaar dit script op je harddisk. Eventueel kun je het script op fouten controleren door op de knop 'Compileer' te klikken.
on perform_mail_action(info)
tell application "Mail"
set theMessages to |SelectedMessages| of info
repeat with thisMessage in theMessages
set AppleScript's text item delimiters to {""}
set thisSender to sender of thisMessage as string
set quotepos to offset of """ in thisSender
if (quotepos is not 0) then
set thisSender to (text items (quotepos + 1) through -1) ¬
of thisSender as string
set quotepos to offset of """ in thisSender
if (quotepos is not 0) then
set thisSender to (text items 1 through (quotepos - 1)) ¬
of thisSender as string
end if
else
set atpos to offset of "@" in thisSender
if (atpos is not 0) then
set thisSender to (text items 1 through (atpos - 1)) ¬
of thisSender as string
end if
set brkpos to offset of "<" in thisSender
if (brkpos is not 0) then
set thisSender to (text items (brkpos + 1) through -1) ¬
of thisSender as string
end if
end if
tell application "Finder" to say "Nieuwe e-mail van " & thisSender
end repeat
end tell
end perform_mail_action
Ga naar de Mail app, Voorkeuren ▸ Regels en voeg een nieuwe regel toe. Voeg bij de taken 'Voer AppleScript uit' toe en selecteer het applescript dat je eerder hebt gemaakt.
Vanaf dit moment zal de naam van de afzender door je Mac worden uitgesproken wanneer je nieuwe e-mail ontvangt. Wanneer je de Nederlandse stem 'xander' hebt geïnstalleerd op je Mac dan kun je de vierde lijn vanonder wijzigen in:
tell application "Finder" to say "Nieuwe email van" & thisSender using "xander"
Screencast:
Auteur | Richard IJzermans | |
Bijgewerkt | 22/04/2013 09:23 | |
Categorie | macOS | |
Reacties
Kan dit ook onder iOS met de iphone of ipad? Dat zou aardig wat beter zijn dan het geluidje dat je er kunt aan linken.
Na upgrade naar mountain lino werkt dit niet meer !!! iemand een idee ?
Tjonge, dat was makkelijk. Mike, hij doet het perfect. Bedankt!
Gert, fout al gevonden. Je hebt 1 ) vergeten in de regel. De 10e regel moet zijn: ‘set thisSender to (text items 1 through (quotepos -1))’ ipv ‘set thisSender to (text items 1 through (quotepos -1)’ , vandaar de syntax-fout.
Gert, je kunt de werkende script hier downloaden: http://db.tt/lFXnY50k . Ik kon zo snel niet vinden wat er precies fout zit, bij mij werkt het wel dus lijkt het me handiger dat je het script gebruiksklaar kunt downloaden.
Mike, ik voer het volgende in
on perform_mail_action(info)
tell application “Mail”
set theMessages to |SelectedMessages| of info
repeat with thisMessage in theMessages
set AppleScript’s text item delimiters to {“”}
set thisSender to sender of thisMessage as string
set thisSubject to sender of thisMessage as string
set quotepos to offset of “<" in thisSender
if (quotepos is not 0) then
set thisSender to (text items 1 through (quotepos -1) ¬
of thisSender as string (!!!)
else
set atpos to offset of "@" in thisSender
if (atpos is not 0) then
set thisSender to (text items 1 through (atpos – 1)) ¬
of thisSender as string
end if
end if
tell application "Finder" to say "Nieuwe e-mail van " & "Met als onderwerp " & thisSubject using "xander"
end repeat
end tell
end perform_mail_action
maar krijg een fout (Syntaxisfout: Verwachtte "," maar vond regeleinde.)
De plek van de fout heb ik aangegeven als (!!!)
Iemand een suggestie hoe dit op te lossen? Het zou tof zijn wanneer het zou werken
Marc, jouw versie doet het idd ‘beter’ dan die van Richard, als je de — vervangt door -. Ik heb jouw versie aangepast naar mijn wensen dat ook het onderwerp wordt verteld, krijg je dit resultaat:
on perform_mail_action(info)
tell application “Mail”
set theMessages to |SelectedMessages| of info
repeat with thisMessage in theMessages
set AppleScript’s text item delimiters to {“”}
set thisSender to sender of thisMessage as string
set thisSubject to subject of thisMessage as string
set quotepos to offset of “<" in thisSender
if (quotepos is not 0) then
set thisSender to (text items 1 through (quotepos – 1)) ¬
of thisSender as string
else
set atpos to offset of "@" in thisSender
if (atpos is not 0) then
set thisSender to (text items 1 through (atpos – 1)) ¬
of thisSender as string
end if
end if
tell application "Finder" to say "Nieuwe e-mail van " & thisSender & "Met als onderwerp " & thisSubject using "xander"
end repeat
end tell
end perform_mail_action
Hartstikke bedankt!
oh ja, als je een foutmelding krijgt op ‘–‘ als je de eerste hebt gekopieerd of op ‘—’ als je de tweede hebt gekopieerd, dan moet je dit gewoon veranderen in 1 min-teken.
Als je alles van ‘on perform’ t/m ‘end perform’ kopieert en plakt in Apple-script in een nieuw script, wordt alles vanzelf netjes gezet als je op compileer drukt.
Overigens mag deze regel / vraag ‘if (atpos is not 0) then’ én 1 regel met ‘end if’ er rustig tussenuit. Deze vraag is namelijk overbodig bij een emailadres.
spaties aan het begin van een regel dus ook niet :( sorry mensen.
2e poging, tabs komen niet over:
on perform_mail_action(info)
tell application “Mail”
set theMessages to |SelectedMessages| of info
repeat with thisMessage in theMessages
set AppleScript’s text item delimiters to {“”}
set thisSender to sender of thisMessage as string
set quotepos to offset of “<" in thisSender
if (quotepos is not 0) then
set thisSender to (text items 1 through (quotepos — 1)) ¬
of thisSender as string
else
set atpos to offset of "@" in thisSender
if (atpos is not 0) then
set thisSender to (text items 1 through (atpos — 1)) ¬
of thisSender as string
end if
end if
tell application "Finder" to say "Nieuwe e-mail van " & thisSender using "xander"
end repeat
end tell
end perform_mail_action
Het voorbeeld script spreekt het e-mail adres tot aan het “@” uit.
Onderstaande aangepaste versie spreekt de weergave naam uit.
Ik begrijp trouwens ook niet waarom er in het voorbeeld script in het eerste deel naar de positie van “/” wordt gezocht. Een typisch e-mail adres heeft het volgende formaat:
Mijn Naam
Het aangepaste script spreekt dus het deel tot de “<" uit, en als er geen "<" voorkomt, het deel tot "@"
on perform_mail_action(info)
tell application "Mail"
set theMessages to |SelectedMessages| of info
repeat with thisMessage in theMessages
set AppleScript's text item delimiters to {""}
set thisSender to sender of thisMessage as string
set quotepos to offset of "<" in thisSender
if (quotepos is not 0) then
set thisSender to (text items 1 through (quotepos – 1)) ¬
of thisSender as string
else
set atpos to offset of "@" in thisSender
if (atpos is not 0) then
set thisSender to (text items 1 through (atpos – 1)) ¬
of thisSender as string
end if
end if
tell application "Finder" to say "Nieuwe e-mail van " & thisSender using "xander"
end repeat
end tell
end perform_mail_action
whaaaaah ze noemt eerst al m’n ongelezen mails op :o
Antwoord gevonden op mijn vraag: om ook het onderwerp uit te laten spreken moet je onder de 6e regel van boven (‘set thisSender to sender of thisMessage as string’) de regel:
set thisOnderwerp to subject of thisMessage as string
toevoegen. Daarna de 4e regel van onderen (’tell application “Finder” to say “Nieuwe e-mail van ” & thisSender’) vervangen door:
tell application “Finder” to say “Nieuwe e-mail van ” & thisSender & “Met als onderwerp” & thisOnderwerp using “claire”
waarbij je “claire” kunt vervangen door de door jou gewenste stem.
Was even puzzelen en denken en proberen maar ik vind dit zo wat leuker en makkelijker!
Toch nog een vraagje: hoe kan ik ook het onderwerp van het mailtje uit laten spreken? Wat moet ik dan nog toevoegen aan het script? Ik ben nl niet zo thuis in AppleScript…
Dit is wel cool, beter als ‘You’ve got mail’ die ik al sinds mensenheugenis gebruik. Ik heb alleen Claire ingesteld als voice ipv Xander (dus in de regel “tell application “Finder” to say “Nieuwe email van” & thisSender using “xander” ” vervang je “xander” door “claire”).
Dit werkt prachtig! Ik gebruik ‘claire’ als secretaresse ;-)
Handig als je druk bent met iets maar je verwacht een belangrijk mailtje…….dan hebben we het niet eens over hoe stoer het staat haha ;-)
thx
echt gaaf… nooit aan gedacht