• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Kann AppleScript sowas?

NickB

Carola
Registriert
01.06.10
Beiträge
115
Hallo Scripter :)

Ich habe HIER schon nach einer eventuellen Fertig-Lösung für meinen Bedarf gefragt. Da es bisher auch nach entsprechender Googelei nichts "fertiges" gibt, hab ich mich ein bissel mit AppleScript beschäftigt, bevor ich hier aber viel Aufwand treibe wollte ich gerne fragen, ob das was ich gern hätte überhaupt möglich ist.

Ausgangslage ist, dass ich gerne einen über Mail ankommenden Datensatz, der aus Name, Adresse und Terminauswahl einer Person besteht, in ein Numbers-Dokument einfügen möchte, und auch gleiche eine custom-Antwort-Email dazu rausschicken möchte (un-custom ginge ja über Mail-Regeln).

Ich kann Variablen bliebig definieren.

Ich stelle mir das so vor:

AppleScript holt sich Daten aus Mail von einem bestimmten Account ([email protected]).

Anhand der Betreffzeile oder des Inhalts der E-Mail (Veranstaltungsspezifikation, z.B. das Datum 25/10/2010 oder so)
werden die in der Mail enthaltenen Informationen in ein Numbers-Dokument eingefügt, und zwar in das Blatt, welches den gleichen Namen trägt wie der Betreff oder die Spezifikation der Email.

Also Beispiel. Es kommt eine Email mit Inhalt:

Betreff: VeranstaltungXY, 25.10.2010
Inhalt:

Veranstaltung XY, 25.10.2010

Vorname:
Hans

Nachname:
Wurst

Strasse:
Wurststrasse 10

Ort:
Wurstdort

PLZ:
06660

Teilnahmepreis:
€ 50,-


Dies alles soll nun in Numbers übernommen werden und zwar in das Dokument "Anmeldungen", in das Blatt "Veranstaltung XY, 25.10.2010", wobei "Name, Vorname, Strasse, Ort, PLZ, Teilnahmepreis" Spalten sind, und die jeweiligen Daten immer in eine neu generierte Zeile unterhalb der vorhandenen Daten gesetzt werden. Also vom Befehl her "Zeile einfügen".

Es muss keine neue Tabelle angelegt werden, die besteht bereits.

Im nächsten Schritt sollte eine neue Mail erstellt werden, wobei die Variablen "Name", "Teilnahmepreis" etc. innerhalb der Mail verwendet werden, so dass der Kunde sich auch direkt angesprochen fühlt und direkt eine Rechnungsstellung erfolgt.

Als weitere nette Sache wäre es schön, wenn das Script auch gleich eine "Zahlungseingang bestätigt"-Mail verfasst, diese jedoch manuell abgeschickt werden muss.

So. Ich würde einfach gerne eine lokal-basierte Lösung mit den bereits in OSX/iWork enthaltenen Funktionen haben, anstatt irgendwelche vertragsgebundenen Online-Lösungen zu beanspruchen.

Ich bin durchaus bereit mich selbst hin zu setzen und dies zusammen zu fummeln, würde aber vorher gerne von jemandem mit etwas Ahnung hören, ob dieses Skript überhaupt möglich ist, das ich die Beschränkungen und Grenzen der jeweiligen Programme nicht kenne.

Vielen Dank für jede Bemühung :)
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Hallo NickB,

bis hierher sehe ich kein grundlegendes Hindernis ...

In Deinem Beispiel fehlt aber noch die Mail-Adresse des Kunden ... ich nehme an die steht auch in der von einem Web-Formular erstellten Mail¿

Unter Library/Scripts sollten einige Beispielscripte für Mail zu finden sein ...


Gruss

Hans
 
  • Like
Reaktionen: NickB

toc-rox

