फ़ाइलें
`files.list`, `list_all`, `iterate`, `get`, `download`, `list_links`, `list_all_links`, `iterate_links`, `create_link`, `revoke_link`, `stats`, `upload`, `delete` और `delete_many`।
हर मेथड
page = client.files.list(kind: "pdf", sort: "largest")file = page.items.first links = client.files.list_all_links(file[:id])p links.map { |link| [link[:url], link[:downloads]] } stats = client.files.statsputs stats.dig(:totals, :files), stats.dig(:uploaded, :bytes) File.binwrite(file[:filename], client.files.download(file[:id]))मेलबॉक्स में मौजूद हर फ़ाइल, भेजे और पाए गए अटैचमेंट और उसमें अपलोड की गई फ़ाइलें: ऐप का “फ़ाइलें” पेज। download बाइट्स को binary String के रूप में लौटाता है, जिसे File.binwrite बिना बदले सहेजता है। लिंक वे डाउनलोड लिंक हैं जिनके रूप में फ़ाइल गई, साथ में यह कि हर एक कितनी बार लाया गया, और stats “Analytics” टैब है।
list, list_all और iterate q:, kind: और sort: लेते हैं, और direction: (inbound, outbound या uploaded), address:, यानी एक पते की फ़ाइलें, case की परवाह किए बिना तुलना करके, और since: तथा until:, एक Time, DateTime या ISO 8601 String भी। since: अपने क्षण को शामिल करता है और until: उससे पहले रुकता है। Ruby Date सादी तारीख़ के रूप में भेजी जाती है, जिसे यह सूची UTC आधी रात पढ़ती है।
q: फ़ाइल का नाम और उसका टाइप खोजता है। kind: image, pdf, audio, video या text है, और sort: newest, जो डिफ़ॉल्ट है, oldest, largest या name है। OpenEmail::FILE_KINDS, OpenEmail::FILE_SORTS और OpenEmail::FILE_DIRECTIONS विकल्पों के नाम बताते हैं। list एक OpenEmail::Page लौटाता है, और list_all हर फ़ाइल एक Array में लौटाता है। iterate हर फ़ाइल block में yield करता है और अगला पेज तभी लाता है जब लूप को ज़रूरत हो। block के बिना यह एक Enumerator लौटाता है।
पढ़ने के लिए files:read चाहिए, और अपलोड, हटाने और लिंक प्रकाशित या रद्द करने के लिए files:write चाहिए, जिसमें files:read शामिल है। फ़ाइलों के अपने scopes आने से पहले बनी कुंजी को मेल खाते scopes दे दिए गए। scope के बिना कुंजी 403 insufficient_scope के साथ अस्वीकार होती है, और error पर scope_missing? true होता है। ख़ास पतों या डोमेन तक सीमित कुंजी सिर्फ़ वे फ़ाइलें देखती है जो उन तक पहुँचीं, इसलिए वह पूरे वर्कस्पेस के लिए अपलोड की गई फ़ाइलें नहीं देखती।
download पूरी फ़ाइल memory में रखता है, इसलिए बहुत बड़ी फ़ाइलें एक-एक करके लाएँ।
सार्वजनिक लिंक
uploads = client.files.list_all(direction: "uploaded", since: Time.utc(2026, 9, 1))file = uploads.first link = client.files.create_link(file[:id], domain: "acme.com")puts link[:url] client.files.revoke_link(file[:id], link[:id])create_link फ़ाइल को एक सार्वजनिक डाउनलोड लिंक पर प्रकाशित करता है जो बिना साइन-इन खुलता है, और लिंक लौटाता है। लिंक domain: के files होस्ट पर रहता है जब उस डोमेन का कोई हो, जैसे files.acme.com, वरना उस पते के files होस्ट पर जिसकी फ़ाइल है, वरना API पते पर। जो फ़ाइल किसी संदेश के साथ आई या गई वह पहले सार्वजनिक storage में कॉपी होती है, और कोई प्रोग्राम या स्क्रिप्ट 422 file_unshareable के साथ अस्वीकार होता है, जो OpenEmail::ValidationError के रूप में raise होता है।
हर create_link एक नया लिंक बनाता है, इसलिए खोए जवाब के बाद इस पर कभी पुनः प्रयास नहीं होता: पहले list_links से लिंक ढूँढें। revoke_link लिंक को हमेशा के लिए रोक देता है, पहले जा चुके मेल में भी, और उसे revokedAt सेट करके लौटाता है। किसी लिंक को दो बार रद्द करना सुरक्षित है, इसलिए gem इस पर read की तरह पुनः प्रयास करता है। अज्ञात लिंक 404 है, जो OpenEmail::NotFoundError के रूप में raise होता है।
अपलोड और हटाना
upload = client.files.upload(File.binread("report.pdf"), filename: "report.pdf", content_type: "application/pdf")client.files.delete(upload[:id]) if upload[:deletable] invoice = client.files.upload(Pathname("invoice.pdf"))puts invoice[:filename], invoice[:mimeType] result = client.files.delete_many(["file_0c4e7a91d2b84f63a5e19b7d", "file_6bb640f5b99e47deb758f1f5"])result[:kept].each { |kept| puts "#{kept[:filename]} #{kept[:reason]}" }upload बाइट्स को जैसे हैं वैसे, 100 MB तक, filename: में दिए नाम के तहत सहेजता है, और फ़ाइल लौटाता है। send इसे emails.send के attachments में {fileId: upload[:id]} के रूप में जोड़ता है। content_type: पास करें, या ऐसे बाइट्स जो अपना टाइप साथ लाते हैं, और बाक़ी सब application/octet-stream के रूप में सहेजा जाता है। इस पर कभी पुनः प्रयास नहीं होता, क्योंकि दूसरा प्रयास दूसरी कॉपी सहेज देता।
बाइट्स binary String, IO या Pathname होते हैं। Pathname या File को किसी keyword की ज़रूरत नहीं: नाम फ़ाइल का अपना है, और टाइप उसके extension से आता है जब gem उसे जानता हो, जैसे .pdf या .png। Rails अपलोड अपना original_filename और content_type साथ लाता है। सादे बाइट्स का कोई नाम नहीं होता, इसलिए filename: के बिना String या StringIO कुछ भी भेजे जाने से पहले ArgumentError raise करता है।
एक अपलोड 600 सेकंड तक चल सकता है, या क्लाइंट के timeout तक जब वह ज़्यादा हो, और timeout: एक कॉल के लिए दूसरी सीमा तय करता है। timeout: 0 के साथ बना क्लाइंट तब तक इंतज़ार करता है जितना अपलोड में लगे।
सिर्फ़ वही अपलोड हटाया जा सकता है जिस पर कुछ निर्भर न हो, और हर फ़ाइल पर deletable और usage यह पहले से बताते हैं। delete किसी भी दूसरी फ़ाइल को 409 file_in_use के साथ अस्वीकार करता है, जो OpenEmail::ConflictError के रूप में raise होता है। delete_many 100 तक ids लेता है, जो हटा सके हटाता है, और बाक़ी को kept में, हर एक के कारण के साथ, और missing में बताता है। दोनों में से किसी पर पुनः प्रयास नहीं होता। खोए जवाब के बाद दूसरे delete पर 404 का मतलब है कि पहला काम कर गया, और दूसरा delete_many उन फ़ाइलों को missing में बताता है।