• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Email Anhang per Apple Script automatisch speichern?

matthias321

Boskoop
Registriert
16.11.12
Beiträge
41
Hallo,

hast du vielleicht noch eine Idee für mich? Ich komme aktuell nicht wirklich weiter.

Gruß Matthias
noch ein kleine Info.
wenn beispielsweise 4 Emails zur gleichen Zeit ankommen, speichert er nur von einer
Email den Anhang als 4 Datein mit den Namen

Rechnung zur Bestellung 49850
Rechnung zur Bestellung 49850 (1)
Rechnung zur Bestellung 49850 (2)
Rechnung zur Bestellung 49850 (3)

Bei jeder Datei handelt es sich allerdings um die gleiche Rechnung.
Ich hoffe es ist einigermaßen verständlich.

Gruß Matthias
 
Zuletzt bearbeitet:

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo Matthias,

das Ergebnis kann ich nicht nachvollziehen. Das im Beitrag #17 gepostete Skript hängt jedem Anhang (!) eine laufende Nummer an (das könnte man noch schöner machen, wäre aber komplizierter und damit mit Aufwand verbunden *gg)

Sprich, folgende Datei kann es so gar nicht geben:
Rechnung zur Bestellung 49850

Es müsste so aussehen:
Rechnung zur Bestellung 49850_1

Bei gleichem Betreff in unterschiedlichen Emails:
Rechnung zur Bestellung 49850_1
Rechnung zur Bestellung 49850_2
Rechnung zur Bestellung 49850_3
Rechnung zur Bestellung 49850_4


Oder bei unterschiedlichen Betreffs und mehreren Rechnungen in einer Email:
Rechnung zur Bestellung 49850_1
Rechnung zur Bestellung 49851_1
Rechnung zur Bestellung 49852_1
Rechnung zur Bestellung 49853_1
Rechnung zur Bestellung 49853_2


Kopiere noch mal den Code und erstelle ein neues Skript

Gruß
 

matthias321

Boskoop
Registriert
16.11.12
Beiträge
41
Hallo,

sorry, du hast natürlich recht. Die Dateien sehen wie folgt aus:

Rechnung zur Bestellung 49850_1
Rechnung zur Bestellung 49850_2
Rechnung zur Bestellung 49850_3
Rechnung zur Bestellung 49850_4

Die Datei ist aber immer die gleiche.

Nochmal zur Erklärung. Der Betreffe ist immer ein anderer. Er unterscheidet sich immer von der Bestellnummer.

Jede Email hat immer eine eigene Rechnung. Der Betreff jeder Email heißt "Rechnung zur Bestellung_(Bestellnummer).

Leider klappt dazu nicht der Code.

Schöne Grüße
Matthias
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo,

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 " & quoted form of 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
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo,

gehen wir der Sache auf den Grund!

1) Welches macOS läuft auf dem Mac?
Falls Big Sur, so kann ich schon mal sagen, dass es in puncto AppleScript (leider) voll von Bugs ist!

2) Es kann sein, dass die Regel bug-bedingt einfach nicht mit dem "do shell script" klar kommt.
Falls es immer um den gleichen Absender mit den gleichen Betreffs geht, kann man den Block sowieso rausnehmen.
Entferne:
Code:
         tell me
                    set theSubject to do shell script "echo " & quoted form of theSubject & " | sed 's/:/–/g'"
                end tell

3) Erstelle folgendes Skript, wähle dann beliebig viele der betreffenden Emails in Mail aus und lasse das Skript im Skripteditor laufen. Stelle als Skriptergebniss im Skript-Fenster unten "Antworten" ein. Überprüfe im Zielordner, ob alle Anhänge wie gewünscht gesichert werden.

Code:
tell application "Mail"

    -- Lege hier den Zielordner fest
    set destFolder to "macOS:Users:usw.usw:"

    set theMessages to selection
    
    repeat with oneMessage in theMessages
        set x to 1
        set theSubject to subject of oneMessage
        
        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

Gruß
 

matthias321

Boskoop
Registriert
16.11.12
Beiträge
41
Hallo,

nochmal vielen Dank, das du dir soviel Zeit für mein Problem nimmst.

Als zuerst einmal habe ich die aktuellste Version Big Sur drauf 🤔

