Speichern Sie Anhänge von Mail.app basierend auf Betreffproblemen

Was ich versuche zu tun: Ich muss einige persönliche Texte scannen, die ich für meinen Mentor mache, um sie zu überprüfen. Ich habe 3 Arten des Schreibens J, F, W. Ich benutze meinen Scanner, um sie per E-Mail zu senden (es ist eine Arbeitssache, also kann ich es nicht ändern). Ich hatte heute Morgen diese Idee, dass ich den Code in die Betreffzeile auf den Scanner legen könnte und dann eine Regel habe, um die E-Mails zu verarbeiten und im richtigen Ordner für mich abzulegen.

Ich habe das Skript im Beitrag Anhänge speichern von Mail.app basierend auf Betreff , Antwort von markhunte gefunden und wiederverwendet

Ich verwende Mail unter MacOSX 10.13.6

Zum Testen habe ich die Mailregelfunktion auskommentiert.

Mein Test besteht nur darin, dass ich die Nachrichten in der Mail-App manuell auswähle (wird in eine Regel umgewandelt, sobald es funktioniert).

Eine Sache, die ich nicht verstehe, ist, dass beim ersten Speichern der Datei die Datei nicht umbenannt wird. Sie werden sehen, dass ich Protokolle verwendet habe, um mir dabei zu helfen, dies herauszufinden. Bei der ersten Ausführung des Skripts geht die IF-Anweisung davon aus, dass der Ordner existiert, und benennt die Datei daher nicht um. Führen Sie das Skript erneut aus und benennt es korrekt um.

Ich bin etwas verwirrt, Hilfe wäre sehr dankbar.

Meine E-Mail enthält Betreffzeilen mit einem Buchstaben (ich mache das, wenn ich Dokumente scanne, um es einfacher zu machen). Der Name des Anhangs lautet immer scan.pdf

Verzeichnis mit Scans

Es scheint auch ein Problem mit der CodeList zu geben, es findet nicht das erste Element in der Liste (daher habe ich J zweimal), derzeit keine große Sache.

    (*using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule*)

set codeList to {"J", "F", "W", "O", "J"}
set subFolder to ""
set theDate to do shell script "date +%Y_%m_%d_%H%M%S"
--set ruleName to name of theRule


-- The folder to save the attachments in (must already exist)
tell application "Finder" to set attachmentsFolder to ((path to home folder as text) & "Desktop") as text