Weigelts Zinszahler (Rotfranch)
Registriert
15.11.09
Beiträge
247
Es wäre zu überlegen, ob man die Vorgänge voneinander trennt:
- Mail-Regel: filtert Bedingung; erzeugt eine standardisierte Datei; speichert die Datei in einem Folder
- Folder-Action: führt die genannten Aktionen für jede neue Datei aus
Vorteil: Man könnte auch aus anderen Programmen oder von Hand Dateien in den Folder kopieren. Es würden dann exakt die gleichen Aktionen wie bei einer eingehenden Mail ausgeführt.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: NickB

NickB

Carola
Registriert
01.06.10
Beiträge
115
@-hans-
Ja, das fehlt natürlich nur im Beispiel, und gehört natürlich dazu :)

@toc-rox
Je flexibler die Sache ist, also wenn es möglich wäre das ohne mehr manuellen Mehraufwand noch nützlicher zu gestalten wäre das natürlich klasse. Da ich aber wie gesagt absoluter Script-Laie bin, suche ich natürlich erstmal nach Wegen, die mir möglich sind. Wenn es bereits "teilfertige" Lösungen über die Script-Library gibt, bin ich natürlich doppelhappy.

Ich denke ich werde morgen noch ein bissel Hirnschmalz auf der Suche nach einer passenden Strategie verbraten. Gibt es denn absolut empfehlenswerte Literatur oder Texte zum Thema?

Am wenigsten Überblick habe ich bei der Frage, wie ich die "korrekte" Info aus der jeweiligen Email heraus bekomme, kann Mail da in "Zeilen" unterscheiden, oder geht es anhand der "Variablen", also [Name] etc....?

Ich probier einfach mal drauf los und sehe schon was passiert :) Danke!
 

toc-rox

Weigelts Zinszahler (Rotfranch)
Registriert
15.11.09
Beiträge
247
Meine Empfehlungen für eine Einarbeitung in AppleScript:
- AppleScript 1-2-3 (879 Seiten)
- AppleScript Language Guide (262 Seiten)
Beide Dokumente stammen von Apple.
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Hallo NickB,

hänge das AS mal an Deine Regel. (ScriptEditor öffnen->copy paste des Codes->sichern unter ...) Generiere eine Beispielbuchung. Es wird ein Ordner Buchungen auf Deinem Desktop erstellt und eine erste Beispieldatei generiert. Bitte poste dann einmal den Inhalt der Beispieldatei, denn ohne wirklich konkrete Angaben ist's schwer ;)

Gruß

Hans

Code:
using terms from application "Mail"
    on perform mail action with messages allMessages for rule theRule
        
        tell application "Mail"
            activate
            repeat with i from 1 to count of allMessages
                set theMail to item i of allMessages
                
                set theSubject to subject of theMail
                set theContent to content of theMail
                my Content2txt(theSubject & return & theContent)
            end repeat
        end tell
        
    end perform mail action with messages
end using terms from


on Content2txt(theString)
    set folderPath to POSIX path of (path to desktop) & quoted form of "Buchungen/"
    do shell script "mkdir -p " & folderPath
    --funktioniert nur einmal ...
    set the_file to ((path to desktop as text) & "Buchungen:" & "Beispielbuchung.txt")
    set dataStream to open for access file the_file with write permission
    set eof of dataStream to 0
    write theString to dataStream starting at eof
    close access dataStream
end Content2txt
 

NickB

Carola
Registriert
01.06.10
Beiträge
115
Woah vielen Dank :)

Das Script enthält ja einige Begriffe die ich noch garnicht kannte...

Also ich habs als Regel in Mail eingebracht, durchgeführt und eine Beispielbuchung erstellt und abgeschickt. Daraufhin wird bei "Regel anwenden" ein Ordner auf dem Desktop erstellt, mit Name "Buchungen", der die Datei "Beispielbuchung.txt" enthält.

Beispielbuchung.txt enthält dann exakt den Inhalt der "Buchungmail" aus dem Anmeldeformular, mit gleichen Zeilenabständen usw.

Ich mache mal noch ein paar Buchungen um zu sehen, wie das Skript damit umgeht...
 

