ドキュメント本文へスキップ
PHP

ファイル

`files->list`、`listAll`、`iterate`、`get`、`download`、`listLinks`、`listAllLinks`、`iterateLinks`、`createLink`、`revokeLink`、`revokeAllLinks`、`stats`、`upload`、`delete`、`deleteMany`。

すべてのメソッド

files.php
use OpenEmail\Constants\FileKinds;use OpenEmail\Constants\FileSorts; $largest = $client->files->list(kind: FileKinds::PDF, sort: FileSorts::LARGEST, limit: 1); foreach ($largest as $file) {    foreach ($client->files->listAllLinks($file['id']) as $link) {        echo $link['url'], ' ', $link['downloads'], PHP_EOL;    }     file_put_contents(basename($file['filename']), $client->files->download($file['id']));} $stats = $client->files->stats();echo $stats['totals']['files'], ' ', $stats['uploaded']['bytes'], PHP_EOL;

メールボックスが保持するすべてのファイルで、送受信した添付ファイルとアップロードしたファイルを含みます。アプリの「ファイル」ページに当たります。download はバイト列を文字列として返し、file_put_contents でそのまま保存できます。リンクはファイルが送られたときのダウンロードリンクで、それぞれの取得回数が付きます。stats は「分析」タブに当たります。

list、listAll、iterate は q:、kind:、sort: に加えて、direction:(inbound、outbound、uploaded)、address:(大文字小文字を区別せずに比較する 1 つのアドレスのファイル)、since: と until:(DateTimeInterface または ISO 8601 の文字列)を受け取ります。since: はその時点を含み、until: はその直前で止まります。DateTimeInterface は UTC で送られ、2026-09-01 のような日付だけの文字列は UTC の午前 0 時として読まれます。

q: はファイル名とその種類を検索します。kind: は image、pdf、audio、video、text のいずれかで、sort: は newest(既定値)、oldest、largest、name のいずれかです。OpenEmail\Constants\FileKinds、FileSorts、FileDirections が選択肢を定義しています。list は OpenEmail\Result\Page を 1 つ返し、listAll はすべてのファイルを 1 つの配列で返します。iterate はファイルを 1 つずつ yield し、ループが必要とするときにだけ次のページを取得する Generator を返します。

読むには files:read、アップロード、削除、リンクの公開と取り消しには files:write が必要で、これは files:read を含みます。ファイルに独自のスコープができる前に作られたキーには、対応するスコープが付与されました。スコープのないキーは 403 insufficient_scope で拒否され、isScopeMissing() が true の PermissionException としてスローされます。特定のアドレスやドメインに限定されたキーは、そこに届いたファイルしか見えないため、ワークスペース全体向けにアップロードされたファイルは見えません。

download はファイル全体をメモリに保持するため、非常に大きなファイルは 1 つずつ取得してください。ファイル名はファイルを送った人から来たものなので、書き込む前にサンプルのように basename() を通してください。

アップロードと削除

upload.php
$report = "month,sent\n2026-09,1200\n";$upload = $client->files->upload($report, filename: 'report.csv', contentType: 'text/csv'); if ($upload['deletable']) {    $client->files->delete($upload['id']);} $logo = $client->files->upload(new \SplFileInfo('logo.svg'));echo $logo['filename'], ' ', $logo['mimeType'], PHP_EOL; $result = $client->files->deleteMany(['file_0c4e7a91d2b84f63a5e19b7d', 'file_6bb640f5b99e47deb758f1f5']); foreach ($result['kept'] as $kept) {    echo $kept['filename'], ' ', $kept['reason'], PHP_EOL;}

upload はバイト列を最大 100 MB までそのまま、filename: の名前で保存し、ファイルを返します。送信時には、emails->send の attachments に ['fileId' => $upload['id']] として添付します。contentType: を渡すか、自身の種類を持つデータを渡してください。それ以外は application/octet-stream として保存されます。種類が filename: から推測されることはないため、バイト列の文字列を別の種類として保存するには contentType: が必要です。2 回目の試行では 2 つ目のコピーが保存されてしまうため、リトライされることはありません。

データはバイト列の文字列、SplFileInfo、fopen() のストリーム、または PSR-7 のストリームかアップロードされたファイルです。SplFileInfo やファイルで開いたストリームには、どちらの引数も必要ありません。名前はファイル自身のもので、種類は .pdf や .png のようにパッケージが知っている拡張子から決まります。Laravel や Symfony のアップロード、PSR-7 のアップロードファイルは、ブラウザーが送った名前と種類を持っています。文字列は名前を持たないため、filename: のない文字列は、何かが送信される前に InvalidArgumentException をスローします。

アップロードは 600 秒、またはクライアントの timeout がそれより長ければその時間まで実行でき、timeout: で 1 回の呼び出しに別の上限を設定できます。timeout: 0 で作ったクライアントは、アップロードにかかるだけ待ちます。

削除できるのは、何からも参照されていないアップロードだけで、各ファイルの deletable と usage がそれを事前に示します。delete はそれ以外のファイルを 409 file_in_use で拒否し、ConflictException としてスローされます。deleteMany は最大 100 個の id を受け取り、削除できるものを削除し、残りを理由付きで kept に、見つからないものを missing に報告します。どちらもリトライされません。応答が失われた後の 2 回目の delete で 404 が返れば 1 回目は成功しており、2 回目の deleteMany はそれらのファイルを missing に報告します。