दस्तावेज़ पर जाएँ
PHP

Files

`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;

मेलबॉक्स में रखी हर फ़ाइल, भेजे और पाए गए अटैचमेंट और उसमें अपलोड की गई फ़ाइलें: ऐप का Files पेज। download बाइट्स को एक स्ट्रिंग के रूप में लौटाता है, जिसे file_put_contents बिना बदले सहेजता है। links वे download links हैं जिनके रूप में फ़ाइल बाहर गई, हर एक कितनी बार लाया गया इसके साथ, और stats Analytics टैब है।

list, listAll और iterate q:, kind: और sort: लेते हैं, और साथ में direction: (inbound, outbound या uploaded), address:, यानी एक पते की फ़ाइलें, case की परवाह किए बिना तुलना करके, और since: और until:, एक DateTimeInterface या ISO 8601 स्ट्रिंग। since: अपने क्षण को शामिल करता है और until: उससे पहले रुकता है। DateTimeInterface UTC में भेजा जाता है, और 2026-09-01 जैसी सिर्फ़ तारीख़ वाली स्ट्रिंग UTC आधी रात के रूप में पढ़ी जाती है।

q: फ़ाइल के नाम और उसके टाइप में खोजता है। kind: image, pdf, audio, video या text होता है, और sort: newest (डिफ़ॉल्ट), oldest, largest या name होता है। OpenEmail\Constants\FileKinds, FileSorts और FileDirections विकल्पों के नाम देते हैं। list एक OpenEmail\Result\Page लौटाता है, और listAll हर फ़ाइल एक array में लौटाता है। iterate एक Generator लौटाता है जो एक बार में एक फ़ाइल yield करता है और अगला पेज तभी लाता है जब लूप को उसकी ज़रूरत हो।

पढ़ने के लिए files:read चाहिए, और अपलोड करने, हटाने और links प्रकाशित करने या वापस लेने के लिए files:write, जिसमें files:read शामिल है। files के अपने scopes आने से पहले बनी कुंजी को मेल खाने वाले scopes दिए गए। बिना scope वाली कुंजी 403 insufficient_scope के साथ अस्वीकार होती है, जो ऐसे PermissionException के रूप में throw होता है जिसका isScopeMissing() true होता है। ख़ास पतों या डोमेन तक सीमित कुंजी सिर्फ़ वे फ़ाइलें देखती है जो उन तक पहुँचीं, इसलिए वह पूरे वर्कस्पेस के लिए अपलोड की गई फ़ाइलें नहीं देखती।

download पूरी फ़ाइल को मेमोरी में रखता है, इसलिए बहुत बड़ी फ़ाइलें एक-एक करके लाएँ। लिखने से पहले नाम को नमूने की तरह 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: के नाम से सहेजता है, और फ़ाइल लौटाता है। send उसे emails->send के attachments में ['fileId' => $upload['id']] के रूप में जोड़ता है। contentType: पास करें, या ऐसा data जिसका अपना टाइप हो, और बाकी सब application/octet-stream के रूप में सहेजा जाता है। टाइप का अनुमान कभी filename: से नहीं लगाया जाता, इसलिए बाइट्स की स्ट्रिंग को किसी और रूप में सहेजने के लिए contentType: चाहिए। इसे कभी retry नहीं किया जाता, क्योंकि दूसरा प्रयास दूसरी कॉपी सहेज देगा।

data बाइट्स की स्ट्रिंग, SplFileInfo, fopen() का stream, या PSR-7 stream या अपलोड की गई फ़ाइल होता है। SplFileInfo या किसी फ़ाइल पर खोले गए stream को कोई भी आर्ग्युमेंट नहीं चाहिए: नाम फ़ाइल का अपना होता है, और टाइप उसके extension से आता है जब पैकेज उसे जानता हो, जैसे .pdf या .png। Laravel या Symfony का upload, और PSR-7 की अपलोड की गई फ़ाइल, वह नाम और टाइप लाते हैं जो ब्राउज़र ने भेजा। स्ट्रिंग का कोई नाम नहीं होता, इसलिए filename: के बिना स्ट्रिंग कुछ भी भेजे जाने से पहले InvalidArgumentException throw करती है।

एक अपलोड 600 सेकंड तक चल सकता है, या क्लाइंट के timeout तक जब वह ज़्यादा हो, और timeout: एक कॉल के लिए दूसरी सीमा तय करता है। timeout: 0 के साथ बना क्लाइंट तब तक इंतज़ार करता है जितना अपलोड में लगे।

सिर्फ़ वही upload हटाया जा सकता है जिस पर कुछ निर्भर न हो, और हर फ़ाइल पर deletable और usage यह पहले से बताते हैं। delete किसी भी दूसरी फ़ाइल को 409 file_in_use के साथ अस्वीकार करता है, जो ConflictException के रूप में throw होता है। deleteMany अधिकतम 100 id लेता है, जो हटा सकता है हटाता है, और बाकी को kept में, हर एक के कारण के साथ, और missing में बताता है। दोनों में से कोई retry नहीं होता। खोए हुए जवाब के बाद दूसरे delete पर 404 का मतलब है कि पहला काम कर गया, और दूसरा deleteMany उन फ़ाइलों को missing में बताता है।