Email Anhang per Apple Script automatisch speichern?

matthias321

Boskoop
Registriert
16.11.12
Beiträge
41
Hallo zusammen,

ich speichere meine Emailanhänge (Rechnungen von Kunden) automatisch über die Email Regel mit Hilfe des folgenden Skriptes:

using terms from application "Mail"

on perform mail action with messages theMessages for rule theRule

tell application "Mail"

repeat with oneMessage in theMessages

set {mail attachment:theAttachments} to oneMessage

repeat with oneAttachment in mail attachments of oneMessage

save oneAttachment in ("Macintosh HD:Users:Downloads:Neuer Ordner:") & (name ofoneAttachment)

end repeat

end repeat

end tell

end perform mail action with messages

end using terms from

Nun möchte ich gerne das der Dateiname = der Betreff der Email ist.

Hat vielleicht jemand eine Idee, was ich dafür an den Script noch ändern müsste?

Vielen Dank schon einmal für eure Hilfe.

Gruß Matthias
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.358
Hallo,


1) vier Stunden und schon pushen? 🤪
2) bitte das nächste mal das Script als </> Code einfügen

code.png


3) Tipp
Code:
set subj to subject of oneMessage


Gruß
 
  • Like
Reaktionen: doc_holleday

matthias321

Boskoop
Registriert
16.11.12
Beiträge
41
Hallo,

vielen Dank für deine Antwort. Aber irgendwie funktioniert es mit diesem Code auch noch nicht.
Es wird nach wie vor die Datei mit Ihrem Dateinamen gespeichert und nicht mit dem Emailbetreff.
Ich bin allerdings auch nicht so fit in Sachen "Scripts", vielleicht habe ich den Code auch an der falschen Stelle eingefügt.
Wo genau müsste ich diesen denn einfügen?
Vielen Dank schon einmal im Voraus für deine Hilfe.

Grüße Matthias
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.358
Hallo,

davon ausgehend, dass die Rechnungen als PDF verschickt werden, könnte es so aussehen:
Code:
tell application "Mail"

    set theMessages to selection

    repeat with oneMessage in theMessages

        set {mail attachment:theAttachments} to oneMessage

        if (count of mail attachments of oneMessage) > 1 then
            set x to 1
        else
            set x to ""
        end if

        repeat with oneAttachment in mail attachments of oneMessage

            set subj to subject of oneMessage

            tell me
                set subj to do shell script "echo " & quoted form of subj & " | sed 's/:/–/g'"
            end tell

            if x is "" then
                set subj to subj & ".pdf"
            else
                set subj to subj & "_" & x & ".pdf"
            end if

            save oneAttachment in ("Macintosh HD:Users:Downloads:Neuer Ordner:") & subj

            set x to x + 1

        end repeat

    end repeat

end tell

Eventuell vorhandene ":" im Betreff werden zu "–"

Gruß
 
Zuletzt bearbeitet:

matthias321

Boskoop
Registriert
16.11.12
Beiträge
41
Hallo,

super jetzt funktioniert es perfekt!
Vielen vielen lieben Dank für deine Hilfe.
Diese erspart uns erheblich viel Arbeit.

Schöne Grüße
Matthias
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.358
Hallo,

ich habe noch mal nachgedacht und meinen Beitrag editiert....
  • Sonderzeichen: werden jetzt abgefangen
  • Mehrere Rechnungen, bzw. Anhänge: es werden laufende Nummern angehängt

So sollte es aber eigentlich klappen, ansonsten noch mal melden

Gruß
 

matthias321

Boskoop
Registriert
16.11.12
Beiträge
41
Hallo,

ich bin es nochmal.

Ich wollte nun den Speicherordner ändern allerdings funktioniert dann das automatische Speichern nicht mehr.

Es muss immer der Ordner Downloads vorhanden sein. Dort kann ich es in irgendeinen Unterordner speichern.

Wenn ich nach Users allerdings einen anderen Ordner verwende klappt es nicht mehr.

Hast du vielleicht noch einen Tipp für mich, an was das liegen könnte?



Schöne Grüße

Matthias
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.358
Hallo,

tja, früher ging das, aber mittlerweile sind die Zügel in macOS etwas fester angezogen.

Momentan sieht es wohl so aus, dass man mit AppleScript Anhänge nur in den in den Mail.app Einstellungen eingetragenen Downloads-Ordner laden kann. Und der ist in den Standardeinstellungen der Ordner "Downloads".

