[GastForen Programmierung/Entwicklung AppleScript Ordner überwachen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Ordner überwachen

Hans Haesler
  
Beiträge gesamt: 5826

15. Dez 2016, 11:11
Beitrag # 16 von 37
Beitrag ID: #554535
Bewertung:
(13198 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Renate,

war kurz weg, bin jetzt wieder zurück. Und habe Deine Version des Scripts ausprobiert.
Ergebnis: Es funktioniert wie erwartet, das Attachment ist angehängt.

Zu Deiner Frage: Die Variable 'msgAttachment' muss nicht im voraus als Property definiert werden.

Der Pfad der Datei steckt in in 'aFile' und wird dem Handler 'sendFile()' übergeben, wo er der Variablen 'msgAttachment' zugewiesen wird.

Ein paar Fragen:
– Wie ist bei Dir das Ergebnis?
– Wird das E-Mail gesendet?
– Ist der Adressat eingetragen?
– Und der Betreff?
– Und der Mitteilungstext?

Ich werde versuchen, ein Testscript zu schreiben, mit welchem der Ablauf aufgezeichnet wird.

Gruss, Hans


als Antwort auf: [#554531]
X

Ordner überwachen

RBL
Beiträge gesamt: 5

15. Dez 2016, 13:17
Beitrag # 17 von 37
Beitrag ID: #554541
Bewertung:
(13165 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank, Hans!
Das Mail wird sehr schnell über Mail an den richtigen Empfänger gesendet. Betreff ist der Filename, das ist sehr wichtig und ich wähnte mich schon am Ziel. Auch der Mitteilungstext wird übergeben.
Einzig fehlt der Anhang.
Ich habe im Netz gefunden, dass unter Sierra das Mail ggf. zu schnell verschickt wird, bevor der Anhang dran ist. ? Entschuldige bitte meine laienhafte Ausdrucksweise.

Ich starte das über die Ordneraktion. Files in den Ordner und los. Ohne Anhang.

Danke für die Unterstützung!

Renate


als Antwort auf: [#554535]

Ordner überwachen

Hans Haesler
  
Beiträge gesamt: 5826

15. Dez 2016, 16:28
Beitrag # 18 von 37
Beitrag ID: #554547
Bewertung:
(13117 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Renate,

besten Dank für die präzisen Angaben.

Es könnte sein, dass das Gewicht des Anhangs das Mitsenden verhindert. Für meine ersten Versuche habe ich ein Leichtgewicht-PDF von 11 Kb verwendet. Aber auch mit 1.2 MB und 3.1 MB klappt es. Und sogar mit einer Photoshop-Datei von 14 MB.

Ich habe auch im Internet nachgeforscht, aber nichts richtig Brauchbares gefunden. Ausser – vielleicht – dass einer sein Script zum Laufen gebracht hatte, nachdem er den Pfad zur anzuhängenden Datei explizit als 'alias' definierte.

Doch weil die Objekte in der Schleife schon Aliasse sind, wird das sehr wahrscheinlich nicht helfen.

Versuche es bitte trotzdem mit der folgenden Variante:

Code
property msgName : "Buchhaltung" 
property msgAddress : "<xxx.de>"
property msgBody : "an Collmex"
property msgSender : "me <info@xxx>"

on adding folder items to thisFolder after receiving fileList
repeat with curFile in fileList
set filePath to (curFile as string)
if not (filePath ends with ":") then
set aName to name of (info for (file filePath))
set aFile to curFile as alias
sendFile(aName, aFile)
end if
end repeat
end adding folder items to

on sendFile(msgSubject, msgAttachment)
tell application "Mail"
activate
set newMessage to make new outgoing message with properties ¬
{subject:msgSubject, content:msgBody & return & return}
tell newMessage
set visible to true
set sender to msgSender
make new to recipient at end of to recipients with properties {name:msgName, address:msgAddress}
tell content
make new attachment with properties {file name:msgAttachment} at after the last paragraph
end tell
end tell
delay 1
save newMessage
delay 1
send newMessage
end tell
end sendFile

Zusätzlich habe ich gegen das Ende noch zwei Mal die Zeile delay 1 eingefügt, bevor das E-Mail gesendet wird. Das bedeutet, dass die Ausführung je eine Sekunde angehalten wird um dem Anhängen und Speichern mehr Zeit zu geben.

Zudem habe ich das activate nach oben verschoben, damit Mail früher in den Vordergrund kommt.

Wenn die Mitteilung angezeigt ist (also bevor sie gesendet wird): Siehst Du das angefügte Objekt?

Gruss, Hans


als Antwort auf: [#554541]

Ordner überwachen

RBL
Beiträge gesamt: 5

15. Dez 2016, 19:08
Beitrag # 19 von 37
Beitrag ID: #554548
Bewertung:
(13076 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das ist so genial! Funktioniert perfekt. Einzelne Mails, richtiger Betreff und jetzt mit Anhang! Vielen Dank, das ist eine echte Erleichterung für mich. Sicher auch für viele andere.
Wir hören uns wieder!

Grüsse, Renate


als Antwort auf: [#554547]

Ordner überwachen

Hans Haesler
  
Beiträge gesamt: 5826

15. Dez 2016, 19:52
Beitrag # 20 von 37
Beitrag ID: #554550
Bewertung:
(13061 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Renate,

ich bedanke mich für Deine positive Rückmeldung.

Hatte befürchtet, dass es nicht klappen wird und aus Verzweiflung beide Abhilfen eingebaut.

Jetzt sollten wir noch wissen, welche davon den Unterschied macht. Oder braucht es doch beide?

Würdest Du bitte zuerst die beiden delay-Zeilen auskommentieren? Dazu ganz einfach zwei Bindestriche davor setzen:

Code
-- delay 1 

So werden diese Befehle nicht ausgeführt.

Falls das Attachment dennoch ankommt, können diese beiden Ausbremser entfernt werden.

Gruss, Hans


als Antwort auf: [#554548]

Ordner überwachen

RBL
Beiträge gesamt: 5

16. Dez 2016, 09:20
Beitrag # 21 von 37
Beitrag ID: #554554
Bewertung:
(12926 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Hans,
wenn ich beide auskommentiere, fehlt der Anhang wieder. Mit einem Ausbremser funktioniert des Script wieder wie gewünscht. Habs mit großer und kleiner Datei getestet.
Vielen Dank für diesen Service!

Gruss,
Renate


als Antwort auf: [#554550]

Ordner überwachen

JeT
Beiträge gesamt: 40

11. Jan 2017, 17:26
Beitrag # 22 von 37
Beitrag ID: #554861
Bewertung:
(12507 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

besteht denn die Möglichkeit, dass der Mailversand auch im Hintergrund passiert?

Das activate habe ich mal rausgenommen, aber es wird immer noch das "Neue Mail"-Fenster bei einem 2-Monitor-Betrieb (Mail aufm zweiten Monitor) sichtbar.


Dankeschöön.
Jens


als Antwort auf: [#554547]

Ordner überwachen

Hans Haesler
  
Beiträge gesamt: 5826

11. Jan 2017, 20:44
Beitrag # 23 von 37
Beitrag ID: #554866
Bewertung:
(12464 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jens,

herzlich willkommen im AppleScript-Forum auf HilfDirSelbst! :-)

Wenn Du nach tell newMessage in der Zeile ...

Code
set visible to true 

... das true durch false ersetzest ...

Code
set visible to false 

... dann sollte die Ausführung im Hintergrund geschehen.

Zum besseren Verständnis: visible = sichtbar, true = wahr, false = nicht wahr.

Gruss, Hans


als Antwort auf: [#554861]

Ordner überwachen

JeT
Beiträge gesamt: 40

12. Jan 2017, 09:10
Beitrag # 24 von 37
Beitrag ID: #554873
Bewertung:
(12378 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

super – vielen Dank!

Jetzt sind mir in der Anwendung noch ein paar Fragen gekommen :)

1) ich wende das Script auf ein Ordner an, der auf einer smb-Freigabe liegt. Jetzt hatte ich nach einem Neustart die Situation, dass ich 10 Mails bekommen habe, sprich von allen Dateien, die im Ordner liegen.

2) Kann man das auch auf Ordner erweitern, also wenn ein neuer Ordner reingelegt wird?

3) ich bekomme keine Benachrichtigung über eine neue Mail?

4) kann man die gesendete Mail gleich aus dem Ordner "Gesendet" löschen? Ich hab sie im Posteingang, dann brauch ich sie nicht nochmal doppelt vorhalten


Danke schon für deine Hilfe :)
Jens


als Antwort auf: [#554866]

Ordner überwachen

Hans Haesler
  
Beiträge gesamt: 5826

12. Jan 2017, 10:45
Beitrag # 25 von 37
Beitrag ID: #554877
Bewertung:
(12355 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jens,

bitte sehr. Aber Wünsche hast Du ... :-)

Ich bin unterwegs und kann momentan nichts Brauchbares liefern

Nur dies: Das Problem von Punkt 1 sollte nicht mehr auftreten, wenn der Punkt 4 gelöst ist.

Ich werde voraussichtlich nicht vor Ende Nachmittag versuchen können, das Script zu erweitern.

Gruss, Hans


als Antwort auf: [#554873]

Ordner überwachen

Hans Haesler
  
Beiträge gesamt: 5826

12. Jan 2017, 17:18
Beitrag # 26 von 37
Beitrag ID: #554886
Bewertung:
(12299 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jens,

das erweiterte Script:

Code
property msgName : "Buchhaltung" 
property msgAddress : "<xxx.de>"
property msgBody : "an Collmex"
property msgSender : "me <info@xxx>"

on adding folder items to thisFolder after receiving fileList
repeat with curFile in fileList
set filePath to (curFile as string)
set aName to name of (info for (file filePath))
set aFile to curFile as alias
sendFile(aName, aFile)
tell application "Finder"
try
delete curFile
end try
end tell
end repeat
end adding folder items to

on sendFile(msgSubject, msgAttachment)
tell application "Mail"
--activate
set newMessage to make new outgoing message with properties ¬
{subject:msgSubject, content:msgBody & return & return}
tell newMessage
--set visible to true
set visible to false
set sender to msgSender
make new to recipient at end of to recipients with properties {name:msgName, address:msgAddress}
tell content
make new attachment with properties {file name:msgAttachment} at after the last paragraph
end tell
end tell
delay 1
save newMessage
delay 1
send newMessage
end tell
end sendFile

1) Wie schon gesagt, sollte dieses Problem durch Punkt 4 gelöst sein.
2) In der Wiederholschleife ist die Prüfung 'if not (filePath ends with ":") then' entfernt. Somit werden sowohl Dateien als auch Ordner spediert.
3) Das musst Du bei Deiner Mail-App einstellen (Ton abspielen oder Notiz zeigen).
4) Nach jedem Aufruf von 'sendFile' versucht der "Finder", die Datei zu entfernen.

Gruss, Hans


als Antwort auf: [#554877]

Ordner überwachen

JeT
Beiträge gesamt: 40

12. Jan 2017, 20:44
Beitrag # 27 von 37
Beitrag ID: #554890
Bewertung:
(12262 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Hans,

1) Da hatten wir uns leider missverstanden.
Ich möchte nicht die Datei im überwachten Ordner löschen, sondern lediglich die Mail im Postausgang/Gesendete – ich habe die Mail ja schon im Posteingang.

Als Hintergrund: ich nutze dein Skript als Erinnerung/Benachrichtigung, wenn ein Kollege eine Datei da reinschmeißt und ich entsprechend reagieren muss. Deswegen habe ich es schon dahingehend modifiziert, dass kein Anhang mitgesendet wird, brauche ich in meinem Anwendungsfall nicht und es geht hier teilweise um 70-80 MB große Bilddateien. Wenn die Datei abgearbeitet ist, lösche ich die Erinnerungsmail.

2) Teste ich dann morgen auf der Arbeit

3) Habe ich schon ausprobiert, ich habe auch extra zusätzlich noch eine Regel gesetzt, die bei der eingehenden Mail entsprechend die Benachrichtigung über neue Mails auswirft, aber hat nicht geklappt. Ich probiers aber morgen nochmal, vielleicht habe ich was übersehen.

4) Besteht wieder, wegen 1 :)


Grüße
Jens


als Antwort auf: [#554886]

Ordner überwachen

Hans Haesler
  
Beiträge gesamt: 5826

12. Jan 2017, 23:18
Beitrag # 28 von 37
Beitrag ID: #554893
Bewertung:
(12219 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Sven,

ein neuer Versuch. Die Dateien werden nicht mehr in den Papierkorb verschoben sondern in den Ordner "Backup".
Dieser Ordner wird im Hauptordner, in welchem sich der überwachte Ordner befindet, erzeugt.

Code
property msgName : "Buchhaltung" 
property msgAddress : "<xxx.de>"
property msgBody : "an Collmex"
property msgSender : "me <info@xxx>"

on adding folder items to thisFolder after receiving fileList
tell application "Finder"
set mainFolder to (container of thisFolder) as Unicode text
set backUpFolder to mainFolder & "Backup:"
if not (folder backUpFolder exists) then
make new folder at folder mainFolder with properties {name:"Backup"}
end if
end tell
repeat with curFile in fileList
set filePath to (curFile as string)
set aName to name of (info for (file filePath))
set aFile to curFile as alias
sendFile(aName, aFile)
tell application "Finder"
try
move curFile to backUpFolder with replacing
end try
end tell
end repeat
end adding folder items to

on sendFile(msgSubject, msgAttachment)
tell application "Mail"
--activate
set newMessage to make new outgoing message with properties ¬
{subject:msgSubject, content:msgBody & return & return}
tell newMessage
--set visible to true
set visible to false
set sender to msgSender
make new to recipient at end of to recipients with properties {name:msgName, address:msgAddress}
tell content
make new attachment with properties {file name:msgAttachment} at after the last paragraph
end tell
end tell
delay 1
save newMessage
delay 1
send newMessage
end tell
end sendFile

Das Entfernen der gesendeten Mitteilungen wollte nicht gelingen. Vielleicht hat ein Mitleser, welcher sich mit dem Scripten von "Mail" besser auskennt, eine Lösung.

Gruss, Hans


als Antwort auf: [#554890]

Ordner überwachen

JeT
Beiträge gesamt: 40

13. Jan 2017, 09:16
Beitrag # 29 von 37
Beitrag ID: #554895
Bewertung:
(12125 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Hans,

ich habs jetzt mal getestet:

– mit Dateien & Ordnern funktioniert

– Mail-Benachrichtigungen: da scheint irgendwie die "Mitteilung senden"-Funktion nicht richtig zu funktionieren, andere werden korrekt angewendet. Kann man vielleicht über das Skript eine Benachrichtigung ausgeben? (ich meine die rechts oben eingeblendet werden) Muss ja nicht sekundengenau mit Mailempfang sein.

– das mit der Mail löschen kriege ich vielleicht sogar mit einer Mail-Regel hin, das probiere ich mal

– das mit dem Backup-Ordner ist wahrscheinlich ein Workaround für den erneuten Mailversand bei Neustart/neu mounten, oder? Die Tatsache, dass der Ordner außerhalb des überwachten Ordner liegt, gefällt mir nicht.
Wie gesagt, die Dateien/Ordner sollen eigentlich genau da bleiben, wo sie sind, ich versende sie nicht als Mailanhang (habe die 3 Zeilen tell content... auskommentiert).
Aber vielleicht ist hier die Grenze des Machbaren? Du musst dich nicht verrenken mit meinem Sonderwünschen :)


Danke nochmal bis hierhin für deine Hilfe!
Jens


als Antwort auf: [#554893]
(Dieser Beitrag wurde von JeT am 13. Jan 2017, 09:18 geändert)

Ordner überwachen

Hans Haesler
  
Beiträge gesamt: 5826

13. Jan 2017, 10:18
Beitrag # 30 von 37
Beitrag ID: #554901
Bewertung:
(12109 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jens,

ach sooo ... Ich hatte verstanden, dass die Dateien als Attachment gesendet werden und dass der überwachte Ordner geleert werden soll.

Weil kein Anhang, sollte das Script angepasst werden: 'sendMsg' (statt 'sendFile') usw.

Code
property msgName : "Buchhaltung" 
property msgAddress : "<xxx.de>"
property msgBody : "an Collmex"
property msgSender : "me <info@xxx>"

on adding folder items to thisFolder after receiving fileList
repeat with curFile in fileList
set filePath to (curFile as string)
set aName to name of (info for (file filePath))
sendMsg(aName)
end repeat
end adding folder items to

on sendMsg(msgSubject)
tell application "Mail"
--activate
set newMessage to make new outgoing message with properties ¬
{subject:msgSubject, content:msgBody & return & return}
tell newMessage
--set visible to true
set visible to false
set sender to msgSender
make new to recipient at end of to recipients with properties {name:msgName, address:msgAddress}
end tell
save newMessage
send newMessage
end tell
display notification "Neues E-Mail." with title "Hallo Jens!"
end sendMsg

Die Benachrichtigung sollte oben rechts erscheinen.

Gruss, Hans


als Antwort auf: [#554895]
X