Apple Mail nutzt glaube ich seit Leopard nicht mehr eine fette mbox Datei sondern einzelne .emlx Dateien zum speichern der abgerufenen Emails. So können die Dateien schön einzeln indiziert (Spotlight) werden und können auch recht leicht kopiert werden (TimeMachine). Eine solche EMLX-Datei lässt sich über Quicklook oder Apple Mail betrachten und beinhaltet sogar die in der Email enthaltenen Anhänge.Dummerweise kann man via AppleScript nicht direkt den Speicherort der Email abfragen, aber da die emlx-Datei nach der ID der Email benannt ist, kann man sie recht leicht im entsprechenden Account-Ordner finden.
Das tut dieses Skript also, es sucht sich die emlx-Dateien der ausgewählten Emails kopiert diese auf den Schreibtisch…
Ein Grund für den regen Gebrauch von Wildcards im find-Befehl ist die Tatsache, dass besonder große Emails aufgesplittet werden in .emlx und .emlxpart Dateien. Gemeinsamer Nenner ist aber immer die ID, mit der der Dateiname stets beginnt.
--hubionmac.com 29.12.2010 EMLX-Dateien ausgewählter Emails in einen Order (Saved_Mails(Acountname) auf dem Schreibtisch kopieren... (4 Chris_Zuerich)
-- hubionmac.com 17.03.2012 Nun bereiten wohl auch lokale Email-Ordner dem Skript kein Kopfzerbrechen mehr
--auswahl aus Apple Mail abfragen
set mymails to my getSelection()
repeat with mymail in mymails
tell application "Mail"
--das Verzeichnis des Email Accounts ausfindig machen
try
set accountDir to quoted form of POSIX path of ((account directory of account of mailbox of mymail) as alias)
on error --ist wohl ein lokaler Mail-Ordner
set accountDir to "~/Library/Mail/"
end try
try
set account_name to (name of account of mailbox of mymail) as rich text
on error --ist wohl ein lokaler Mail-Ordner
set account_name to address of to recipient 1 of mymail
repeat with a in every account
if email addresses of a contains account_name then
set account_name to name of a
exit repeat
end if
end repeat
end try
tell application "Finder" to set temp_dir to quoted form of (POSIX path of (desktop as alias) & "Saved_Mails (" & account_name & ")/")
try
do shell script "mkdir " & temp_dir
end try
--in dem Account-Verzeichnis nach der der Email-Datei suchen und diese kopieren...
set myid to id of mymail
do shell script "find " & accountDir & " -name " & myid & "*.emlx* -exec cp {} " & temp_dir & " \\;"
end tell
end repeat
on getSelection()
tell application "Mail"
set a to selection
if (count of a) < 1 then
error "Eine Mitteilung muss ausgewählt sein."
end if
return a
end tell
end getSelection
28.11.2012/13.05.2013: Leicht angepasste Version, die das Empfangsdatum und den Betreff mit in den Dateinamen der emlx-Datei schreibt:
--hubionmac.com 13.05.2013 kleiner BugFix... hatte vergessen temp_dir zu quoten ;-)
--hubionmac.com 29.12.2010 EMLX-Dateien ausgewählter Emails in einen Order (Saved_Mails(Acountname) auf dem Schreibtisch kopieren... (4 Chris_Zuerich)
-- hubionmac.com 17.03.2012 Nun bereiten wohl auch lokale Email-Ordner dem Skript kein Kopfzerbrechen mehr
--auswahl aus Apple Mail abfragen
set mymails to my getSelection()
repeat with mymail in mymails
tell application "Mail"
set thesubject to subject of mymail
set thesubject to my replace_chars(thesubject, "/", "-")
set thesubject to my replace_chars(thesubject, ":", "-")
set thedate to date received of mymail
set thedate to (year of thedate) & "-" & (month of thedate as integer) & "-" & (day of thedate) as rich text
--das Verzeichnis des Email Accounts ausfindig machen
try
set accountDir to quoted form of POSIX path of ((account directory of account of mailbox of mymail) as alias)
on error --ist wohl ein lokaler Mail-Ordner
set accountDir to "~/Library/Mail/"
end try
try
set account_name to (name of account of mailbox of mymail) as rich text
on error --ist wohl ein lokaler Mail-Ordner
set account_name to address of to recipient 1 of mymail
repeat with a in every account
if email addresses of a contains account_name then
set account_name to name of a
exit repeat
end if
end repeat
end try
tell application "Finder" to set temp_dir to (POSIX path of (desktop as alias) & "Saved_Mails (" & account_name & ")/.tmp/")
try
do shell script "mkdir -p " & quoted form of temp_dir
end try
--in dem Account-Verzeichnis nach der der Email-Datei suchen und diese kopieren...
set myid to id of mymail
do shell script "find " & accountDir & " -name " & myid & "*.emlx* -exec cp {} " & quoted form of temp_dir & " \\;"
end tell
tell application "Finder"
set thefiles to every item of (((temp_dir as POSIX file) as string) as alias)
repeat with thefile in thefiles
set name of thefile to (thedate & " - " & thesubject & " " & (name of thefile) as string)
end repeat
do shell script "cd " & quoted form of temp_dir & "; mv ./* ../"
end tell
end repeat
on getSelection()
tell application "Mail"
set a to selection
if (count of a) < 1 then
error "Eine Mitteilung muss ausgewählt sein."
end if
return a
end tell
end getSelection
on replace_chars(this_text, search_string, replacement_string)
if this_text contains the search_string then
set od to AppleScript's text item delimiters
set AppleScript's text item delimiters to the search_string
set the item_list to every text item of this_text
set AppleScript's text item delimiters to the replacement_string
set this_text to the item_list as string
set AppleScript's text item delimiters to od
end if
return this_text
end replace_chars
Endlich, ich habe lange nach seinem script gesucht!!! Haben Sie auch eine Möglichkeit die Betreffzeile und das Maildatum mit in den Dateinamen zu schreiben. Ich habe leider keine Ahnung wie das funktioniert. Über eine Rückmeldung wäre ich sehr sehr dankbar. Gruß olaf kwade
Servus Olaf,
habe den Code etwas angepasst und mit ans Posting angehängt.
Gruß Hubi
Moin Hubi,
ich habe leider die folgende Fehlermeldung, weist du woran das liegen könnte. Gruß Olaf
Ergebnis:
error “Die Datei „Stardust HD:Users:kwade:Desktop:Saved_Mails (Kwade):.tmp:“ wurde nicht gefunden.” number -43 from “Stardust HD:Users:kwade:Desktop:Saved_Mails (Kwade):.tmp:”
Danach suche ich auch schon lange.
Jedoch: Schließe mich Olaf an. Habe auch den “tmp” Fehler. Gruß Hans
Unter welchem OS kommt es denn zu dem Fehler? 10.6, 10.7, 10.8?
Sorry, ganz vergessen: Es handelt sich um 10.8 (alle Updates eingespielt).
Ansonsten ist die Fehlermeldung gleich. Ok, ich habe es mit einer anderen Datei probiert, daher ist der Mittelteil anders. Danke vorab.
Ok, ich habe hier gerade kein 10.8 zum Testen… aber unter 10.7 gab es den gleichen Fehler…. war ein Pfad der nicht “gequoteted” war…. sollte jetzt funktionieren. Einfach noch einmal die letzte Code-Version kopieren.
Perfekt. Der Fehler ist bereinigt- Herzlichen Dank dafür.
Das Script läuft eigentlich nun durch. Leider habe ich nun einen neuen Fehler.
Wenn ich für einen Versuch ca. 30 Mails markiere und dann das Script starte bleibt das Script ab und zu hängen und bringt mit diesen Fehler:
Mail“ hat einen Fehler erhalten: „to recipient 1 of message id 46784 of mailbox "TEMP"“ kann nicht gelesen werden. Ungültiger Index.
Das Script selber bleibt an dieser Stelle hängen:
set account_name to address of to recipient 1 of mymail
und zwar bei dem wort “address”.Nun habe ich den Index neu aufgebaut und nach dem der Fehler wieder hochgekommen ist auch die Mails in einen anderen Ordner verschoben. Es handelt sich hierbei um einen lokalen Ordner.
Erste Prüfungen haben ergeben, dass es sich dabei immer um eMails handelt, die z.B. ein PDF im Anhang haben, welches zwar in der Mail eingebunden ist, jedoch zusätzlich in dem Ordner “Attchments” ist, der parallel zum Ordner Messages ist. Ich spreche hier nicht vom Download Ordner.
Bsp:
~/Library/Mail/V2/Mailboxes/TEMP.mbox/6D59FCF3-08EF-4157-9A2F-FC73387F083B/Data/6/4/Attachments/…
~/Library/Mail/V2/Mailboxes/TEMP.mbox/6D59FCF3-08EF-4157-9A2F-FC73387F083B/Data/6/4/Messages/…
Vielleicht kannst Du mit meinen Ergebnisse etwas anfangen. Herzlichen Dank vorab.
I needed to thank you for this good read!! I certainly loved every bit of it.
I have you book marked to check out new things you post…
Vielen Dank für das super Skript!
Ich habe es um die Uhrzeit ergänzt, möchte aber die “/” vermeiden und durch “-” ersetzen.
Kannst du das noch im Skript erweitern?
Grüße
Servus Thomas,
die Zeile
replace(DeineZeit, "/","-")
sollte es richten… Da die Funktion im Quellcode bereits vorhanden ist, überlasse ich Dir diese kleine Anpassung ;-)Hallo Hubi,
leider habe ich das erste mal mit Applescript zu tun und bin etwas überfordert ;)
Ich habe das Skript folgendermaßen erweitert:
set thesubject to subject of mymail
set thesubject to my replace_chars(thesubject, “/”, “-“)
set thesubject to my replace_chars(thesubject, “:”, “-“)
set thedate to date received of mymail
set thedate to (year of thedate) & “-” & (month of thedate as integer) & “-” & (day of thedate) & ” _ ” & (time string of thedate) as rich text
set thedate to my replace_chars(thedate, “/”, “-“)
Der Dateiname siehr dann z.B. foldendermaßen aus:
“2015-7-23 _ 12/10/31 – Hier steht der Betreff 2372.emlx”
Wie muss ich das Script erweitern, dass die Uhrtzeit der Mail z.b. so angezeigt wird:
“2015-7-23 _ 12-10-31 – Hier steht der Betreff 2372.emlx”
PS: Ist es möglich bei Auführung des Skripts nach dem Speicherort der Dateien zu fragen?
Hallo Hubi!
Wie kann man
1. die Mails als eml statt emlx speichern
und (wichtiger)
2. die mails beim speichern ungeteilt lassen?
Vielen Dank,
Wolfgang
Ich glaube dazu gibt es ein paar Ruby Scripte… ansonsten kannst Du eine Email aber auch einfach via Drag&Drop auf den Schreibtisch bewegen und siehe da… eine eml Datei =!)
Ja, klar…..
Sind aber ein paar hundert, und das Datum im Dateinamen ist ein cooles Feature.