Menu

25 december 2011

ScreencastMail: 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:




Gerelateerde tips:




Reacties


  • Marcel Kraan 25 december 2011 om 11:18

    echt gaaf… nooit aan gedacht

  • mike 25 december 2011 om 11:50

    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

  • franklin 25 december 2011 om 12:31

    Dit werkt prachtig! Ik gebruik ‘claire’ als secretaresse ;-)

  • Mike van Vught 25 december 2011 om 12:40

    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”).

  • Mike van Vught 25 december 2011 om 12:55

    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…

  • Mike van Vught 25 december 2011 om 13:04

    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!

  • JesseesseJ 25 december 2011 om 13:47

    whaaaaah ze noemt eerst al m’n ongelezen mails op :o

  • marcnij 26 december 2011 om 7:13

    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

  • marcnij 26 december 2011 om 7:16

    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

  • marcnij 26 december 2011 om 7:17

    spaties aan het begin van een regel dus ook niet :( sorry mensen.

  • Funske 26 december 2011 om 11:34

    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.

  • Funske 26 december 2011 om 11:36

    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.

  • Mike van Vught 26 december 2011 om 13:35

    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!

  • Gert 27 december 2011 om 8:57

    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

  • Mike van Vught 27 december 2011 om 13:10

    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 van Vught 27 december 2011 om 13:13

    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 27 december 2011 om 14:07

    Tjonge, dat was makkelijk. Mike, hij doet het perfect. Bedankt!

  • Danny 4 november 2012 om 10:50

    Na upgrade naar mountain lino werkt dit niet meer !!! iemand een idee ?

  • Danny 28 maart 2013 om 17:27

    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.

Een reactie toevoegen: