Dosyalar
`files->list`, `listAll`, `iterate`, `get`, `download`, `listLinks`, `listAllLinks`, `iterateLinks`, `createLink`, `revokeLink`, `revokeAllLinks`, `stats`, `upload`, `delete` ve `deleteMany`.
Her yöntem
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;Posta kutusunun tuttuğu her dosya: gönderilen ve alınan ekler ve ona yüklenen dosyalar; yani uygulamanın Dosyalar sayfası. download baytları, file_put_contents ile değiştirilmeden kaydedilebilen bir dize olarak döndürür. Bağlantılar, bir dosyanın gönderildiği indirme bağlantılarıdır ve her birinin kaç kez getirildiğini içerir; stats ise Analiz sekmesidir.
list, listAll ve iterate; q:, kind: ve sort: ile birlikte direction: (inbound, outbound ya da uploaded), address: (büyük/küçük harf gözetmeksizin karşılaştırılan tek bir adresin dosyaları) ve bir DateTimeInterface ya da bir ISO 8601 dizesi olarak since: ve until: alır. since: kendi anını içerir, until: ise ondan önce durur. Bir DateTimeInterface UTC olarak gönderilir; 2026-09-01 gibi yalın bir tarih içeren bir dize ise UTC gece yarısı olarak okunur.
q: dosya adında ve türünde arar. kind: değeri image, pdf, audio, video ya da text; sort: değeri ise varsayılan olan newest, oldest, largest ya da name olur. OpenEmail\Constants\FileKinds, FileSorts ve FileDirections seçenekleri adlandırır. list bir OpenEmail\Result\Page, listAll ise tüm dosyaları tek bir dizi içinde döndürür. iterate, dosyaları birer birer veren ve bir sonraki sayfayı yalnızca döngü ihtiyaç duyduğunda getiren bir Generator döndürür.
Okuma files:read gerektirir; yükleme, silme ve bağlantıları yayımlama ya da iptal etme ise files:read iznini de içeren files:write gerektirir. Dosyaların kendi kapsamları olmadan önce oluşturulmuş bir anahtara eşleşen kapsamlar verilmiştir. Kapsamı olmayan bir anahtar 403 insufficient_scope ile reddedilir ve bu, isScopeMissing() değeri true olan bir PermissionException olarak fırlatılır. Belirli adreslerle ya da alan adlarıyla sınırlı bir anahtar yalnızca onlara gelen dosyaları görür; bu yüzden tüm çalışma alanı için yüklenen dosyaları görmez.
download dosyanın tamamını bellekte tutar; bu yüzden çok büyük dosyaları birer birer getirin. Adı yazmadan önce örnekte olduğu gibi basename() içinden geçirin, çünkü ad dosyayı gönderen kişiden gelmiştir.
Herkese açık bağlantılar
use OpenEmail\Constants\FileDirections; $uploads = $client->files->listAll(direction: FileDirections::UPLOADED, since: new \DateTimeImmutable('2026-09-01T00:00:00Z'));$file = $uploads[0] ?? null; if ($file !== null) { $link = $client->files->createLink($file['id'], domain: 'acme.com'); echo $link['url'], PHP_EOL; $client->files->revokeLink($file['id'], $link['id']);}createLink bir dosyayı oturum açmadan açılan herkese açık bir indirme bağlantısında yayımlar ve bağlantıyı döndürür. Bağlantı, varsa domain: alan adının files.acme.com gibi dosya konağında, yoksa dosyanın ait olduğu adresin dosya konağında, o da yoksa API adresinde bulunur. Bir iletiyle gelen ya da giden bir dosya önce herkese açık depolamaya kopyalanır; bir program ya da betik ise ValidationException olarak fırlatılan 422 file_unshareable ile reddedilir.
Her createLink yeni bir bağlantı oluşturur; bu yüzden kaybolan bir yanıttan sonra asla yeniden denenmez: önce bağlantıyı listLinks ile arayın. revokeLink bir bağlantıyı, zaten gönderilmiş postalardakiler dahil kalıcı olarak durdurur ve onu revokedAt ayarlanmış olarak döndürür. Bir bağlantıyı iki kez iptal etmek güvenlidir; bu yüzden istemci onu bir okuma gibi yeniden dener. Bilinmeyen bir bağlantı NotFoundException olarak fırlatılan bir 404 verir. revokeAllLinks bir dosyanın tüm bağlantılarını tek seferde durdurur ve kaç tane olduğunu revoked içinde bildirir.
Yükleme ve silme
$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 baytları olduğu gibi, 100 MB'a kadar, filename: içindeki adla saklar ve dosyayı döndürür. Bir gönderim onu emails->send çağrısının attachments alanında ['fileId' => $upload['id']] olarak ekler. contentType: ya da kendi türünü taşıyan veriler geçirin; geri kalan her şey application/octet-stream olarak saklanır. Tür asla filename: değerinden tahmin edilmez; bu yüzden bir bayt dizesinin başka bir tür olarak saklanması için contentType: gerekir. Asla yeniden denenmez, çünkü ikinci bir deneme ikinci bir kopya saklardı.
Veri bir bayt dizesi, bir SplFileInfo, fopen() ile açılmış bir akış ya da bir PSR-7 akışı veya yüklenmiş dosyasıdır. Bir SplFileInfo ya da bir dosya üzerinde açılmış bir akış iki argümana da ihtiyaç duymaz: ad dosyanın kendi adıdır, tür ise paket uzantıyı tanıyorsa (örneğin .pdf ya da .png) uzantıdan gelir. Bir Laravel ya da Symfony yüklemesi ve bir PSR-7 yüklenmiş dosyası, tarayıcının gönderdiği adı ve türü getirir. Bir dize ad taşımaz; bu yüzden filename: olmadan bir dize, hiçbir şey gönderilmeden önce bir InvalidArgumentException fırlatır.
Bir yükleme 600 saniye ya da daha uzunsa istemcinin timeout değeri kadar sürebilir; timeout: ise tek bir çağrı için başka bir sınır belirler. timeout: 0 ile kurulmuş bir istemci bir yükleme ne kadar sürerse o kadar bekler.
Yalnızca hiçbir şeyin bağlı olmadığı bir yükleme silinebilir ve bunu her dosyadaki deletable ve usage önceden söyler. delete diğer her dosyayı ConflictException olarak fırlatılan 409 file_in_use ile reddeder. deleteMany en fazla 100 kimlik alır, silebildiğini siler ve geri kalanları her biri nedeniyle birlikte kept içinde ve missing içinde bildirir. İkisi de yeniden denenmez. Kaybolan bir yanıttan sonra ikinci bir delete üzerindeki 404, ilkinin çalıştığı anlamına gelir; ikinci bir deleteMany ise bu dosyaları missing içinde bildirir.