Guten Tag, ich habe folgende Vorstellung: Ein Ordner auf einem Helios Volume wir soll überwacht werden. Sobald in diesem Ordner eine neue Datei "reinfällt", soll diese Datei als Anhang an eine fest vorgegebene Adresse mit einem Mailprogramm verschickt werden. Ist das technisch mit einem AppleScript umzusetzen?
leider habe ich bisher sämtliche Messages von der "AppleScript User's List", welche das Thema "Mail" behandelten, ungelesen gelöscht ...
Ich musste mich zuerst also etwas schlauer machen, als ich es bisher war. Doch nach kurzer Zeit hatte ich folgende Ordneraktion zusammengestellt und – zu meiner Überraschung – sie funktionierte auf Anhieb. :-)
Anstelle von "Adressat" muss der Name des Empfängers eingesetzt werden. Das erste "<abc@def.de>" ist die E-mail-Adresse des Empfängers. Und "Absender <abc@def.de>" durch die richtige Absenderadresse ersetzen.
Als "Betreff" setzt das Script den Namen der Datei ein. --- property msgName : "Adressat" property msgAddress : "<abc@def.de>" property msgBody : "Hallo!" property msgSender : "Absender <abc@def.de>"
on adding folder items to thisFolder after receiving fileList repeat with aFile in fileList set filePath to (aFile as string) if not (filePath ends with ":") then set aName to name of (info for (file filePath)) sendFile(aName, aFile) end if end repeat end adding folder items to
on sendFile(msgSubject, msgAttachment) tell application "Mail" 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 activate save newMessage send newMessage end tell end sendFile --- Wenn "Mail" dabei unsichtbar bleiben sollte, dann kannst Du die Zeile 'set visible to true' in 'set visible to false' ändern und das 'activate' (am Scriptende) entfernen.
Nachzutragen ist noch, dass ich als Grundlage das Mail-Script "Create New Message" von Apple genommen habe. Ohne diese Vorlage hätte ich noch lange nach der richtigen Syntax suchen müssen.
Hi Hans, da habe ich die Rechnung ohne den Wirt gemacht. Die Bestandteile, die in den Ordner fallen, habe unter umständen so lange Namen, das der Mac sie nicht erkennt. Die Länge der Namen kann ich nicht ändern; sie werden von einem BDE-System generiert. Ich werde mal nach einer Möglichkeit suchen, es mit einem Windows-System zu erledigen. Confused. Die Windows Systeme zeigen mir die lnangen Dateinamen an. Gruß Uwe :?
dann gib doch mal dem Wirt den Tarif durch! ;-) Zu lange Namen machen immer wieder Probleme. Würdest Du mir bitte gelegentlich per Mail ein paar Muster von diesen zu langen Namen senden? Und – falls möglich – eine Angabe, wo denn die Grenze liegt (31 Zeichen?).
besteht auf diesem Wege auch die Möglichkeit eine Mail zu versenden, wenn ein Ordner (mit Inhalt) in den zu überwachenden Ordner fällt. Es wird nur eine Benachrichtigung benötigt, kein Attachment.
ja, das ist machbar. Im Script ist schon ein Test eingebaut, welcher feststellt, ob es sich um eine Datei handelt. Diesen Test kann man mit 'else' ergänzen und einen entsprechenden Handler aufrufen: --- property msgName : "Adressat" property msgAddress : "<abc@def.de>" property msgBody1 : "Datei" property msgBody2 : "Ordner" property msgSender : "Absender <abc@def.de>"
on adding folder items to thisFolder after receiving fileList repeat with aFile in fileList set filePath to (aFile as string) if not (filePath ends with ":") then set aName to name of (info for (file filePath)) sendFile(aName, aFile) else set aName to name of (info for (file filePath)) sendFile(aName) end if end repeat end adding folder items to
on sendFile(msgSubject, msgAttachment) tell application "Mail" set newMessage to make new outgoing message with properties ¬ {subject:msgSubject, content:msgBody1 & 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 activate save newMessage send newMessage end tell end sendFile
on sendMessage(msgSubject) tell application "Mail" set newMessage to make new outgoing message with properties ¬ {subject:msgSubject, content:msgBody2 & 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} end tell activate save newMessage send newMessage end tell end sendMessage --- Es sollte funktionieren (habe es aber nicht getestet).
Im Moment wird – gleich wie bei der Datei – der Name des Ordners in das Betreff-Feld gesetzt. Für die Meldung bei den Properties 'msgBody1' und 'msgBody2' die beiden Platzhalter ("Datei", "Ordner") durch den gewünschten Text ersetzen.
ja, klar. Entschuldige bitte. Ich habe beim Aufruf des zweiten Handlers den Namen nicht angepasst ('sendMessage' statt 'sendFile'). Hier nochmals die korrigierte Version. --- on adding folder items to thisFolder after receiving fileList repeat with aFile in fileList set filePath to (aFile as string) if not (filePath ends with ":") then set aName to name of (info for (file filePath)) sendFile(aName, aFile) else set aName to name of (info for (file filePath)) sendMessage(aName) end if end repeat end adding folder items to ---
Ich muss leider diesen Thread einmal aus der Versenkung holen. Das Script benutze ich schon, um eine Reihe von FTP-Ordnern auf Dateneingang zu überwachen. Wenn eine Datei oder ein Ordner hochgeladen wird gibt es eine Mail an eine zentrale Adresse.
Soweit, so gut. Nun habe ich den Dateinamen als Betreff der Mail, kann ich denn zusätzlich noch den Ordnernamen vom überwachten Ordner anhängen im Betreff?
"Ordner X - Beispieldatei.jpg hochgeladen" für hochgeladene Dateien "Ordner X - Beispielordner hochgeladen" für hochgeladene Ordner
Guten Morgen Hans, mit viel Freude habe ich gestern diesen genau passenden Script gefunden! Ich habe AppleScript oder ähnliches bisher nicht benutzt... Vielen Dank für dieses Lösung. Damit werden einzelne Mails mit dem richtigen Betreff an den richtigen Empfänger gesendet. Nur - der Anhang fehlt - es sind .pdf. Jetzt arbeite ich heute unter 10.12.1, vielleicht liegt es daran. Die Mails gehen aus Mail raus (Outlook funktioniert nicht) Was muss ich hier ändern? Diese Funktion wäre so wunderbar. Grüsse, Renate
Hallo Hans, und wie froh war ich, das alte Script zu finden. Es funktioniert nämlich, bis auf den fehlenden der Anhang. Und da hoffe ich, dass es einen Weg geben wird. Kann es sein, dass am Anfang die "property" Attachment beschreiben werden muss? So siehts bei mir aus.
on adding folder items to thisFolder after receiving fileList repeat with aFile in fileList set filePath to (aFile as string) if not (filePath ends with ":") then set aName to name of (info for (file filePath)) sendFile(aName, aFile) else set aName to name of (info for (file filePath)) sendFile(aName) end if end repeat end adding folder items to
on sendFile(msgSubject, msgAttachment) tell application "Mail" 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 activate save newMessage send newMessage end tell end sendFile
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.
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.
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:
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?
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!
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!
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
Grüße Jens
Heute ist nicht aller Tage, ich komme wieder, keine Frage!
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
Grüße Jens
Heute ist nicht aller Tage, ich komme wieder, keine Frage!
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.
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
Grüße Jens
Heute ist nicht aller Tage, ich komme wieder, keine Frage!
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.
Das Entfernen der gesendeten Mitteilungen wollte nicht gelingen. Vielleicht hat ein Mitleser, welcher sich mit dem Scripten von "Mail" besser auskennt, eine Lösung.
– 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
Grüße Jens
Heute ist nicht aller Tage, ich komme wieder, keine Frage!
(Dieser Beitrag wurde von JeT am 13. Jan 2017, 09:18 geändert)
das Aufploppen des neuen Mailfensters kann ich nicht nachvollziehen.
Um den Namen des überwachten Ordners zu bekommen, muss dessen Pfad nicht festgestellt werden. Denn dieser steckt in 'thisFolder'.
Es reicht, den "Finder" zu bitten, den Namen des Kerls herauszurücken. Am besten gleich zu Beginn des 'on adding folder items'-Abschnitts.
Das Speichern des Dateinamens geschieht jetzt auch mit dem "Finder". Das bisher verwendete 'info for' wird als deprecated bezeichnet (= veraltet). Der zweite Beitrag dieses Themas ist von Ende März 2005. Und am Ende ist auch der Tipp zum Unsichtbarmachen: http://www.hilfdirselbst.ch/..._P419434.html#419434
Übrigens: In den Mail.app-Voreinstellungen kann definiert werden, dass bei eingehenden Mails ein Ton gespielt wird. Alternative: Die Benachrichtigungs-Zeile ergänzen mit sound name "Xxx"
Wenn die aktuelle Mitteilung gesendet ist: – Eine Pause von einer Sekunde einlegen; – eine Liste der gesendeten Mitteilungen erzeugen; – das erste Element dieser Liste entfernen.
im Prinzip ja. Von wegen IMAP: keine Ahnung, ob das einen Unterschied macht. :-( Zudem bin ich gerade unterwegs und kann nicht nachforschen. Vielleicht heute Abend.