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
page = client.files.list(kind: "pdf", sort: "largest")file = page.items.first links = client.files.list_all_links(file[:id])p links.map { |link| [link[:url], link[:downloads]] } stats = client.files.statsputs stats.dig(:totals, :files), stats.dig(:uploaded, :bytes) File.binwrite(file[:filename], client.files.download(file[:id]))Jede Datei, die das Postfach enthält, gesendete und empfangene Anhänge und die hochgeladenen Dateien: die Seite „Dateien“ der App. download gibt die Bytes als binären String zurück, den File.binwrite unverändert speichert. 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 Time, ein DateTime oder einen String nach ISO 8601. since: schließt seinen Zeitpunkt ein, und until: endet davor. Ein Ruby-Date wird als bloßes Datum gesendet, das diese Liste als Mitternacht UTC liest.
q: durchsucht den Dateinamen und seinen Typ. kind: ist image, pdf, audio, video oder text, und sort: ist newest, der Standard, oldest, largest oder name. OpenEmail::FILE_KINDS, OpenEmail::FILE_SORTS und OpenEmail::FILE_DIRECTIONS nennen die Auswahlmöglichkeiten. list gibt eine OpenEmail::Page zurück, und list_all gibt alle Dateien in einem einzigen Array zurück. iterate übergibt jede Datei an einen Block und holt die nächste Seite erst, wenn die Schleife sie braucht. Ohne Block gibt es einen Enumerator zurück.
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 Schlüssel ohne den Scope wird mit einem 403 insufficient_scope abgelehnt, und scope_missing? ist am Fehler true. Ein auf bestimmte Adressen oder Domains beschränkter Schlüssel sieht nur die Dateien, die bei diesen eingegangen sind, und sieht daher keine Dateien, die für den ganzen Workspace hochgeladen wurden.
download hält die ganze Datei im Speicher. Holen Sie sehr große Dateien daher einzeln.
Öffentliche Links
uploads = client.files.list_all(direction: "uploaded", since: Time.utc(2026, 9, 1))file = uploads.first link = client.files.create_link(file[:id], domain: "acme.com")puts link[:url] client.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 den Link 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 einem 422 file_unshareable abgelehnt, ausgelöst als OpenEmail::ValidationError.
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, das Gem wiederholt es daher wie einen Lesevorgang. Ein unbekannter Link ergibt einen 404, ausgelöst als OpenEmail::NotFoundError.
Hochladen und löschen
upload = client.files.upload(File.binread("report.pdf"), filename: "report.pdf", content_type: "application/pdf")client.files.delete(upload[:id]) if upload[:deletable] invoice = client.files.upload(Pathname("invoice.pdf"))puts invoice[:filename], invoice[:mimeType] result = client.files.delete_many(["file_0c4e7a91d2b84f63a5e19b7d", "file_6bb640f5b99e47deb758f1f5"])result[:kept].each { |kept| puts "#{kept[:filename]} #{kept[:reason]}" }upload speichert die Bytes, wie sie sind, bis 100 MB, unter dem Namen in filename: und gibt die Datei zurück. Ein Versand hängt sie als {fileId: upload[:id]} in den attachments von emails.send an. Übergeben Sie content_type: oder Bytes, die ihren eigenen Typ mitbringen, alles andere wird als application/octet-stream gespeichert. Es wird nie wiederholt, weil ein zweiter Versuch eine zweite Kopie speichern würde.
Die Bytes sind ein binärer String, ein IO oder ein Pathname. Ein Pathname oder eine File braucht keines der beiden Keywords: Der Name ist der eigene der Datei, und der Typ ergibt sich aus der Endung, wenn das Gem sie kennt, etwa .pdf oder .png. Ein Rails-Upload bringt sein eigenes original_filename und content_type mit. Bloße Bytes tragen keinen Namen, ein String oder ein StringIO ohne filename: löst daher einen ArgumentError aus, bevor etwas gesendet wird.
Ein Upload darf 600 Sekunden laufen oder so lange wie das timeout des Clients, wenn dieses länger ist, und timeout: setzt für einen Aufruf ein anderes Limit. Ein mit timeout: 0 erzeugter Client wartet so lange, wie ein Upload dauert.
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, ausgelöst als OpenEmail::ConflictError. 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. Keines von beiden wird wiederholt. Ein 404 bei einem zweiten delete nach einer verlorenen Antwort bedeutet, dass das erste funktioniert hat, und ein zweites delete_many meldet diese Dateien in missing.