NickB

Carola
Registriert
01.06.10
Beiträge
115
Ah ok ... wenn ich das Gleiche Prozedere nochmal mache, wird die erste Buchung ersetzt. Das geht natürlich nicht gut :)
Das ist so ziemlich mein "Kernproblem" bei der Vorstellung "wie". Ich kann mir ja schon denken, wie man eine Numbers-Tabelle mit einem bestimmten Inhalt und Namen erzeugt - aber wie jede neue Buchung genau in die gleiche Tabelle geht und immer eine neue Zeile...hm
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Hallo NickB,

das Script schreibt lediglich Betreff und Content der mail in die Datei. Ausgehend davon, dass die Struktur der eingehenden Buchung immer gleich ist, dient es nur dazu einmal zu sehen, wie die mail aufgebaut ist. Darum die Bitte das Ergebnis zu posten. Der zweite Schritt wäre dann z. B. für jede Buchung eine eigene Txt-Datei anzulegen (Name der Datei z.B. Email oder Name ...)

Gruß

Hans
 

NickB

Carola
Registriert
01.06.10
Beiträge
115
Ah ok. Hier also der TXT-Inhalt:

Beispielbuchung Form Submission

There has been a submission of the form Beispielbuchung on through your Concrete5 website.

Anrede
Frau

Die Anmeldung gilt für:
39.13. - 42.13.2010 München

Tarif
Normalpreis 400,-€

Name
rrbrv

Vorname
hrtr

E-Mail
[email protected]

Straße, Nr.
ffvadvdcd

PLZ
54354

Ort
gbbf

Telefon
hnbg

Wobei ich mittlerweile gemerkt habe, dass das Script auch ältere Buchungen (gleicher E-Mail-Account, anderer Betreff) kopiert hat. Da muss ich also die Regel etwas weiter spezifizieren. Vielen Dank für den Support, ich bin grade erst am Einlesen ins AppleScripting und das hilft mir sehr!
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Hallo NickB,

das folgende Script sollte Dir den Content der eingehenden Buchungen in Textdateien in den Ordner Buchungen auf dem Desktop als Record ablegen.

Verwenden kannst Du diese Textdatei indem du im Scripteditor folendes kleines Script ausführst:
Code:
set TheRecord to read file ((choose file) as text) as record

Das Ergebnis (Ergebnisfenster im Scripteditor) sollte dann so aussehen:
Code:
{Anrede:"Frau", Veranstaltung:"39.13. - 42.13.2010 München", Preis:"Normalpreis 400,-€", Nachname:"rrbrv", Vorname:"hrtr", mail:"[email protected]", Strasse:"ffvadvdcd", PLZ:"54354", Ort:"gbbf", Tel:"hnbg"}

Ein Record ist quasi die Variable nebst Inhalt und kann z.B mit:
Code:
mail of theRecord
verwendet / angesprochen werden ... d.h. diesen Record kannst Du zum ausfüllen der Tabellen und zum senden der personalisierten mails verwenden.

Achtung: Sollte der Inhalt Deiner Buchungsmail auch nur geringfügig von Deinem Posting abweichen, dann kommt erstmal nur missmatch dabei heraus!!

Toi, toi, toi ;)

Hans

Code:
using terms from application "Mail"
	on perform mail action with messages theMessages for rule theRule
		tell application "Mail"
			repeat with theMail in theMessages
				set theContent to content of theMail
				my GetContent(theContent)
				
			end repeat
			
		end tell
		
	end perform mail action with messages
end using terms from

