Mich hat heute eine Email erreicht, in der mir folgende Aufgabe beschrieben wurde (Ich hoffe mal Udo ist mit der Veröffentlichung einverstanden, hätte ich selber nicht besser formulieren können.):
Ich möchte eine Mail in Mail.app anklicken, danach sollte die Mail als pdf (wie unter Ablage Drucken PDF Als PDF sichern) in einem speziellen Ordner auf dem Schreibtisch mit folgendem Namen (Sendedatum, E-Mail-Adresse und Betreff aus Mail) gesichert werden. Der eventuelle Anhang sollte ebenfalls in diesem Ordner gesichert werden. Die Mail kann danach gelöscht werden.
zusammen mit dieser Aufgabenstellung und den ersten Code-Zeilen von Udo ist dann das hier entstanden (ich mag zwar GUI-Scripting nicht, aber das hier ROCKT ;-) ):
-- Save Mail as PDF and it's attachments to folder
-- Created by hubionmac (22.03.2010) requested by Udo
global frontmost_message_viewer
--this is the posix (unix) path of the folder you would like to store the messages in
tell application "Finder" to set mymailboxpath to POSIX path of ((desktop) as alias) & "mail_box/"
tell application "Mail"
set myselection to my check_message_viewer_and_return_selection()
--works only with one selected message for many reasons...
if (count of myselection) = 1 then
repeat with currentMail in myselection
set currentSender to my (getEmail(sender of currentMail))
set currentDateSent to my getDatestring(date sent of currentMail)
set currentSubject to my replace_chars(my replace_chars(subject of currentMail, ":", "-"), "/", ":") --Doppelpunkte kommen bei Dateinamen nicht so gut
set currentFolder2Store to mymailboxpath & currentDateSent & " " & currentSender & " " & currentSubject & "/" as rich text
my create_messagefolder(currentFolder2Store)
repeat with a in (every mail attachment of currentMail)
set current_a_name to name of a
set current_a_name to my checkname_with_pdf_suffix(current_a_name, (POSIX file currentFolder2Store) as alias, false)
save a in (((POSIX file currentFolder2Store) as rich text) & current_a_name) as rich text
end repeat
set desktop_pdf_name to my checkname_with_pdf_suffix("1.pdf", path to desktop, false)
set the clipboard to desktop_pdf_name
my print_current_mail_as_pdf()
repeat until (index of window of frontmost_message_viewer) is 1
delay 1
end repeat
my move_desktop_pdf(desktop_pdf_name, currentFolder2Store)
--open destination folder in finder ( did it really work? YES!! =))
do shell script "open " & quoted form of currentFolder2Store
end repeat
else
error "Sorry, ich kann zur Zeit nur mit einer ausgewählten Email hantieren"
end if
end tell
to move_desktop_pdf(desktop_pdf_name, currentFolder2Store)
--used to move the printed pdf to it's final destination
set finalname to checkname_with_pdf_suffix("__message.pdf", (POSIX file currentFolder2Store) as alias, false)
try
tell application "Finder" to do shell script "mv " & POSIX path of ((desktop) as alias) & quoted form of desktop_pdf_name & " " & quoted form of currentFolder2Store & quoted form of finalname
on error msg
error "Fehler beim Bewegen der gedruckten Nachricht: " & msg as text
end try
end move_desktop_pdf
to getEmail(mailstring)
-- if an email contains the senders name like "Mr.Bla <bla@bla.com>" then returns just the email not leaves the name
if mailstring contains "<" then
return (characters ((offset of "<" in mailstring) + 1) through ((offset of ">" in mailstring) - 1) of mailstring) as text
else
return mailstring
end if
end getEmail
to getDatestring(thedate)
--format a date to a string like 2010-03-22
set monthnum to characters -2 through -1 of ("0" & ((month of thedate) as integer)) as text
set daynum to characters -2 through -1 of ("0" & ((day of thedate) as integer)) as text
set yearnum to year of the thedate
return yearnum & "-" & monthnum & "-" & daynum as text
end getDatestring
to create_messagefolder(thepath_posix)
--I love mkdir -p, simple, short, easy to use
try
do shell script "mkdir -p " & quoted form of thepath_posix
on error msg
error msg
end try
end create_messagefolder
to replace_chars(this_text, search_string, replacement_string)
--this replaces characters
--used for folder and filenames, since a : must not be used for that
if this_text contains the search_string then
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 ""
end if
return this_text
end replace_chars
to checkname_with_pdf_suffix(n, D, looped)
--check if filename exists in D
-- so if "A File.pdf" exists it names it "A File 1.pdf","A File 2.pdf",...
tell application "Finder"
set thefiles to name of every item of (D as alias)
end tell
if thefiles contains n then
if looped = false then
set n to ((characters 1 through -5 of n) & " 1" & (characters -4 through -1 of n)) as text
my checkname_with_pdf_suffix(n, D, true)
else
set tmp to (last word of ((characters 1 through -5 of n) as text) as integer)
set tmpcount to (count of characters of (tmp as text)) + 5
set tmp to tmp + 1
set n to ((characters 1 through (-1 * tmpcount) of n) & tmp & (characters -4 through -1 of n)) as text
my checkname_with_pdf_suffix(n, D, true)
end if
else
return n
end if
end checkname_with_pdf_suffix
to print_current_mail_as_pdf()
--hopefully works on every mac in every language =)
-- GUI-Scripting is not the best way, but somehow the only way at the moment :-/
tell application "Mail"
activate
tell application "System Events"
tell process "Mail"
keystroke "p" using command down
set p to "false"
repeat with i from 1 to 10
if (count of every sheet of window 1) > 0 then
set p to "ready"
exit repeat
end if
delay 1
end repeat
if p = "ready" then
click menu button 1 of sheet 1 of window 1
delay 0.25
key code 125
key code 125
delay 0.25
keystroke return
delay 1
click text field 1 of window 1
keystroke "a" using command down
keystroke "v" using command down
keystroke "d" using command down
keystroke return
else
error "timeout"
end if
end tell
end tell
end tell
end print_current_mail_as_pdf
to check_message_viewer_and_return_selection()
-- check if frontmost window is a message viewer, otherwhise tell the user to RTFM!... wait there is no manual... don't care error change user!
tell application "Mail"
set frontmost_message_viewer to {}
repeat with i from 1 to count of every message viewer
if index of window of message viewer i = 1 then
set frontmost_message_viewer to message viewer i
exit repeat
end if
end repeat
if frontmost_message_viewer = {} then
error "Ist ja gar kein Message Viewer im Vordergrund, so kann ich einfach nicht arbeiten!"
else
return selection
end if
end tell
end check_message_viewer_and_return_selection
In habe mal auf das Löschen der Email verzichtet (das soll mal jeder lieber alleine rein schreiben), aber es scheint wunderbar zu funktionieren. Bin mal gespannt ob es auch bei anderen läuft...Updates vom 29.09.2010 und 27.09.2011:
- Auswahl von mehren Emails wird nun auch möglich
- Abgesendete Emails werden als solche erkannt und in einem anderen Verzeichnis mit Empfänger-Adresse im Ordnernamen gespeichert (req. by Andreas)
- Lokale Email-Ordner funktionieren nun auch mit dem Skript
-- Save Mail as PDF and it's attachments to folder
-- Created by hubionmac (29.09.2010)
-- 29.09.2010
-- -Auswahl von mehren Emails wird nun auch möglich
-- -Abgesendete Emails werden als solche erkannt und in einem anderen Verzeichnis mit Empfänger-Adresse im Ordnernamen gespeichert (req. by Andreas)
-- 27.09.2011 made it work with local mailboxes, too
global frontmost_message_viewer
--this is the posix (unix) path of the folder you would like to store the messages in
tell application "Finder" to set mymailboxpath to POSIX path of ((desktop) as alias) & "received_mail_box/"
tell application "Finder" to set mysentmailboxpath to POSIX path of ((desktop) as alias) & "sent_mail_box/"
tell application "Mail"
set myselection to my check_message_viewer_and_return_selection()
repeat with currentMail in myselection
open currentMail
set currentSender to my (getEmail(sender of currentMail))
set currentDateSent to my getDatestring(date sent of currentMail)
set currentSubject to my replace_chars(my replace_chars(subject of currentMail, ":", "-"), "/", ":") --Doppelpunkte kommen bei Dateinamen nicht so gut
if my is_in_sent_mail(currentMail) is true then
--if the file was sent FROM this email account
set sentToEmail to address of item 1 of to recipient of currentMail
set currentFolder2Store to mysentmailboxpath & sentToEmail & " " & currentDateSent & " " & currentSubject & "/" as rich text
else
--if the email was sent TO this email account
try
set myemail to item 1 of (get email addresses of account of mailbox of currentMail)
on error
--27.09.2011 added to make it work with local mailboxes, too
set myemail to item 1 of (get address of to recipient of currentMail)
end try
set currentFolder2Store to mymailboxpath & currentDateSent & " " & currentSender & " " & currentSubject & " send to" & myemail & "/" as rich text
end if
my create_messagefolder(currentFolder2Store)
repeat with a in (every mail attachment of currentMail)
set current_a_name to name of a
set current_a_name to my checkname_with_pdf_suffix(current_a_name, (POSIX file currentFolder2Store) as alias, false)
save a in (((POSIX file currentFolder2Store) as rich text) & current_a_name) as rich text
end repeat
set desktop_pdf_name to my checkname_with_pdf_suffix("1.pdf", path to desktop, false)
set the clipboard to desktop_pdf_name
tell application "System Events"
tell process "Mail"
set wc to count of every window
end tell
end tell
my print_current_mail_as_pdf()
tell application "System Events"
tell process "Mail"
repeat until (count of every window) is wc
end repeat
end tell
end tell
my move_desktop_pdf(desktop_pdf_name, currentFolder2Store)
--close last_message window
activate
tell application "System Events"
tell process "Mail"
keystroke "w" using command down
end tell
end tell
--open destination folder in finder ( did it really work? YES!! =))
--do shell script "open " & quoted form of currentFolder2Store
end repeat
end tell
to move_desktop_pdf(desktop_pdf_name, currentFolder2Store)
--used to move the printed pdf to it's final destination
set finalname to checkname_with_pdf_suffix("__message.pdf", (POSIX file currentFolder2Store) as alias, false)
try
tell application "Finder" to do shell script "mv " & POSIX path of ((desktop) as alias) & quoted form of desktop_pdf_name & " " & quoted form of currentFolder2Store & quoted form of finalname
on error msg
error "Fehler beim Bewegen der gedruckten Nachricht: " & msg as text
end try
end move_desktop_pdf
to getEmail(mailstring)
-- if an email contains the senders name like "Mr.Bla <bla@bla.com>" then returns just the email not leaves the name
if mailstring contains "<" then
return (characters ((offset of "<" in mailstring) + 1) through ((offset of ">" in mailstring) - 1) of mailstring) as text
else
return mailstring
end if
end getEmail
to getDatestring(thedate)
--format a date to a string like 2010-03-22
set monthnum to characters -2 through -1 of ("0" & ((month of thedate) as integer)) as text
set daynum to characters -2 through -1 of ("0" & ((day of thedate) as integer)) as text
set yearnum to year of the thedate
return yearnum & "-" & monthnum & "-" & daynum as text
end getDatestring
to create_messagefolder(thepath_posix)
--I love mkdir -p, simple, short, easy to use
try
do shell script "mkdir -p " & quoted form of thepath_posix
on error msg
error msg
end try
end create_messagefolder
to replace_chars(this_text, search_string, replacement_string)
--this replaces characters
--used for folder and filenames, since a : must not be used for that
if this_text contains the search_string then
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 ""
end if
return this_text
end replace_chars
to checkname_with_pdf_suffix(n, D, looped)
--check if filename exists in D
-- so if "A File.pdf" exists it names it "A File 1.pdf","A File 2.pdf",...
tell application "Finder"
set thefiles to name of every item of (D as alias)
end tell
if thefiles contains n then
if looped = false then
set n to ((characters 1 through -5 of n) & " 1" & (characters -4 through -1 of n)) as text
my checkname_with_pdf_suffix(n, D, true)
else
set tmp to (last word of ((characters 1 through -5 of n) as text) as integer)
set tmpcount to (count of characters of (tmp as text)) + 5
set tmp to tmp + 1
set n to ((characters 1 through (-1 * tmpcount) of n) & tmp & (characters -4 through -1 of n)) as text
my checkname_with_pdf_suffix(n, D, true)
end if
else
return n
end if
end checkname_with_pdf_suffix
to print_current_mail_as_pdf()
--hopefully works on every mac in every language =)
-- GUI-Scripting is not the best way, but somehow the only way at the moment :-/
tell application "Mail"
activate
tell application "System Events"
tell process "Mail"
keystroke "p" using command down
set p to "false"
repeat until 0 = 1
if (count of every sheet of window 1) > 0 then
set p to "ready"
exit repeat
end if
end repeat
if p = "ready" then
click menu button 1 of sheet 1 of window 1
delay 0.25
key code 125
key code 125
delay 0.25
set cwc to count of every window
keystroke return
repeat until 1 = 0
if (cwc + 1) = (count of every window) then
exit repeat
end if
end repeat
click text field 1 of window 1
keystroke "a" using command down
keystroke "v" using command down
keystroke "d" using command down
keystroke return
else
error "timeout"
end if
end tell
end tell
end tell
end print_current_mail_as_pdf
to check_message_viewer_and_return_selection()
-- check if frontmost window is a message viewer, otherwhise tell the user to RTFM!... wait there is no manual... don't care error change user!
tell application "Mail"
set frontmost_message_viewer to {}
repeat with i from 1 to count of every message viewer
if index of window of message viewer i = 1 then
set frontmost_message_viewer to message viewer i
exit repeat
end if
end repeat
if frontmost_message_viewer = {} then
error "Ist ja gar kein Message Viewer im Vordergrund, so kann ich einfach nicht arbeiten!"
else
return selection
end if
end tell
end check_message_viewer_and_return_selection
on is_in_sent_mail(amessage)
tell application "Mail"
set sentmailboxes to every mailbox of sent mailbox
set currentmailbox to mailbox of amessage
repeat with i from 1 to (count of sentmailboxes)
if item i of sentmailboxes = currentmailbox then
return true
end if
end repeat
return false
end tell
end is_in_sent_mail
Update vom 17.04.2012:
Das Skript funktionierte leider nicht mehr unter 10.7... tja jetzt schon wieder... dazu mussten die Pfade etwas angepasst werden-- Save Mail as PDF and it's attachments to folder
-- Created by hubionmac (29.09.2010)
-- 29.09.2010
-- -Auswahl von mehren Emails wird nun auch möglich
-- -Abgesendete Emails werden als solche erkannt und in einem anderen Verzeichnis mit Empfänger-Adresse im Ordnernamen gespeichert (req. by Andreas)
-- 27.09.2011 made it work with local mailboxes, too
##2012-04-17 changed the way paths are formated (posix/mac) and now the script runs on 10.7 again =)
global frontmost_message_viewer
--this is the posix (unix) path of the folder you would like to store the messages in
set mymailboxpath to (path to "desk") & "received_mail_box:" as text
set mysentmailboxpath to (path to "desk") & "sent_mail_box:" as text
tell application "Mail"
set myselection to my check_message_viewer_and_return_selection()
repeat with currentMail in myselection
open currentMail
set currentSender to my (getEmail(sender of currentMail))
set currentDateSent to my getDatestring(date sent of currentMail)
set currentSubject to my replace_chars(my replace_chars(subject of currentMail, ":", "-"), "/", ":") --Doppelpunkte kommen bei Dateinamen nicht so gut
if my is_in_sent_mail(currentMail) is true then
--if the file was sent FROM this email account
set sentToEmail to address of item 1 of to recipient of currentMail
set currentFolder2Store to mysentmailboxpath & sentToEmail & " " & currentDateSent & " " & currentSubject & ":" as rich text
else
--if the email was sent TO this email account
try
set myemail to item 1 of (get email addresses of account of mailbox of currentMail)
on error
--27.09.2011 added to make it work with local mailboxes, too
set myemail to item 1 of (get address of to recipient of currentMail)
end try
set currentFolder2Store to mymailboxpath & currentDateSent & " " & currentSender & " " & currentSubject & " send to " & myemail & ":" as rich text
end if
my create_messagefolder(currentFolder2Store)
repeat with a in (every mail attachment of currentMail)
set current_a_name to name of a
set current_a_name to my checkname_with_pdf_suffix(current_a_name, currentFolder2Store, false)
display dialog (currentFolder2Store & current_a_name) as rich text
save a in (currentFolder2Store & current_a_name as rich text)
end repeat
set desktop_pdf_name to my checkname_with_pdf_suffix("1.pdf", path to desktop, false)
set the clipboard to desktop_pdf_name
tell application "System Events"
tell process "Mail"
set wc to count of every window
end tell
end tell
my print_current_mail_as_pdf()
tell application "System Events"
tell process "Mail"
repeat until (count of every window) is wc
end repeat
end tell
end tell
my move_desktop_pdf(desktop_pdf_name, currentFolder2Store)
--close last_message window
activate
tell application "System Events"
tell process "Mail"
keystroke "w" using command down
end tell
end tell
--open destination folder in finder ( did it really work? YES!! =))
--do shell script "open " & quoted form of currentFolder2Store
end repeat
end tell
to move_desktop_pdf(desktop_pdf_name, currentFolder2Store)
--used to move the printed pdf to it's final destination
set finalname to checkname_with_pdf_suffix("__message.pdf", currentFolder2Store, false)
try
do shell script "mv " & POSIX path of (path to "desk") & quoted form of desktop_pdf_name & " " & quoted form of POSIX path of currentFolder2Store & quoted form of finalname
on error msg
error "Fehler beim Bewegen der gedruckten Nachricht: " & msg as text
end try
end move_desktop_pdf
to getEmail(mailstring)
-- if an email contains the senders name like "Mr.Bla <bla@bla.com>" then returns just the email not leaves the name
if mailstring contains "<" then
return (characters ((offset of "<" in mailstring) + 1) through ((offset of ">" in mailstring) - 1) of mailstring) as text
else
return mailstring
end if
end getEmail
to getDatestring(thedate)
--format a date to a string like 2010-03-22
set monthnum to characters -2 through -1 of ("0" & ((month of thedate) as integer)) as text
set daynum to characters -2 through -1 of ("0" & ((day of thedate) as integer)) as text
set yearnum to year of the thedate
return yearnum & "-" & monthnum & "-" & daynum as text
end getDatestring
to create_messagefolder(thepath)
--I love mkdir -p, simple, short, easy to use
try
do shell script "mkdir -p " & quoted form of POSIX path of thepath
on error msg
error msg
end try
end create_messagefolder
to replace_chars(this_text, search_string, replacement_string)
--this replaces characters
--used for folder and filenames, since a : must not be used for that
if this_text contains the search_string then
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 ""
end if
return this_text
end replace_chars
to checkname_with_pdf_suffix(n, D, looped)
--check if filename exists in D
-- so if "A File.pdf" exists it names it "A File 1.pdf","A File 2.pdf",...
tell application "Finder"
set thefiles to name of every item of (D as alias)
end tell
if thefiles contains n then
if looped = false then
set n to ((characters 1 through -5 of n) & " 1" & (characters -4 through -1 of n)) as text
my checkname_with_pdf_suffix(n, D, true)
else
set tmp to (last word of ((characters 1 through -5 of n) as text) as integer)
set tmpcount to (count of characters of (tmp as text)) + 5
set tmp to tmp + 1
set n to ((characters 1 through (-1 * tmpcount) of n) & tmp & (characters -4 through -1 of n)) as text
my checkname_with_pdf_suffix(n, D, true)
end if
else
return n
end if
end checkname_with_pdf_suffix
to print_current_mail_as_pdf()
--hopefully works on every mac in every language =)
-- GUI-Scripting is not the best way, but somehow the only way at the moment :-/
tell application "Mail"
activate
tell application "System Events"
tell process "Mail"
keystroke "p" using command down
set p to "false"
repeat until 0 = 1
if (count of every sheet of window 1) > 0 then
set p to "ready"
exit repeat
end if
end repeat
if p = "ready" then
click menu button 1 of sheet 1 of window 1
delay 0.25
key code 125
key code 125
delay 0.25
set cwc to count of every window
keystroke return
repeat until 1 = 0
if (cwc + 1) = (count of every window) then
exit repeat
end if
end repeat
click text field 1 of window 1
keystroke "a" using command down
keystroke "v" using command down
keystroke "d" using command down
keystroke return
else
error "timeout"
end if
end tell
end tell
end tell
end print_current_mail_as_pdf
to check_message_viewer_and_return_selection()
-- check if frontmost window is a message viewer, otherwhise tell the user to RTFM!... wait there is no manual... don't care error change user!
tell application "Mail"
set frontmost_message_viewer to {}
repeat with i from 1 to count of every message viewer
if index of window of message viewer i = 1 then
set frontmost_message_viewer to message viewer i
exit repeat
end if
end repeat
if frontmost_message_viewer = {} then
error "Ist ja gar kein Message Viewer im Vordergrund, so kann ich einfach nicht arbeiten!"
else
return selection
end if
end tell
end check_message_viewer_and_return_selection
on is_in_sent_mail(amessage)
tell application "Mail"
set sentmailboxes to every mailbox of sent mailbox
set currentmailbox to mailbox of amessage
repeat with i from 1 to (count of sentmailboxes)
if item i of sentmailboxes = currentmailbox then
return true
end if
end repeat
return false
end tell
end is_in_sent_mail
35 Comments
Hallo, ich wollte das Skript ausprobieren aber bekomme folgenden FEhler:
„System Events“ hat einen Fehler erhalten: NSReceiverEvaluationScriptError: 4
Hast Du GUI-Scripting bei Dir an? (Systemeinstellungen/Eingabehilfe den Hacken bei Zugriff für Hilfsgeräte setzen)
Es war nicht an, aber auch nach der Aktivierung kommt der Fehler.
Dann würde ich sagen, Du setzt vielleicht nicht 10.6 ein :?) Na?
Ist 10.6 Vorraussetzung? Das habe ich nirgends gelesen. Ich hab immer noch 10.4.
Nun... ich denke das liegt am GUI-Skripting... ich habe leider kein 10.4 mehr um das noch zu prüfen... sorry dann ist 10.6 wohl leider Mindestvorraussetzung :-/
Mm, schade. Dann muss ich mich noch gedulden, bis ich umsteige. Danke für die Hilfe!
Hallo hubionmac,
ich habe keine Ahnung von applescript und bin deshalb auf der Suche nach einem fertigen Skript mit dem ich, Abhängig vom Inhalt der Betrf.-Zeile die Anlagen der Mail auf einem Netzlaufwerk ablegen kann.
Das Skript soll über eine Regel, die den Betreff filtert, aufgerufen werden.
Dein Skipt macht ja was ähnliches aber bezieht sich auf die aktuelle Selektion in Mail und nicht auf neu ankommende.
Kann man das so ändern, dass die Neuen-Mails / also aus der Mailregel heraus / verarbeitet werden?
VG
Peter
Servus Peter,
da wollte ich gerade loslegen und etwas schreiben... da fällt mich auf, das ich so etwas schon längt geschrieben habe...
http://hubionmac.com/wordpress/2010/01/mail-regel-skript-attachments-sichern/ :-P
Hallo hubi,
hätte ich ja auch selber finden können - ich probier's gleich morgen aus.
Vielen lieben Dank für die Hilfe
Peter
das script ist ja fantastisch :)
1 fragen habe ich allerdings:
ich möchte gerne mehrere mails > 300 gleichzeitig so abarbeiten. was müsste ich im script ändern?
grüsse aus der schweiz,
abi
ps: sorry doppelpost. aber ich hab den anderen beitrag (beim falschen script) geschrieben. die frage bezog sich auf dieses script hier! :)
ah, noch eine frage hab ich: bei mir unter 10.6.4 wird der ordner wie die mail benannt und die mail heisst _message.pdf, kann man das noch irgendwo ändern? :)
Finde den Script super! Ich bin allerdings ein Apple Scripts Neuling und krieg es nicht gebacken den Code vernünftig in Apple Scripts zu kopieren (alles erscheint lila, ZEilenumbrüche sind teilweise seltsam und Apple scripts meldet ständig Syntaxfehler und lässt mich nicht speichern) Könntest Du mir veilleicht den Script direkt mailen.
Wäre super!
Danke!
Ben
War ein Fehler im WordPress-Blog... der Code wird nun wieder korrekt dargestellt und solle im Skript-Editor auch wieder übersetzt werden können =)
Hallo Hubi!
Danke für das super Skript! Würde trotzdem gerne nochmal auf die Frage von "abi" zurückkommen: Ist es nicht möglich das Skript so abzuändern, daß doch die ganze Auswahl nacheinander abgelegt wird? Bin total neu in Apple-Skript und frage mich außerdem, ob ich jedes Mal auf das Skript (ich habs mal auf den Desktop gelegt) klicken muss, anschließend nochmal "Play" im Skripteditor, oder ob das auch einfach geht.
Vielen Dank für Deine Hilfe,
Alex
Nun, das Ding ist, dass das PDF quasi auf dem Fußweg über einen normalen Druckdialog erstellt wird. GUI-Skripting ist das... und das ist weniger dafür geeignet > 300 Mal problemlos zu funktionieren..
Aber wenn Dein Rechner flink genug ist, dürfte es ohne Anpassungen auch mit mehreren Dateien funktionieren 8-)
Du kannst ja mal
if (count of myselection)>1und weiter untenelse error "…"end ifrausnehmen. und was den Aufruf angeht, such' mal nach einem Programm mit dem Namen FastScripts bei Google...
Ich hasse es, wenn einem eine Idee nicht mehr los lässt... die neue Version kann nun auch zuverlässig mit mehreren Emails klar kommen =-)
Hallo Hubi,
leider kann ich auch kein applescript, aber dieses finde ich spitzenklasse. Könntest du mir noch einen hinweis geben, wie ich die "Empfänger email-Adresse in den Ordnernamen bekomme. Wäre echt toll. Danke schonmal.
Du müsstest die Variable currentFolder2Store etwas anpassen....
so in der Art:
set myemail to (email addresses of account of mailbox of currentMail)set myemail to item 1 of myemail
set currentFolder2Store to mymailboxpath & currentDateSent & " " & currentSender & " " & currentSubject & " send to" & myemail & "/" as text
Hallo Hubi,
danke für die schnelle Antwort. Ganz klappt es noch nicht, da bei gesendeten mail von mir, der Empfänger immer als meine eigene Adresse schreibt. Gibt es da eine Möglichkeit, die "Empfänger-email-Adresse" zu bekommen? Dank und Gruß
Leider scheint es unter OS X Lion nicht mehr zu funktionieren. Script bricht mit folgender Fehlermeldung ab:
Error Number:System Events got an error: Der Zugriff für Hilfsgeräte ist deaktiviert.
-25211
Falls Mail im Vollbild ausgeführt wird (also "Vollbild" unter Lion) gibt es vorher noch folgende Fehlermeldung:
Error Number:Ist ja gar kein Message Viewer im Vordergrund, so kann ich einfach nicht arbeiten!
-2700
Sieht wohl so aus, als müßte man das unter Lion nochmal komplett überarbeiten...
OK. Die Hilfsgeräte sind jetzt aktiviert...
Trotzdem scheitert es unter Lion sobald eine Mail ein Attachment enthält in der Zeile:
repeat with a in (every mail attachment of currentMail)
set current_a_name to name of a
set current_a_name to my checkname_with_pdf_suffix(current_a_name, (POSIX file currentFolder2Store) as alias, false)
save a in (((POSIX file currentFolder2Store) as rich text) & current_a_name) as rich text
mit dem Kommentar:
error "„Mail“ hat einen Fehler erhalten: rich text kann nicht in Typ constant umgewandelt werden." number -1700 from rich text to constant
Leider verstehe ich das nicht..
nun Lars, das scheint ein Bug zu sein. Im OS, es scheinen zumindest auch andere Nutzer das Problem zu haben.. 10.7.1 (vermutlich ehr 10.7.2-3) wird es dann wohl richten. Ein Workaround könnte GUI-Scripting darstellen.. aber wer möchte das schon ;-P
Hallo Hubi,
sehr gutes Script um meine alten E-Mails übersichtlich zu archivieren.
Habe nur folgendes Problem:
Ich habe meine alten E-Mails nach Kunden/Personen in AppleMail in lokale Postfächer eingeordnet. Bei denen bekomme ich dann folgende Fehlermeldung:
- „Mail“ hat einen Fehler erhalten: „account of mailbox of message id 6868 of mailbox "xyz"“ kann nicht gelesen werden. –
Kann ich das Script entsprechend umschreiben, damit er auch die lokalen Postfächer mit einbezieht? (Kenn mich da leider nicht so aus).
Vielen Dank.
Hi Ole-Gunnar,
jetzt endlich komme ich mal dazu das zu beantworten...
Das liegt daran, dass Du lokale Postfächer nutzt, die schlichtweg keine Email-Adresse als Attribut besitzen. Hm... warum habe ich die Email-Adresse denn davon ausgelesen... macht vermutlich Sinn... Ich fange den Fehler mal ab und fragen in dem speziellen Fall dann die Empfänger-Adresse der Email selbst ab... der Code oben ist entsprechend aktualisiert.... Gruß Hubi
hi hubi!
ich suche nach einem script', welches den text einer/mehrerer e-mail(s) als pdf inkl. aller anhänge (pdf, doc, xls, jpeg etc.) in einem ordner exportiert (name des ordners: "empfänger e-mail-datum-absender e-mail" ideal wäre, wenn ich den namen des ordners beim ausführen des scripts individuell bestimmen könnte). das o. a. script sollte diese anforderung erfüllen, wenn ich es richtig verstanden habe. nachdem ich mich absolut nicht mit scripts auskenne (bin pc-versiert und ein begeisterter mac-newcomer...), möchte ich dich fragen ob du mir eine ausführbare installationsprozedur zur verfügung stellen kannst, so dass ich das skript bloß installieren brauche. ich würde mich natürlich auch mit einer entsprechenden spende bedanken wollen. vielen dank schon mal im voraus, jhkar
Hallo Hubi,
danke für das tolle Script! Ich teste grade Deine Erweiterung, auch mehrere Mails auf einmal abzuarbeiten. Leider wird jedoch immer wieder das selbe pdf (der ersten Mail) unter unterschiedlichem Namen gespeichert. Wenn das richtig klappen würde, wäre es mir eine große Hilfe.
Beste Grüße
Andreas
Ich habe das mal mit der neusten Version vom 27.9 ausprobiert... damit funktioniert das einwandfrei unter 10.6.2
Nachtrag... dort halt ohne Anhänge aber das wird hoffentlich unter 10.6.3 wieder funktionieren
Danke Dir für die schnelle Antwort! Ich habe hier 10.7.2, dann könnte es natürlich daran liegen. Mal schauen, ob ich mir testweise einen Snow Leopard aufsetzen kann. Ich werde berichten!
Ich wünsch Dir schonnmal einen guten Rutsch ins neue Jahr
Gruß
Andreas
Bin noch nicht wach... 10.7.2 meinte ich... damit läuft es hier einwandfrei.
Dann bleibt mir der Sbow Leopard schonmal erspart, das ist doch was :-D
Also ich wähle mehrere Mails aus, sage dann Regeln anwenden und er erstellt auch sauber alle pdf Dateien. Aber alle haben den selben Inhalt. Mal schauen, was da noch bei mir falsch läuft. Da es bei Dir funktioniert, muss es ja irgendwas bei mir sein. Danke nochmal!
Beste Grüße
Andreas
Klingt super das Script. Leider bekomm ich immer folgende Fehlermeldung:
error "„Mail“ hat einen Fehler erhalten: rich text kann nicht in Typ constant umgewandelt werden." number -1700 from rich text to constant
10.7.3
An welcher Stelle muss ich den Zielordner eingeben?
Grüße
Niklas
Servus Niklas,
ich habe mir den Quellcode noch einmal angesehen und habe nun unter 10.7.3 einen Weg gefunden die Anhänge nun auch wieder zu speichern (das Format der Speicherpfade war schlichtweg ein anderes als bei den älteren Mail-Versionen... )
Die neue Version ist am Ende des Blog-Eintrages angefügt worden.
Die Zielordner werden ganz zu Anfang definiert... diese liegen als Standard auf dem Desktop, da zudem das PDF auch dort standardmäßig landet.
Vielen Vielen Dank! So klappt es!
2 Trackbacks
[...] This post was mentioned on Twitter by Rüdiger, Rüdiger Nitzsche. Rüdiger Nitzsche said: @mr_abi http://bit.ly/av8eSY als Basis sollte doch brauchbar sein [...]
[...] Aber zahlreiche Gigabyte an Daten sollen nicht umsonst gelöscht worden sein, das Skript zum Speichern von Emails als PDF nebst deren Anhängen funktioniert nun wieder unter 10.7, und das ohne den Schreibtisch zu löschen =)This entry was [...]