Ich habe da spontan keine Lösung, höchstens einen Workaround: Erstelle ein Alias oder Sym-Link des Ordners an deinem gewünschten Ort, oder ändere den Standard-Pfad des Downloads-Ordner in Mail...

Gruß
 

matthias321

Boskoop
Registriert
16.11.12
Beiträge
41
Hallo,

ok, vielen Dank für die Info. Ich habe jetzt die Unterordner in Downloads angelegt und nun funktioniert es auch.
Ich habe folgenden Code nun genommen:

Code:
using terms from application "Mail"
    
    on perform mail action with messages theMessages for rule theRule
        tell application "Mail"
            
            repeat with oneMessage in theMessages
                
                set {mail attachment:theAttachments} to oneMessage
                set subj to subject of oneMessage
                
                tell me
                    set subj to do shell script "echo " & subj & " | sed 's/:/–/g'"
                end tell
                
                repeat with oneAttachment in mail attachments of oneMessage
                    
                    save oneAttachment in ("Macintosh HD:Users:Downloads:Onlineshop :Rechnungen Onlineshop:automatische Rechnungen:2021:") & subj & ".pdf"
                    
                end repeat
                
            end repeat
            
        end tell

Jetzt habe ich aber noch ein Problem welches auftritt. Wir bekommen immer mehrere Rechnungen auf einmal von unserem Lieferanten, allerdings jede in einer separaten Email.
Da diese immer genau zur gleichen Zeit ankommen wir immer nur von einer Email die PDF Datei gespeichert. Die restlichen werden sicherlich wegen der gleichen Zeit ignoriert.
Kannst du mir dazu vielleicht noch einen Tipp geben, was ich dazu an den Code ändern muss?
Vielen Dank.

Gruß Matthias
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.358
Hallo,

das Skript arbeitet eigentlich alle Nachrichten ab, die die Bedingungen der Regel erfüllen.
Da AppleScript nahe an der Sprache angelegt ist, kann man es quasi richtiggehend im Code "lesen":
Code:
on perform mail action with messages theMessages for rule theRule
Mail-Aktion mit Nachrichten (=E-Mails) für Regel durchführen

Wenn es nicht funktioniert, dann kann man versuchen, die Regel anzupassen oder muss sich was anderes überlegen.
Wäre ja durchaus möglich, dass, wie du vermutest, die E-Mails tatsächlich "verschluckt" werden. Da kann ich nichts zu sagen.

Ich habe ein Intelligentes Postfach, in dem meine eingehenden Rechnungen landen (Betreff enthält Rechnung ... Anhangstyp ist PDF)
Du könntest in solch einem intelligenten Postfach die Emails markieren und "Regeln anwenden" klicken, dann werden die Regeln erneut ausgeführt. Eventuell dann die Zeile mit "save oneAttachment" zur Sicherheit in einen try-Block packen
Code:
try
save oneAttachment usw.
end try

Gruß
 

matthias321

Boskoop
Registriert
16.11.12
Beiträge
41
Leider bin ich am verzweifeln. Habe schon die verschiedensten Varianten ausprobiert, aber leider speichert er selbst bei nur zwei ankommende Emails die zur gleichen Zeit ankomme nur eine Datei ab.
Über einen hilfreichen Tipp wäre ich wirklich dankbar.
Grüße Matthias
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.358
Hallo,

ich antworte meist recht knapp, und daher ist es eventuell nicht rüber gekommen. Versuche, das Problem einzugrenzen!

  • Funktionieren Mail-Regeln generell nicht bei gleichzeitig ankommenden Emails, oder nur, wenn AppleScript ausgeführt wird?
  • Hast du probiert, die Regel z.B. mit weiteren Bedingungen zu verändern?
  • Und: wie sieht die jetzige Regel überhaupt aus?
Gruß
 

matthias321

Boskoop
Registriert
16.11.12
Beiträge
41
Hallo,

also wenn ich beispielsweise eine Regel anwende, das die ankommenden Emails in einen Ordner landen sollen funktioniert es.
Allerdings kann ich das Speichern von Anhängen ja nur über das AppleScript durchführen. Daher habe ich keine anderen Regeln wo ich es mit ausprobieren kann.

Meine Regel sieht folgendermaßen aus:

Bei erfüllen "einer" der folgenden Bedingungen:
"von" "enthält" "EmailAdresseAbsender"

Folgende Aktionen durchführen
"AppleScript ausführen" "Anhang speichern"
"Farbe festlegen" "Hintergrund" "Grün"