tell application "Mail"
    set theMessages to the selected messages of the front message viewer
    --set theMessage to first item of theMessages

    repeat with eachMessage in theMessages
        set theSubject to subject of eachMessage
        repeat with i from 1 to number of items in codeList
            set this_item to item i of codeList
            if theSubject contains this_item then

                set subFolder to this_item
                log "Found subject match " & this_item

            else
                -- display dialog "no subject " & this_item
                log "no subject " & this_item

            end if

        end repeat
        if (count of (eachMessage's mail attachments)) > 0 then
            log "Number of attachments is " & (count of (eachMessage's mail attachments))
            try

                tell application "Finder"

                    if not (exists folder subFolder of folder attachmentsFolder) then
                        make new folder at attachmentsFolder with properties {name:subFolder}
                    end if
                end tell
                -- Save the attachment
                repeat with theAttachment in eachMessage's mail attachments

                    set originalName to name of theAttachment
                    set savePath to attachmentsFolder & ":" & subFolder & ":" & originalName

                    tell application "Finder"
                        if (exists file originalName of folder subFolder of folder attachmentsFolder) then
                            set savePath to attachmentsFolder & ":" & subFolder & ":" & theDate & "_" & subFolder & "_" & originalName
                            log "File will be saved to path: " & attachmentsFolder & ":" & subFolder & ":" & theDate & "_" & subFolder & "_" & originalName
                        else
                            log "Found that file path already exits: " & attachmentsFolder & ":" & subFolder & ":" & theDate & "_" & subFolder & "_" & originalName
                        end if
                    end tell
                    try
                        save theAttachment in file (savePath)
                        log "saved file to " & savePath
                    end try
                end repeat
            on error error_message number error_number

            end try
        else
            log "Number of attachments is " & (count of (eachMessage's mail attachments))
        end if
    end repeat

end tell
(*end perform mail action with messages
end using terms from*)
Vielleicht fehlt mir etwas, aber wenn Ihre Ordner erstellt sind, funktioniert das Skript von diesem Punkt an nicht mehr? Wenn ja, wäre das Erstellen der Ordner im Voraus nicht eine einmalige Aufgabe? Oder müssen Sie ständig neue Ordner erstellen lassen (z. B. einen für jede Woche oder jeden Monat usw.)?
Ja, möchten Sie, dass ständig neue Ordner erstellt werden (z. B. einer für jede Woche oder jeden Monat usw.)? Finde es nur seltsam, warum die if-Anweisung beim ersten Mal Probleme hat :(
Ich glaube, ich habe das Problem gefunden.

Antworten (1)

Ich habe es gefunden. Die erste Einstellung von savePath hat keinen zusätzlichen Code, um die Datei umzubenennen (aus welchem ​​Grund auch immer). Ich habe auch einen Startcode für die Woche erhalten, um dynamische Wochenordner zu erstellen.

War:set savePath to attachmentsFolder & ":" & subFolder & ":" & originalName

Jetzt:set savePath to attachmentsFolder & ":" & subFolder & ":" & theDate & "_" & originalName

Vollständiger Code:

 # https://apple.stackexchange.com/a/82085/301868
-- (markhunte)


(*using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule*)

set codeList to {"J", "F", "W", "O", "J"}
set MainFolder to "Desktop" -- After the current users home dir
set subFolder to ""
set theDate to do shell script "date +%Y_%m_%d_%H%M%S"
--set ruleName to name of theRule

-- Sean Korzdorfer
-- 2013-01-21
-- Fork of benwaldie Current Week Range TextExpander snippet: https://gist.github.com/4583398

set theDateW to (current date)
set theStartDate to theDateW
repeat until weekday of theStartDate = Wednesday
    set theStartDate to theStartDate - 1 * days
end repeat


-- Original Script Date Formatting:
-- set theDate to (short date string of theStartDate) & " - " & (short date string of theEndDate)
set theDateW to (year of theStartDate as string) & "-" & (my add_zero(month of theStartDate as integer)) & "-" & (my add_zero(day of theStartDate as integer))

on add_zero(theNumber)
    if theNumber < 10 then
        return "0" & (theNumber as string)
    else
        return theNumber as string
    end if
end add_zero

-- The folder to save the attachments in (must already exist)
tell application "Finder" to set attachmentsFolder to ((path to home folder as text) & MainFolder) as text

tell application "Mail"
    set theMessages to the selected messages of the front message viewer
    --set theMessage to first item of theMessages

    repeat with eachMessage in theMessages
        set theSubject to subject of eachMessage
        repeat with i from 1 to number of items in codeList
            set this_item to item i of codeList
            if theSubject contains this_item then
                set subFolder to theDateW
                log "Found subject match " & this_item

            else
                log "no subject " & this_item
            end if

        end repeat
        if (count of (eachMessage's mail attachments)) > 0 then
            log "Number of attachments is " & (count of (eachMessage's mail attachments))
            try

                tell application "Finder"

                    if not (exists folder subFolder of folder attachmentsFolder) then
                        make new folder at attachmentsFolder with properties {name:subFolder}
                    end if
                end tell
                -- Save the attachment
                repeat with theAttachment in eachMessage's mail attachments

                    set originalName to name of theAttachment
                    set savePath to attachmentsFolder & ":" & subFolder & ":" & theDate & "_" & originalName

                    tell application "Finder"
                        if (exists file originalName of folder subFolder of folder attachmentsFolder) then
                            set savePath to attachmentsFolder & ":" & subFolder & ":" & theDate & "_" & originalName
                            log "File will be saved to path: " & attachmentsFolder & ":" & subFolder & ":" & theDate & "_" & originalName
                        else
                            log "Found that file path already exits: " & attachmentsFolder & ":" & subFolder & ":" & theDate & "_" & originalName
                        end if
                    end tell
                    try
                        save theAttachment in file (savePath)
                        log "saved file to " & savePath
                    end try
                end repeat
            on error error_message number error_number

            end try
        else
            log "Number of attachments is " & (count of (eachMessage's mail attachments))
        end if
    end repeat

end tell
(*end perform mail action with messages
end using terms from*)
Seien Sie gut, um Hilfe zu erhalten, warum die CodeList beim ersten Element nicht funktioniert?