25 december 2011

Mail: De naam van de afzender uitspreken

2 min leestijd

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:

info
Auteur Richard IJzermans
Bijgewerkt22/04/2013 09:23
Categorie macOS
Feedback Probleem melden
Delen 𝕏
  20 reacties

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.

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

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

    Beantwoorden
  • 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.

    Beantwoorden
  • 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.

    Beantwoorden
  • 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

    Beantwoorden
  • 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!

    Beantwoorden
  • 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.

    Beantwoorden
  • 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.

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

    Beantwoorden
  • 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

    Beantwoorden
  • 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

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

    Beantwoorden
  • 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!

    Beantwoorden
  • 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…

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

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

    Beantwoorden
  • 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

    Beantwoorden
  • echt gaaf… nooit aan gedacht

    Beantwoorden

Laat een reactie achter



Download gratis de appletips app
voor iPhone en iPad in de App Store