on GetContent(theString)
	set LineList to every paragraph of theString
	set InfoList to {}
	set Counter to 0
	
	repeat with i from 1 to count of LineList
		set EntryNbrList to {4, 7, 10, 13, 16, 19, 22, 25, 28, 31}
		set Counter to Counter + 1
		if Counter is in EntryNbrList then
			set theEntry to item i of LineList
			copy theEntry to end of InfoList
		end if
	end repeat
	
	set theRecord to {Anrede:(item 1 of InfoList), Veranstaltung:(item 2 of InfoList), Preis:(item 3 of InfoList), Nachname:(item 4 of InfoList), Vorname:(item 5 of InfoList), mail:(item 6 of InfoList), Strasse:(item 7 of InfoList), PLZ:(item 8 of InfoList), Ort:(item 9 of InfoList), Tel:(item 10 of InfoList)}
	
	
	my Content2txt(theRecord)
	
end GetContent

on Content2txt(aRecord)
	set folderPath to POSIX path of (path to desktop) & quoted form of "Buchungen/"
	do shell script "mkdir -p " & folderPath
	set the_file to ((path to desktop as text) & "Buchungen:" & (mail of aRecord))
	set dataStream to open for access file the_file with write permission
	set eof of dataStream to 0
	write aRecord as record to dataStream starting at eof
	close access dataStream
end Content2txt
 

NickB

Carola
Registriert
01.06.10
Beiträge
115
Hallo -hans-, vielen lieben Dank nochmal für die Hilfe. Leider läuft es so noch nicht. Es kommt, wenn ich die .txt über den Skriptbefehl öffne:
error "Parameterfehler." number -50 from file "Macintosh HD:Users:meinmac:Desktop:Buchungen:Beispielbuchung.txt"

Und wenn ich das zweite Skript (in Deinem letzten Post "...using terms from app...") alleine verwende, kommt erst gar keine .txt an, es wird nur der Folder "Buchungen" generiert.

Ich muss jetzt rückwärts rollen und erst einmal recherchieren was die ganzen Befehle bedeuten, die Du dort verwendet hast, um zu verstehen was da eigentlich passiert.
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Hllo NickB,

die Mail kommt nach Deinem Posting mit folgendem Content-Inhalt an:
Code:
There has been a submission of the form Beispielbuchung on through your Concrete5 website.

Anrede
Frau

Die Anmeldung gilt für:
39.13. - 42.13.2010 München

Tarif
Normalpreis 400,-€

Name
rrbrv

Vorname
hrtr

E-Mail
[email protected]

Straße, Nr.
ffvadvdcd

PLZ
54354

Ort
gbbf

...somit ist die Mail-Adresse in Zeile 19 und wird im Script als Dateiname für die txt-Datei verwendet. Eine Datei Namens "Beispielbuchung.txt" kann also eigentlich nicht mehr vorkommen, wenn Du das neue Script an die Regel anhängst, dann sollte der Dateiname immer eine Mail-Adresse sein...


... sollte mit dem neuen Script nur ein Ordner bzw. kein Ordner (bitte Ordner löschen und testen) und keine txt-Datei angelegt weren, dann liegt evtl. etwas mit der Buchungs-Mail im Argen ...

Kannst Du mir eine solche Mail senden¿

Gruß

Hans

P.S. gehört: "Beispielbuchung Form Submission
"
noch zum Content? ich bin bis Dato davon ausgegangen, dass es die Betreff-Zeile ist ..
 

NickB

Carola
Registriert
01.06.10
Beiträge
115
Hallo -hans-,

ich denke ich habe den Fehler gefunden. Es ist noch eine Leerzeile über dem "There has been...". Ich werde den Zeilen-Index also jeweils um eine Ziffer erhöhen, dann sollte es ja klappen.

Vielen Dank nochmal. Ich hab schon ein schlechtes Gewissen :)
 

NickB

Carola
Registriert
01.06.10
Beiträge
115
Haha toll es klappt :) Genau so wie Du es voraussagst :)

Jetzt hab ich nebenbei noch bissel was kapiert und jetzt kommt der nächste Task - Die Daten in eine Numbers-Tabelle einfügen und eine Email draus basteln. Vielen vielen Dank!
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
;)

... und google mal nach der osax xmail. Damit lassen sich Antwortmails sicherlich einfacher versenden als über Mail ...

Gruß

Hans