Dateien
`files.list`, `list_all`, `iterate`, `get`, `download`, `list_links`, `list_all_links`, `iterate_links`, `create_link`, `revoke_link`, `stats`, `upload`, `delete` und `delete_many`.
Jede Methode
from pathlib import Path from openemail import openemail page = openemail.files.list(kind='pdf', sort='largest')file = page['items'][0] Path(file['filename']).write_bytes(openemail.files.download(file['id'])) links = openemail.files.list_all_links(file['id'])print([(link['url'], link['downloads']) for link in links]) stats = openemail.files.stats()print(stats['totals']['files'], stats['uploaded']['bytes'])Jede Datei, die das Postfach enthält, gesendete und empfangene Anhänge und die hochgeladenen Dateien, die Seite „Dateien“ der App. download gibt die ganze Datei als bytes zurück, die Links sind die Download-Links, als die eine Datei verschickt wurde, mit der Angabe, wie oft jeder abgerufen wurde, und stats ist der Tab „Analysen“.
list, list_all und iterate nehmen q, kind und sort, außerdem direction (inbound, outbound oder uploaded), address, die Dateien einer Adresse, ohne Beachtung der Groß- und Kleinschreibung verglichen, sowie since und until, ein datetime oder einen ISO-8601-String. since schließt seinen Zeitpunkt ein, und until endet davor.
Lesen braucht files:read, und Hochladen, Löschen sowie das Veröffentlichen oder Widerrufen von Links brauchen files:write, das files:read einschließt. Ein Schlüssel, der erstellt wurde, bevor Dateien eigene Scopes hatten, erhielt die passenden. Ein auf bestimmte Adressen oder Domains beschränkter Schlüssel sieht nur die Dateien auf diesen.
Öffentliche Links
from openemail import openemail uploads = openemail.files.list_all(direction='uploaded', since='2026-09-01') file = uploads[0] link = openemail.files.create_link(file['id'], domain='acme.com')print(link['url']) openemail.files.revoke_link(file['id'], link['id'])create_link veröffentlicht eine Datei unter einem öffentlichen Download-Link, der sich ohne Anmeldung öffnet, und gibt ihn zurück. Der Link liegt auf dem Datei-Host von domain, wenn diese Domain einen hat, etwa files.acme.com, sonst auf dem Datei-Host der Adresse, zu der die Datei gehört, sonst auf der API-Adresse. Eine Datei, die mit einer Nachricht ein- oder ausging, wird zuerst in öffentlichen Speicher kopiert, und ein Programm oder ein Skript wird mit 422 file_unshareable abgelehnt.
Jedes create_link erzeugt einen neuen Link und wird deshalb nach einer verlorenen Antwort nie wiederholt: Suchen Sie den Link zuerst mit list_links. revoke_link legt einen Link endgültig still, auch in bereits verschickten Mails, und gibt ihn mit gesetztem revokedAt zurück. Zweimal zu widerrufen ist unbedenklich, und ein unbekannter Link ist ein 404.
Hochladen und löschen
from pathlib import Path from openemail import openemail upload = openemail.files.upload( Path('price-list.pdf').read_bytes(), filename='price-list.pdf', content_type='application/pdf',) if upload['deletable']: openemail.files.delete(upload['id']) result = openemail.files.delete_many([ 'file_0c4e7a91d2b84f63a5e19b7d', 'file_6bb640f5b99e47deb758f1f5',])for kept in result['kept']: print(kept['filename'], kept['reason'])upload speichert die Bytes, wie sie sind, bis 100 MB, unter filename und gibt die Datei zurück, deren ID ein Versand als {'fileId': upload['id']} anhängt. Übergeben Sie content_type, sonst werden die Bytes als application/octet-stream gespeichert. Es wird nie wiederholt, weil ein zweiter Versuch eine zweite Kopie speichern würde.
Nur ein Upload, von dem nichts abhängt, kann gelöscht werden, und deletable und usage an jeder Datei sagen das vorab. delete lehnt jede andere Datei mit einem 409 file_in_use ab. delete_many nimmt bis zu 100 IDs, löscht, was es kann, und meldet den Rest in kept, jede mit ihrem Grund, und in missing.
upload nimmt bytes, bytearray oder memoryview entgegen. Es wartet mindestens 600 Sekunden auf eine Antwort, wie kurz das timeout des Clients auch ist, sofern Sie dem Aufruf nicht timeout= übergeben, und ein leerer filename löst ValueError aus, bevor irgendetwas gesendet wird.
Referenz
files.list()Vollständige Referenzfiles.list_all()Vollständige Referenzfiles.iterate()Vollständige Referenzfiles.get()Vollständige Referenzfiles.download()Vollständige Referenzfiles.list_links()Vollständige Referenzfiles.list_all_links()Vollständige Referenzfiles.iterate_links()Vollständige Referenzfiles.create_link()Vollständige Referenzfiles.revoke_link()Vollständige Referenzfiles.stats()Vollständige Referenzfiles.upload()Vollständige Referenzfiles.delete()Vollständige Referenzfiles.delete_many()Vollständige Referenz