Hallo Uwe,
das gespeicherte Droplet ist an diesen Beitrag angehängt.
Wie per PM besprochen, werden nun mehrere PDF-Dateien mit derselben Nummer an die gleiche Mai-Message gehängt.
Das klappte auf Anhieb. Aber das Einfügen eines Returns nach jedem Anhang wollte nicht gelingen. Schliesslich fand ich eine Lösung: Beim Erzeugen der Mitteilung wird dem Inhalt des 'bodys' eine Menge Returns zugewiesen. Beim Anhängen wird ein Zählerwert benutzt, damit zwischen zwei Anhängen ein Return ist.
Die vierstelligen Nummern sind nicht fortlaufend. Also geht das Errechnen der Position in der Liste der Adressen nicht.
Damit das Erstellen der Liste mit den Kundenadressen einfacher ist, fordert das Script zu Beginn auf, die Textdatei zu wählen, welche die Kundennummern und die Adressen enthält.
Das Script merkt sich den Pfad zu dieser Datei. Der Dialog kommt erst wieder, wenn die Datei umbenannt oder verschoben wurde. Oder wenn das Script neu gespeichert wird.
Die Adressen-Datei wird eingelesen und in eine Liste verwandelt.
Die gedropptren PDF-Dateien werden zu einem Handler geschickt, welcher die Kundennummer speichert. Er geht die Liste durch und wenn eine Übereinstimmung der Nummer gefunden ist, wird aus dem Listenelement die Adresse herausgetrennt.
Code (* Mailversand_02d.app © 09.11.2017 / Hans Haesler, Châtelard 52, CH-1018 Lausanne *) # die Datei der Kundenadressen property adrFile : "" # eine weitere 'property' property msgBody : "Anbei: PDF-Datei(en)" # drei Variablen als 'global' definieren global adrList global nAdr global oldNbr global notGood global notFound global pCtr ############################################################ # der 'Run Handler' erlaubt, die Ausführung mit einem Doppelklick zu starten on run # die Datei der Kundenadressen auswählen (falls nicht gefunden) if adrFile is "" then set adrFile to (choose file with prompt "Die Kundenadressen-Datei wählen:") as Unicode text end if # prüfen, ob die Datei existiert set notFound to false tell application "Finder" if not (adrFile exists) then set notFound to true end if end tell # wenn nicht: auffordern, die Datei zu wählen if notFound then set adrFile to (choose file with prompt "Die Kundenadressen-Datei wählen:") as Unicode text end if # prüfen, ob es eine Textdatei ist if not (adrFile ends with ".txt") then display dialog "Bitte eine *Text*-Datei wählen." buttons "OK" default button 1 with icon 2 set adrFile to "" error number -128 end if # die Datei einlesen ... set adrStr to read file adrFile if adrStr contains return then set retChar to ASCII character 13 else if adrStr contains linefeed then set retChar to ASCII character 10 end if # ... und in eine Liste verwandeln set AppleScript's text item delimiters to retChar set adrList to every text item of adrStr set AppleScript's text item delimiters to {""} set nAdr to count of adrList # den Handler aufrufen, welcher einlädt, eine ".pdf"-Datei zu wählen set pdfPath to (choose file with prompt "Die PDF-Datei wählen.") as Unicode text # prüfen, ob eine PDF-Datei ausgewählt wurde if not (pdfPath ends with ".pdf") then display dialog "Nur PDF-Dateien, bitte." buttons "OK" default button 1 with icon 0 error number -128 end if # zwei Variablen initialisieren set oldNbr to -1 set notGood to 0 set notFound to 0 # die Datei zum Handler 'workFile()' schicken set defString to workFile(pdfPath) # das Ende der Aktion verkünden activate me if (notGood + notFound) is 0 then display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1 else if notGood is 1 then display dialog "Ein Dateiname mit ungültiger Kundennummer." buttons "OK" default button 1 with icon 2 else if notGood is greater than 1 then display dialog "" & notGood & " Dateinamen mit ungültiger Kundennummer." buttons "OK" default button 1 with icon 2 end if if notFound is 1 then display dialog "Eine Kunden-Adresse nicht gefunden." buttons "OK" default button 1 with icon 2 else if notFound is greater than 1 then display dialog "" & notFound & " Kunden-Adressen nicht gefunden." buttons "OK" default button 1 with icon 2 end if end if end run ############################################################ # der 'Open Handler' reagiert, wenn Objekte auf das Icon des Scripts gedroppt werden on open allObjects global adrList # die Datei der Kundenadressen auswählen (falls nicht gefunden) if adrFile is "" then set adrFile to (choose file with prompt "Die Kundenadressen-Datei wählen:") as Unicode text end if # prüfen, ob die Datei existiert set notFound to false tell application "Finder" if not (adrFile exists) then set notFound to true end if end tell # wenn nicht: auffordern, die Datei zu wählen if notFound then set adrFile to (choose file with prompt "Die Kundenadressen-Datei wählen:") as Unicode text end if # prüfen, ob es eine Textdatei ist if not (adrFile ends with ".txt") then display dialog "Bitte eine *Text*-Datei wählen." buttons "OK" default button 1 with icon 2 set adrFile to "" error number -128 end if # die Datei einlesen ... set adrStr to read file adrFile if adrStr contains return then set retChar to ASCII character 13 else if adrStr contains linefeed then set retChar to ASCII character 10 end if # ... und in eine Liste verwandeln set AppleScript's text item delimiters to retChar set adrList to every text item of adrStr set AppleScript's text item delimiters to {""} set nAdr to count of adrList # zwei Variablen initialisieren set oldNbr to -1 set notGood to 0 set notFound to 0 # Wiederholschleife, welche die gedroppten Objekte zum Handler 'processObject' schickt repeat with aObject in allObjects processObject(aObject) end repeat # das Ende der Aktion verkünden activate me if (notGood + notFound) is 0 then display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1 else if notGood is 1 then display dialog "Ein Dateiname mit ungültiger Kundennummer." buttons "OK" default button 1 with icon 2 else if notGood is greater than 1 then display dialog "" & notGood & " Dateinamen mit ungültiger Kundennummer." buttons "OK" default button 1 with icon 2 end if if notFound is 1 then display dialog "Eine Kunden-Adresse nicht gefunden." buttons "OK" default button 1 with icon 2 else if notFound is greater than 1 then display dialog "" & notFound & " Kunden-Adressen nicht gefunden." buttons "OK" default button 1 with icon 2 end if end if end open ############################################################ # im folgenden Handler wird festgestellt, ob das Objekt ein Ordner oder eine Datei ist; # der Inhalt des Hauptordners wird aufgelistet; Dateien werden zum Handler 'processFile' gesandt. on processObject(aObject) # wenn der Pfad mit einem Doppelpunkt endet, ist das Objekt ein Ordner oder eine App ... set curObject to aObject as string if curObject ends with ":" then # Ordner und Apps werden nicht berücksichtigt else if curObject ends with ".pdf" then # die Datei zum Handler 'workFile()' schicken workFile(curObject) end if end if end processObject ############################################################ # der Handler, welcher die PDF-Dateien an "Mail" übergibt on workFile(pdfPath) # drei Variablen initialisieren set curNbr to 0 set okay to true # die Nummer ausziehen try set strNbr to (text -8 thru -5 of pdfPath) set curNbr to strNbr as integer on error # die PDF-Datei hat keine gültige Nummer: eine Etikette zuweisen tell application "Finder" set label index of file pdfPath to 2 end tell set okay to false set notGood to notGood + 1 end try # die Nummer prüfen und die Adresse zuweisen if okay then if curNbr is greater than 999 then # die Adresse zuweisen set msgAddress to "" repeat with n from 1 to nAdr set curItem to item n of my adrList if curItem starts with strNbr then set msgAddress to text 6 thru -1 of curItem exit repeat end if end repeat if msgAddress is "" then # die aktuelle Adresse ist nicht vorhanden: eine Etikette zuweisen tell application "Finder" set label index of file pdfPath to 3 end tell set okay to false set notFound to notFound + 1 end if if okay then # die aktuelle Nummer ist nicht die vorherige if curNbr is not oldNbr then # die Mail-Message vorbereiten set msgSubject to name of (info for (file pdfPath)) tell application "Mail" activate set newMessage to make new outgoing message with properties ¬ {subject:msgSubject, content:msgBody & return & return & return & return & return & ¬ return & return & return & return & return & return & return & return & return & return & ¬ return & return & return & return & return & return & return & return & return & return} tell newMessage set visible to true make new to recipient at end of to recipients with properties {address:msgAddress} tell content # die erste Datei anhängen set pCtr to 2 make new attachment with properties {file name:pdfPath as alias} at after paragraph pCtr end tell end tell end tell # eine Etikette zuweisen tell application "Finder" set label index of file pdfPath to 6 end tell set oldNbr to curNbr # die aktuelle Nummer ist gleich wie die vorherige else if curNbr is oldNbr then set pCtr to pCtr + 2 tell application "Mail" tell outgoing message 1 tell content # die weiteren Dateien anhängen make new attachment with properties {file name:pdfPath as alias} at after paragraph pCtr end tell end tell end tell # eine Etikette zuweisen tell application "Finder" set label index of file pdfPath to 6 end tell end if end if end if end if end workFile Als Betreff wird der Name der ersten PDF-Datei eingefügt und die erste Zeile der Mitteilung ist: "Anbei: PDF-Datei(en)". Das kann geändert werden.
Gruss, Hans