Skedarët
`files->list`, `listAll`, `iterate`, `get`, `download`, `listLinks`, `listAllLinks`, `iterateLinks`, `createLink`, `revokeLink`, `revokeAllLinks`, `stats`, `upload`, `delete` dhe `deleteMany`.
Çdo metodë
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;Çdo skedar që mban kutia postare, bashkëngjitjet e dërguara dhe të marra dhe skedarët e ngarkuar në të: faqja Skedarët e aplikacionit. download kthen bajtet si një string, të cilin file_put_contents e ruan të pandryshuar. Lidhjet janë lidhjet e shkarkimit me të cilat doli një skedar, me sa herë u mor secila, dhe stats është skeda Analitika.
list, listAll dhe iterate marrin q:, kind: dhe sort:, si dhe direction: (inbound, outbound ose uploaded), address:, skedarët e një adrese të krahasuar pa dallim shkronjash të mëdha a të vogla, dhe since: e until:, një DateTimeInterface ose një string ISO 8601. since: e përfshin çastin e vet dhe until: ndalet para tij. Një DateTimeInterface dërgohet në UTC, dhe një string që mban vetëm një datë si 2026-09-01 lexohet si mesnatë UTC.
q: kërkon te emri i skedarit dhe te lloji i tij. kind: është image, pdf, audio, video ose text, dhe sort: është newest, parazgjedhja, oldest, largest ose name. OpenEmail\Constants\FileKinds, FileSorts dhe FileDirections emërtojnë zgjedhjet. list kthen një OpenEmail\Result\Page, dhe listAll i kthen të gjithë skedarët në një array të vetëm. iterate kthen një Generator që jep skedarët një nga një dhe e merr faqen e radhës vetëm kur cikli ka nevojë për të.
Leximi kërkon files:read, ndërsa ngarkimi, fshirja dhe publikimi ose revokimi i lidhjeve kërkojnë files:write, që përfshin files:read. Një çelësi të krijuar para se skedarët të kishin fushat e tyre iu dhanë fushat përkatëse. Një çelës pa fushën refuzohet me një 403 insufficient_scope, të hedhur si një PermissionException me isScopeMissing() true. Një çelës i kufizuar në adresa ose domene të caktuara sheh vetëm skedarët që mbërritën te to, ndaj nuk sheh skedarët e ngarkuar për gjithë hapësirën e punës.
download e mban gjithë skedarin në memorie, ndaj merrini skedarët shumë të mëdhenj një nga një. Kalojeni emrin përmes basename() para se ta shkruani, siç bën shembulli, sepse ai erdhi nga kushdo që e dërgoi skedarin.
Lidhjet publike
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 publikon një skedar në një lidhje publike shkarkimi që hapet pa hyrje, dhe kthen lidhjen. Lidhja ndodhet në host-in e skedarëve të domain: kur ai domen ka një të tillë, si files.acme.com, përndryshe në host-in e skedarëve të adresës së cilës i përket skedari, përndryshe në adresën e API-së. Një skedar që erdhi ose doli me një mesazh kopjohet fillimisht në hapësirën publike të ruajtjes, dhe një program ose një skript refuzohet me një 422 file_unshareable, të hedhur si ValidationException.
Çdo createLink krijon një lidhje të re, ndaj nuk riprovohet kurrë pas një përgjigjeje të humbur: kërkojeni fillimisht lidhjen me listLinks. revokeLink e ndal një lidhje përgjithmonë, edhe në postën që ka dalë tashmë, dhe e kthen me revokedAt të vendosur. Revokimi i saj dy herë është i sigurt, ndaj klienti e riprovon si një lexim. Një lidhje e panjohur jep një 404, të hedhur si NotFoundException. revokeAllLinks i ndal njëherësh të gjitha lidhjet e një skedari dhe raporton sa ishin te revoked.
Ngarkimi dhe fshirja
$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 ruan bajtet ashtu siç janë, deri në 100 MB, me emrin te filename:, dhe kthen skedarin. Një dërgim e bashkëngjit si ['fileId' => $upload['id']] te attachments i emails->send. Jepni contentType:, ose të dhëna që mbartin llojin e tyre, dhe çdo gjë tjetër ruhet si application/octet-stream. Lloji nuk hamendësohet kurrë nga filename:, ndaj një string bajtesh ka nevojë për contentType: që të ruhet si diçka tjetër. Nuk riprovohet kurrë, sepse një përpjekje e dytë do të ruante një kopje të dytë.
Të dhënat janë një string bajtesh, një SplFileInfo, një stream nga fopen(), ose një stream PSR-7 apo skedar i ngarkuar. Një SplFileInfo ose një stream i hapur mbi një skedar nuk ka nevojë për asnjërin argument: emri është ai i vetë skedarit, dhe lloji vjen nga prapashtesa e tij kur paketa e njeh, si .pdf ose .png. Një ngarkim Laravel apo Symfony, dhe një skedar i ngarkuar PSR-7, sjellin emrin dhe llojin që dërgoi shfletuesi. Një string nuk mbart emër, ndaj një string pa filename: hedh një InvalidArgumentException para se të dërgohet ndonjë gjë.
Një ngarkim mund të zgjasë 600 sekonda, ose sa timeout i klientit kur ky është më i gjatë, dhe timeout: cakton një kufi tjetër për një thirrje. Një klient i ndërtuar me timeout: 0 pret sa të zgjasë ngarkimi.
Mund të fshihet vetëm një skedar i ngarkuar nga i cili nuk varet asgjë, dhe deletable e usage te çdo skedar e tregojnë këtë paraprakisht. delete refuzon çdo skedar tjetër me një 409 file_in_use, të hedhur si ConflictException. deleteMany merr deri në 100 id, fshin çfarë mundet dhe raporton pjesën tjetër te kept, secilin me arsyen e tij, dhe te missing. Asnjëra nuk riprovohet. Një 404 te një delete i dytë pas një përgjigjeje të humbur do të thotë se i pari funksionoi, dhe një deleteMany i dytë i raporton ata skedarë te missing.