ファイル
`files.list`、`list_all`、`iterate`、`get`、`download`、`list_links`、`list_all_links`、`iterate_links`、`create_link`、`revoke_link`、`stats`、`upload`、`delete`、`delete_many`。
すべてのメソッド
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'])メールボックスが保持するすべてのファイルで、送受信した添付ファイルとアップロードしたファイルを含み、アプリの「ファイル」ページに当たる。download はファイル全体を bytes で返し、リンクはファイルが送られたときのダウンロードリンクで、それぞれの取得回数が付く。stats は「分析」タブに当たる。
list、list_all、iterate は q、kind、sort に加えて、direction(inbound、outbound、uploaded)、address(大文字小文字を区別せずに比較する 1 つのアドレスのファイル)、since と until(datetime または ISO 8601 文字列)を受け取る。since はその時点を含み、until はその直前で止まる。
読むには files:read、アップロード、削除、リンクの公開と取り消しには files:write が必要で、これは files:read を含む。ファイルに独自のスコープができる前に作られたキーには、対応するスコープが付与された。特定のアドレスやドメインに限定されたキーは、そこにあるファイルしか見えない。
公開リンク
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 はログインなしで開ける公開ダウンロードリンクでファイルを公開し、そのリンクを返す。リンクは、domain にファイルホストがあればそこ(たとえば files.acme.com)に置かれ、なければファイルが属するアドレスのファイルホスト、それもなければ API のアドレスに置かれる。メッセージで受信または送信されたファイルはまず公開ストレージにコピーされ、プログラムやスクリプトは 422 file_unshareable で拒否される。
create_link は呼び出すたびに新しいリンクを作るので、応答が失われた後も再試行はしない。先に list_links でリンクを探すこと。revoke_link はリンクを完全に無効にし、すでに送られたメールの中のリンクも無効になる。戻り値は revokedAt が設定されたリンク。同じリンクを 2 回取り消しても安全で、存在しないリンクは 404 になる。
アップロードと削除
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 はバイトをそのまま、100 MB まで、filename の名前で保存し、ファイルを返す。その id は送信時に {'fileId': upload['id']} として添付する。content_type を渡すこと。渡さないとバイトは application/octet-stream として保存される。2 回目の試行は 2 つ目のコピーを保存してしまうので、再試行は一切しない。
削除できるのは何も依存していないアップロード済みファイルだけで、各ファイルの deletable と usage がそれを事前に示す。delete はそれ以外のファイルを 409 file_in_use で拒否する。delete_many は最大 100 件の id を受け取り、削除できるものを削除し、残りを kept(それぞれ理由付き)と missing で報告する。
upload は bytes、bytearray、memoryview を受け取る。呼び出しに timeout= を渡さない限り、クライアントの timeout がどれだけ短くても応答を少なくとも 600 秒待つ。また空の filename は、何かが送られる前に ValueError を送出する。
リファレンス
files.list()完全なリファレンスfiles.list_all()完全なリファレンスfiles.iterate()完全なリファレンスfiles.get()完全なリファレンスfiles.download()完全なリファレンスfiles.list_links()完全なリファレンスfiles.list_all_links()完全なリファレンスfiles.iterate_links()完全なリファレンスfiles.create_link()完全なリファレンスfiles.revoke_link()完全なリファレンスfiles.stats()完全なリファレンスfiles.upload()完全なリファレンスfiles.delete()完全なリファレンスfiles.delete_many()完全なリファレンス