Ich hab nun dein Script manuell ausgeführt ohne Email Regeln und siehe da, nun
werden alle Anhänge in den Ordner korrekt gespeichert.

Nun habe ich den Script wieder in meine Emailregel integriert und dort funktioniert es
wieder nicht.

Der Absender ist übrigens immer gleich bei allen Emails.

Es ist wirklich sehr merkwürdig.

Schöne Grüße
Matthias
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Tja, dann kann man wohl nix machen :(
Immerhin kannst du die Anhänge mit dem Skript schnell in den Ordner laden.

Funktioniert die Regel denn jetzt, wenn du sie (wie schon mal in #11 beschrieben) manuell anwendest?
 

matthias321

Boskoop
Registriert
16.11.12
Beiträge
41
Hallo,

ok, aber dann bräuchte ich ja nicht unbedingt das Script, da ich ja alle Email auch so markieren kann und über "Dateianhang sichern..." die Datein in den jeweiligen Ordner speichern kann.
Echt schade, das dieses über Apple nicht funktioniert. Über Windows ging dieses problemlos.

Falls du vielleicht noch eine andere Idee hast, wäre es schön wenn du dich nochmal bei mir melden könntest.
Aber trotzdem vielen Dank für dein großes bemühen. 👍 👍 👍 👍 👍 👍 👍
 

Lordcord

Johannes Böttner
Registriert
14.01.07
Beiträge
1.160
Ich hänge mich hier mal an.

Das Eingans gepostete Script funktioniert bei mir, wenn ich es auf bestehende E-Mails anwende. Bei neuen E-Mails funktioniert es nicht, da die Anhänge einfach nicht geladen werden. Mache ich da etwas falsch?
 

Mr100

Erdapfel
Registriert
25.11.22
Beiträge
4
Hallo Zusammen,

ich nutze:
iMac
Retina 5K, 27", 2020
macOS Ventura 13.1 (22C65)
Mail app Version 16.0 (3731.300.101.1.3)

Scripeditor: Version 2.11 (227)
AppleScript 2.8

Ich versuche ebenfalls die Anhänge zu speichern, wenn im Betreff oder im Inhalt das Wort "Rechnung" vorgefunden wird.
jedoch möchte das Script einfach die Anhänge aus den Testemails nicht speichern.

Gibt es zu meiner Konfiguration ggf. eine Änderung die ich zum oben genannten script beachten muss?

Danke und Grüße

Michael
 

Mr100

Erdapfel
Registriert
25.11.22
Beiträge
4
Ich poste mal mein Script rein, mit dem ich es gerade versuche aber nicht schaffe:
(sorry for Reposting)

Code:
tell application "Mail"
    set theMessages to selected messages
    repeat with i from 1 to number of items in theMessages
        set thisMessage to item i of theMessages
        set theSender to sender of thisMessage
        set theSubject to subject of thisMessage
        set theDate to date received of thisMessage
        set theFileName to theSubject & "-" & theDate & "-" & theSender
        set theAttachmentList to every attachment of thisMessage
        repeat with j from 1 to number of items in theAttachmentList
            set oneAttachment to item j of theAttachmentList
            set theUserName to (do shell script "whoami")
            set savePath to ("/Users/" & theUserName & "/Desktop/Anhänge/") & theFileName & "/"
        end repeat
    end repeat
end tell

vielleicht könnt ihr mir helfen, was ich falsch mache.

ich nutze:
iMac
Retina 5K, 27", 2020
macOS Ventura 13.1 (22C65)
Mail app Version 16.0 (3731.300.101.1.3)

Scripeditor: Version 2.11 (227)
AppleScript 2.8
 

AndaleR

Moderator
AT Moderation
Registriert
09.08.20
Beiträge
7.011
Werbung für die Software und keine Lösung für das Problem?
 

AndaleR

Moderator
AT Moderation
Registriert
09.08.20
Beiträge
7.011
Entschuldige. Ich bin vorhin auf deren Website rausgekommen, warum auch immer…
 

Mr100

Erdapfel
Registriert
25.11.22
Beiträge
4
Hallo Tokyo Rose,
Danke für deinen Post.
Ich habe mir das Programm installiert.
Das ist bestimmt eine Menge Arbeit gewesen. Respekt davor.
Doch so eine App möchte ich nicht zusätzlich installieren.
Ich versuche mit so wenig Mitteln und apps auszukommen wie es mir nur möglich ist.
Nach dem Motto "keep it simple".
Bitte fühle dich da in feinster Weise angegriffen.

Ich würde gerne falls es möglich ist, ohne deinem mail Archiver auskommen.
Hättest du dennoch Interesse mir zu helfen?

Danke dir und einen tollen Start allen in die Woche.
Grüße

Michael

ich nutze:
iMac
Retina 5K, 27", 2020
macOS Ventura 13.1 (22C65)
Mail app Version 16.0 (3731.300.101.1.3)

Scripeditor: Version 2.11 (227)
AppleScript 2.8
 

beatrixwillius

James Grieve
Registriert
29.12.19
Beiträge
133
Danke für deinen Post.
Hallo Erdapfel,

auf der verlinkten Seite ist NUR ein AppleScript. Ich verwende das Script täglich selbst:


AppleScript:
--set main folder of attachments
set attachmentsPath to "/Users/beatrixwillius 1/Documents/Development/Mail Archiver issues from users"
try
    set attachmentsFolder to (attachmentsPath as POSIX file) as alias
on error errMsg number errNr
    display dialog "Please select a folder for saving the attachments! Error: " & errMsg & " Nr.: " & errNr
    return
end try
if not my isdirectory(attachmentsPath) then
    display dialog "Please select a folder for saving the attachments!"
    return
end if

--set how the sub folders for the attachments should be named
set UseSubject to "false"
set UseFrom to "true"
if not UseSubject = "true" and not UseFrom = "true" then
    display dialog "Please set the name of the attachment folders either to the subject or the from of the email!"
    return
end if

tell application "Mail"

    --get the selected emails
    set selectedMessages to selection

    --loop over the messages to get and save the attachments
    try
        repeat with theMessage in selectedMessages

            --do only something if the message has attachments
            set theAttachments to theMessage's mail attachments
            if (count of theAttachments) > 0 then

                --make folder in Finder with the selected name option
                set theSubject to subject of theMessage
                set Originator to sender of theMessage
                tell application "Finder"
                    activate
                    if UseSubject = "true" and not UseFrom = "true" then
                        set FolderName to theSubject
                    else if UseFrom = "true" and not UseSubject = "true" then
                        set FolderName to Originator
                    else if UseFrom = "true" and UseSubject = "true" then
                        set FolderName to Originator & " " & theSubject
                    end if
                    try
                        set newFolder to (make new folder at attachmentsFolder with properties {name:FolderName})
                    on error errMsg number errNr
                        if errNr = -48 then
                            --folder already exists
                            set newFolder to get item 1 of (every folder in attachmentsFolder whose name contains FolderName)
                        else
                            display dialog "Error: " & errMsg & " Nr.: " & errNr
                            return
                        end if
                    end try
                    open newFolder
                end tell

                --save the attachments
                repeat with theAttachment in theAttachments
                    set originalName to name of theAttachment
                    set savePath to (newFolder as rich text) & originalName
                    save theAttachment in file savePath
                end repeat
            end if
        end repeat
    on error errMsg number errNr
        display dialog "Error: " & errMsg & " Nr.: " & errNr
    end try

end tell

--check if the path is a directory and is actually there
on isdirectory(someItem) -- someItem is a file reference
    set filePosixPath to quoted form of (POSIX path of someItem)
    set fileType to (do shell script "file -b " & filePosixPath)
    if fileType ends with "directory" then return true
    return false
end isdirectory
 

Mr100

Erdapfel
Registriert
25.11.22
Beiträge
4
Hi,
vielen Dank dafür.

Ich habe den Code durchgelesen und glaube weitestgehend verstanden:
Einzige Änderung die ich durchführte war der Speicherort

Code:
set attachmentsPath to "/Users/Michael/Documents/Test"

Ich habe den Code im folgenden Pfad gespeichert:

Code:
/Users/michael/Library/Application Scripts/com.apple.mail

Die Regel die ich aufgesetzt habe lautet:

Wenn eine Email gesendet an "ist" "Emailadresse" kommt dann führe Script aus.

Leider passiert da nichts :(
als ich einen Orderpfad angegeben habe der nicht existiert kam jedoch die von dir programmierte Fehlermeldung.

hast du eine Idee?

Danke und Grüße