Alle Emails die zur gleichen Zeit ankommen werden grün markiert, das funktioniert als soweit. Allerdings wird weiterhin nur eine Datei gespeichert.

🤔
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.358
Hallo,

zumindest bezüglich der Wahl des Speicher-Ordners habe ich eine gute Nachricht!

Ändere folgende Zeile und füge file hinzu
Code:
save oneAttachment in file ("Hier jetzt der Ordner deiner Wahl") & subj & ".pdf"

und folgende Zeile kannst du sowieso aus dem Skript löschen, da die Variable theAttachments gar nicht weiter von dir benutzt wird:
Code:
set {mail attachment:theAttachments} to oneMessage

Ansonsten ist das Skript jedoch ok.

Gruß
 

matthias321

Boskoop
Registriert
16.11.12
Beiträge
41
Hallo,

vielen Dank für den Tipp. Werde Ihn gleich umsetzen.
Allerdings habe ich nach wie vor das Problem das er immer nur eine PDF Datei von den ca. 30 Email die ich immer zu gleichen Zeit erhalte speichert. Dadurch ist es aktuell für mich noch nutzlos.
Ich habe wie bereits geschrieben mittlerweile auch alle Email Regeln durchgespielt aber leider ohne Erfolg.
Falls dir noch was einfällt, kannst du mir ja Bescheid geben :eek:
Trotzdem vielen Dank für deine bisherigen Bemühungen.

Gruß Matthias Kaufmann
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.358
Hallo,

kann es sein, dass der Betreff der Emails etwa immer gleich lautet?
Dann kann es natürlich nicht funktionieren, da ja mehrere Dateien mit dem gleichen Namen nicht in einem Ordner existieren können!
Code:
using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule
      
        -- Lege hier den Zielordner fest
        set destFolder to "macOS:Users:usw.usw:"

        tell application "Mail"
          
            repeat with oneMessage in theMessages
                set x to 1

                set theSubject to subject of oneMessage
                tell me
                    set theSubject to do shell script "echo " & theSubject & " | sed 's/:/–/g'"
                end tell
              
                repeat with oneAttachment in mail attachments of oneMessage
                    tell me
                        set _exists to true
                        repeat until _exists is false
                            try
                                alias (destFolder & theSubject & "_" & x & ".pdf")
                                set x to x + 1
                            on error
                                set _exists to false
                            end try
                        end repeat
                    end tell
                  
                    set theName to theSubject & "_" & x & ".pdf"
                    save oneAttachment in file (destFolder & theName)

                end repeat
            end repeat     
        end tell 
      
    end perform mail action with messages
end using terms from
 
Zuletzt bearbeitet:
  • Like
Reaktionen: matthias321

matthias321

Boskoop
Registriert
16.11.12
Beiträge
41
Hallo,

vielen Dank für den neuen Code.
Also der Fehler scheint tatsächlich im Namen des Betreffs zu liegen.
Der Betreff jeder Email lautet: "Die Rechnung zur Bestellung_(jeweilige Bestellnummer)"
Der Name ist also nicht komplett identisch, er unterscheidet sich immer von der jeweiligen Bestellnummer.

Durch den neuen Code werden nun alle PDF Datei gespeichert. Allerdings wird nun immer der Betreff-Name der
ersten Email genommen. Was bedeutet das die PDF Datei folgendermaßen heißen:

"Die Rechnung zur Bestellung_303354"
"Die Rechnung zur Bestellung_303354_1"
"Die Rechnung zur Bestellung_303354_2"

usw.

Das heiß nun stimmt der Dateiname nicht mehr ganz :eek:

Ich hoffe ich habe es einigermaßen darstellen können.

Gruß Matthias
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.358
Habe meinen Beitrag editiert,
set x to 1 war an einer falschen Stelle...

Gruß
 

matthias321

Boskoop
Registriert
16.11.12
Beiträge
41
Guten Morgen,

vielen Dank für deine späte Antwort.
Leider besteht der Fehler noch immer.
Die Dateien sehen nach wie vor folgendermaßen aus:

"Die Rechnung zur Bestellung_303354"
"Die Rechnung zur Bestellung_303354_1"
"Die Rechnung zur Bestellung_303354_2"

sie müssten aber so aus sehen:

"Die Rechnung zur Bestellung_303354"
"Die Rechnung zur Bestellung_303360"
"Die Rechnung zur Bestellung_303371"

Grüße
Matthias