- danielka
- Medlem ●
- Stockholm
Vilket mail-program pratar vi om?
I vilken version av OS X?
Ett fulhack vore väl varje gång ett nytt mail kommer in skulle scriptet startas, men se då till att det jobbar i bakgrunden och inte börjar störa dig.
En regel som kunde fungera kunde se ut så här.
Men jag tror denna länk kan ge bättre svar även om han inte gör exakt samma sak.
http://www.macandiostips.com/Mac_and_iOS_Tips...
Ett fulhack vore väl varje gång ett nytt mail kommer in skulle scriptet startas, men se då till att det jobbar i bakgrunden och inte börjar störa dig.
En regel som kunde fungera kunde se ut så här.
Men jag tror denna länk kan ge bättre svar även om han inte gör exakt samma sak.
http://www.macandiostips.com/Mac_and_iOS_Tips...
Intressant. Men mailet skulle flyttas 7 dagar efter att det blivit läst. Jag får inte ihop logiken.
Intressant. Men mailet skulle flyttas 7 dagar efter att det blivit läst. Jag får inte ihop logiken.
Det enda bakom detta var ju att ha ett sätt att sätta igång scriptet. Ett annat sätt är ju att ha scriptet att starta varje dag, utan att använda en regel.
Jag kanske är trög, men jag fattar inte. Vilka villkor ska uppfyllas för att skriptet ska göra något? Och vad är det skriptet ska göra?
Mail-regeln som visas i inlägg #9 är bara ett sätt att starta ett script - varje gång det kommer ett mail.
Själva scriptet är ju blankt i den mail-regeln. Hur scriptet ska konstrueras verkar vara ett senare problem.
Jo, det fattar jag också, men jag förstår inte hur problemet formulerat i början av tråden kan lösas genom att ett skript körs varje gång det kommer ett mail. Vad är det skriptet ska göra?
Men tänker väl sig att scriptet ska hitta alla mail som lästes för X dagar sedan, och flytta dem till en mapp.
Huruvida detta är möjligt verkar ingen veta.
Men tänker väl sig att scriptet ska hitta alla mail som lästes för X dagar sedan, och flytta dem till en mapp.
Huruvida detta är möjligt verkar ingen veta.
Jo det är möjligt, men har helt enkelt inte tid att göra scriptet.
Det gäller bara att skapa ett script som endera hittar dessa mail själva eller hittar mailen via en smart folder som ska flyttas. Borde inte vara speciellt svårt.
Kolla denna länk och se delen om "Filing a Message", av allt att dömma flyttar man inte ett mail med applescript utan man ändrar parametrarna på mailet för att "flytta" det.
http://www.mactech.com/articles/mactech/Vol.2...
Hej
Jag undrar om det går att få till en regel där lästa email efter x dagar flyttas till en emailmapp?
// Daniel
Här har jag ett script som gör det du frågar om, jag skrev kommentarerna på engelska så att fler kan ha nytta av det.
Kopiera det till script editorn och spara som script eller program. Vilket du väljer beror väl mest på hur du tänker använda det.
De gråa raderna som föregås med -- är kommentarer och kan raderas om så önskas.
Använd på egen risk behöver jag väl inte säga
PS. Detta fungerar inte med Smart folders av någon anledning så skippa det.
*****
tell application "Mail"
--This script needs a external source to start it up, do this e.g. from ical by making an event that runs this script or from mail with a rule that runs this script. If you're fancy enough you may setup launchd to run it.
-- modify the value in the row below to your need, this is set to work on mails that are older than 30 days. If you want 7 days change the value from 30 to 7
set myDate to (current date) - (30 * days)
-- modify the mailbox and account name according to your setup, also the last mailbox here named 99mac.se in the end to the folder name where you want your mails moved.
move (the messages of mailbox "INBOX" of account "iCloud" whose read status is true and date received < myDate) to mailbox "99mac.se"
end tell
Det där blev så oläsligt så här är koden som bild utan kommentarer.
Wrappa med {code} {/code} fast med [ ] så blir det läsligare.
-- This script needs a external source to start it up, do this e.g. from ical by making an event that runs this script or -- from mail with a rule that runs this script. If you're fancy enough you may setup launchd to run it. -- modify the value in the row below to your need, this is set to work on mails that are older than 30 days. If you -- want 7 days change the value from 30 to 7 set theNumberOfDaysToKeep to 30 -- modify the mailbox and account name according to your setup, also the last mailbox here named 99mac.se in the -- end to the folder name where you want your mails moved. set theSourceAccount to "iCloud" set theSourceBox to "INBOX" set theTargetBox to "99mac.se" set theResult to (my doExecute(D, SA, SB, TB)) if item 1 of theResult is true then display alert "Succé" message item 2 of theResult & " meddelanden har flyttats till brevlådan " & theTargetBox else display alert "Okänt fel!" message item 2 of theResult end if on doExecute(D, SA, SB, TB) try tell application "Mail" set myDate to (current date) - (D * days) set M to (the messages of mailbox SB of account SA whose read status is true and date received < myDate) move M to mailbox TB end tell return {true, (count M) as string} on error er return {false, err} end try end doExecute
(ändringarna i skriptet är ovan inte testade)
Mm, men det där flyttar mail x dagar efter ett de har tagits emot, inte x dagar sedan de lästes. Det var det jag trodde TS var ute efter.
Edit:
Äh jag svamlar, nej det flyttar inte mail x dagar efter att de lästes. Osäker på hurvida mail sparar läst datum på ett sätt som är åtkomligt med Apple Script. Apple har blivit allt sämre på att stöda apple script själva. iCal är ju bottenappet som fick mig att till sist köpa office 365. Första gången jag köper en MS produkt.
Sitter enbart med en ipad just nu. Det är väl min största kritik angående iOS avsaknaden av Applescript
Det kanske går att lösa med en kombination av schemalagda skript, flaggor, regler och smarta mappar. Men jag orkar inte fundera ut logiken.
Finns inget i Mails Dictionary som gör att man kan hitta datum för när ett mail har blivit läst. Om man tvunget måste ha det bör man ha ett script som snurrar i bakgrunden och gör en egen databas eller lista över mail och deras status, samt sparar ner tidpunkten dess status ändrades. Då kunde man utgående från den listan enkelt göra ett flytta script till.
Skulle inte förvåna mig om man kunde göra detta med Outlook för mac och Applescript. För exchange har den funktionen att de kan sända dig ett meddelande när ditt mail har blivit läst av mottagaren. Så antagligen kunde man få datum där direkt. Men vem vill använda Outlook bara för att ha den funktionen.
Edit:
Man kunde tänka sig att ha ett sådant script att snurra en gång i timmen eller per dag ifall man såg till att det vaknade upp varje gång ett nytt mail kommer in och katalogiserar det.
Finns inget i Mails Dictionary som gör att man kan hitta datum för när ett mail har blivit läst. Om man tvunget måste ha det bör man ha ett script som snurrar i bakgrunden och gör en egen databas eller lista över mail och deras status, samt sparar ner tidpunkten dess status ändrades. Då kunde man utgående från den listan enkelt göra ett flytta script till.
…
Jag tänker mig att man kanske kan sätta en flagga eller annan etikett för resp veckodag på mailet när det läses, så kan man ha ett skript som flyttar mail med en viss flagga en viss dag. Om man kan leva med att 7 dagar inte är exakt 7*24*60*60 sekunder utan att sju dagar passeras tex när man hämtar mail på morgonen så kanske det kan fungera.
Men det hela känns som mycket skrik för lite ull.
Om man kör nån variant på detta varje gång man tar emot ett mail åstadkommer man ungefär det TS vill:
set {theWeekday, theToday} to ({weekday, short date string} of (current date)) if theWeekday is Monday then set theFlagIndex to 0 else if theWeekday is Tuesday then set theFlagIndex to 1 else if theWeekday is Wednesday then set theFlagIndex to 2 else if theWeekday is Thursday then set theFlagIndex to 3 else if theWeekday is Friday then set theFlagIndex to 4 else if theWeekday is Saturday then set theFlagIndex to 5 else if theWeekday is Sunday then set theFlagIndex to 6 end if tell application "Mail" set theRead_True to messages of mailbox "INBOX" of account "myAccount" whose (read status) is true repeat with I in theRead_True set theReceivedDate to (date received of contents of I) if theWeekday is Monday then if flag index of I is in {-1, 1, 2, 3, 4, 5, 6} then set flag index of I to theFlagIndex else if flag index of I is theFlagIndex and ((short date string) of theReceivedDate) is not theToday then my doMailStuff(I) end if else if theWeekday is Tuesday then if flag index of I is in {-1, 0, 2, 3, 4, 5, 6} then set flag index of I to theFlagIndex else if flag index of I is theFlagIndex and ((short date string) of theReceivedDate) is not theToday then my doMailStuff(I) end if else if theWeekday is Wednesday then if flag index of I is in {-1, 0, 1, 3, 4, 5, 6} then set flag index of I to theFlagIndex else if flag index of I is theFlagIndex and ((short date string) of theReceivedDate) is not theToday then my doMailStuff(I) end if else if theWeekday is Thursday then if flag index of I is in {-1, 0, 1, 2, 4, 5, 6} then set flag index of I to theFlagIndex else if flag index of I is theFlagIndex and ((short date string) of theReceivedDate) is not theToday then my doMailStuff(I) end if else if theWeekday is Friday then if flag index of I is in {-1, 0, 1, 2, 3, 5, 6} then set flag index of I to theFlagIndex else if flag index of I is theFlagIndex and ((short date string) of theReceivedDate) is not theToday then my doMailStuff(I) end if else if theWeekday is Saturday then if flag index of I is in {-1, 0, 1, 2, 3, 4, 6} then set flag index of I to theFlagIndex else if flag index of I is theFlagIndex and ((short date string) of theReceivedDate) is not theToday then my doMailStuff(I) end if else if theWeekday is Sunday then if flag index of I is in {-1, 0, 1, 2, 3, 4, 5} then set flag index of I to theFlagIndex else if flag index of I is theFlagIndex and ((short date string) of theReceivedDate) is not theToday then my doMailStuff(I) end if end if end repeat set theRead_false to messages of mailbox "INBOX" of account "Catch all" whose (read status) is false repeat with I in theRead_false set flag index of I to theFlagIndex end repeat end tell on doMailStuff(I) tell application "Mail" -- move mail set flag index of I to -1 end tell end doMailStuff
Det är otestat och jag kan ha tankevurpat på vägen, men det värsta som kan hända är att mail får flaggor de inte ska ha (och förlorar flaggor de ska ha).