Ny typ av emailregler?

Tråden skapades och har fått 25 svar. Det senaste inlägget skrevs .
1

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

Vilket mail-program pratar vi om?

I vilken version av OS X?

10.9.2 resp. 7.2 för Mail

  • Medlem
  • 2014-04-02 05:43
Ursprungligen av danielka:

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

X dagar efter vad?

  • Medlem
  • Neverland
  • 2014-04-02 09:06

X dagar efter att de är lästa, kan förmodas.

  • Medlem
  • 2014-04-02 18:10

Då är nog svaret nej.

  • Medlem
  • Göteborg
  • 2014-04-02 18:38

Man kan väl göra en smart brevlåda som visar dessa mail. Men sedan behöver man väl göra ett applescript för att flytta dem, och det är jag inget bra på.

  • Medlem
  • 2014-04-02 20:29
Ursprungligen av IngoX:

Man kan väl göra en smart brevlåda som visar dessa mail. Men sedan behöver man väl göra ett applescript för att flytta dem, och det är jag inget bra på.

När skulle mailen flyttas då?

  • Medlem
  • International user
  • 2014-04-02 22:30
Ursprungligen av Baron:

När skulle mailen flyttas då?

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

  • Medlem
  • 2014-04-02 23:31
Ursprungligen av juanito:

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.

  • Medlem
  • International user
  • 2014-04-02 23:34
Ursprungligen av Baron:

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.

  • Medlem
  • 2014-04-03 09:50

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?

Ursprungligen av Baron:

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.

  • Medlem
  • 2014-04-03 10:04

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?

Ursprungligen av Baron:

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.

  • Medlem
  • International user
  • 2014-04-03 12:00
Ursprungligen av Jesper Ohlsson:

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

Senast redigerat 2014-04-03 13:24
  • Medlem
  • International user
  • 2014-04-03 17:57
Ursprungligen av danielka:

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

  • Medlem
  • International user
  • 2014-04-03 18:07

Det där blev så oläsligt så här är koden som bild utan kommentarer.

  • Medlem
  • 2014-04-05 14:38

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.

  • Medlem
  • 2014-04-06 14:07
Ursprungligen av juanito:

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)

  • Medlem
  • International user
  • 2014-04-06 17:14
Ursprungligen av Baron:

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

  • Medlem
  • 2014-04-06 21:14

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.

  • Medlem
  • International user
  • 2014-04-06 22:23
Ursprungligen av Baron:

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.

  • Medlem
  • 2014-04-08 07:04
Ursprungligen av juanito:

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.

  • Medlem
  • 2014-04-08 22:01

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

  • Medlem
  • 2014-04-12 16:54

Man måste alltså själv skriva in vad som ska ske med mailet i handlern doMailStuff() och eventuellt byta plats på set flag index of I to -1 och -- move mail, men det tror jag inte behövs så länge man inte raderar mailet.

1
Bevaka tråden