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

फ़ाइलें, इंपोर्ट और सेटिंग्स

मेलबॉक्स में रखी फ़ाइलों, पुराने मेलबॉक्स या Resend अकाउंट के इंपोर्ट, मेल में मिले कैलेंडर, और वर्कस्पेस और हर पते की सेटिंग्स की हर कमांड।

अवलोकन

मेल के आसपास की चीज़ों को पाँच नेमस्पेस कवर करते हैं। openemail files फ़ाइलें पेज है: भेजा और पाया गया हर अटैचमेंट और अपलोड की गई हर फ़ाइल, उसके बाइट और उन डाउनलोड लिंक के साथ जिनके रूप में वह भेजी गई। openemail imports पुराना मेलबॉक्स एक पते में लाता है, और openemail provider-imports एक Resend अकाउंट को यहाँ लाता है। openemail calendar मेल में मिले इवेंट पढ़ता है, और openemail settings मेलबॉक्स की पसंद और हर पते का हस्ताक्षर और ट्रैकिंग पढ़ता और बदलता है।

  • ID बताती है कि वह किसकी है: फ़ाइल के लिए file_, मेलबॉक्स इंपोर्ट के लिए imp_, Resend इंपोर्ट के लिए pimp_ और कैलेंडर इवेंट के लिए cal_, हर एक के बाद 24 hex अक्षर। डाउनलोड लिंक की अपनी ID होती है, जो files list-links या files create-link से मिलती है।
  • इंपोर्ट पर --address-id किसी पते की ID है, जो openemail domains list-addresses <id> से मिलती है, ख़ुद पता नहीं।
  • नेमस्पेस file, import, provider-import या providerImports, और setting से भी चलते हैं। जहाँ उपनाम हैं, वहाँ वर्ब सामान्य उपनाम लेते हैं: list के लिए ls, get के लिए show और view, create के लिए new और add, settings update के लिए edit, और files delete के लिए rm, del और remove।
  • इनमें से कोई भी कमांड ब्राउज़र साइन-इन से सत्यापन कोड नहीं माँगती। जो कमांड कुछ हमेशा के लिए बदलती हैं, वे पुष्टि माँगती हैं, और स्क्रिप्ट के लिए --yes जवाब देता है।
  • openemail <command> --help हर आर्ग्युमेंट और फ़्लैग की सूची देता है, उसके टाइप, कॉल के ज़रूरी स्कोप, मेथड और पाथ, और जो लौटता है उसके साथ। वही पेज डेटा के रूप में पाने के लिए --json जोड़ें।

फ़ाइलें

openemail files मेलबॉक्स में रखी हर फ़ाइल पढ़ता और प्रबंधित करता है: आए अटैचमेंट, गए अटैचमेंट, और फ़ाइलें पेज पर अपलोड की गई फ़ाइलें। openemail open files वेब ऐप में वही पेज खोलता है।

कमांडयह क्या करता है
openemail files listफ़ाइलों का एक पेज दिखाएँ, नाम, प्रकार, आकार, दिशा, हर एक किस पते पर आई और क्या उसे हटाया जा सकता है, इसके साथ
openemail files get <id>एक फ़ाइल पढ़ें, उस थ्रेड और संदेश के साथ जिसकी वह है, और उसके usage और deletable के साथ
openemail files statsफ़ाइलें और उनके लिए गए बाइट गिनें, पाई गई, भेजी गई और अपलोड की गई में बँटे हुए, शीर्ष प्रकारों और पतों, पिछले 30 दिनों और अब भी काम कर रहे लिंक के साथ
openemail files download <id>किसी फ़ाइल के बाइट ठीक वैसे लाएँ जैसे सहेजे गए, --out <file> में या पाइप करने पर stdout पर
openemail files list-links <id>वे डाउनलोड लिंक दिखाएँ जिनके रूप में कोई फ़ाइल भेजी गई, नए पहले, हर एक कितनी बार खोला गया और क्या रद्द हुआ, इसके साथ
openemail files create-link <id>फ़ाइल को एक नए सार्वजनिक डाउनलोड लिंक पर प्रकाशित करें जो बिना साइन इन के खुलता है
openemail files revoke-link <id> <link-id>किसी सार्वजनिक लिंक को हमेशा के लिए बंद करें, पहले से भेजी गई मेल में भी। पुष्टि माँगती है
openemail files upload <data>पाथ से, या - से stdin से, 100 MB तक की फ़ाइल अपलोड करें
openemail files delete <id>ऐसा अपलोड हमेशा के लिए हटाएँ जिस पर कुछ भी निर्भर नहीं। पुष्टि माँगती है
openemail files delete-many <ids...>एक कॉल में 100 तक फ़ाइलें हटाएँ और बताएँ कि कौन-सी रखी गईं और कौन-सी नहीं मिलीं। पुष्टि माँगती है
  • files list --q (नाम और प्रकार), --kind (image, pdf, audio, video या text), --direction (inbound, outbound या uploaded), --address, --since और --until से छाँटता है, और --sort (newest, oldest, largest या name) से क्रम देता है। --since और --until ISO 8601 तारीख़ या तारीख़-समय लेते हैं: --since अपने पल को शामिल करता है और --until उससे पहले रुक जाता है।
  • सिर्फ़ वही अपलोड हटाया जा सकता है जिस पर कुछ भी निर्भर न हो, और deletable यह पहले से बताता है। usage बताता है कि किसी भी दूसरी फ़ाइल को क्या रोके हुए है: received, sent, ऐसे अपलोड के लिए linked जिसका डाउनलोड लिंक अब भी काम करता है, या ऐसे अपलोड के लिए scheduled जो किसी अभी न गए संदेश से जुड़ा है। delete इन्हें 409 file_in_use के साथ अस्वीकार करती है। delete-many जो हटा सके वह हटाती है, बाकी को हर एक के कारण के साथ kept में दिखाती है, और अनजानी ID को missing में।
  • upload आपके दिए पाथ की फ़ाइल पढ़ती है और उसे उसी फ़ाइल के नाम से, उसके एक्सटेंशन से पता चलने वाले प्रकार के साथ सहेजती है। --filename और --content-type इन्हें बदल देते हैं। stdin से, - को --filename चाहिए, और --content-type के बिना प्रकार application/octet-stream होता है। अपलोड 10 मिनट तक इंतज़ार करता है, जिसे --timeout-ms बदलता है।
  • upload जो ID लौटाती है, वह openemail emails send --attachments में { "fileId": "…" } के रूप में फ़ाइल को भेजने से जोड़ती है, और 5 MB की इनलाइन सीमा से बड़ी फ़ाइल इसी तरह जाती है।
  • ख़ाली फ़ाइल 400 upload_empty है, प्रोग्राम या स्क्रिप्ट (नाम से तय) 400 upload_dangerous है, और 100 MB से बड़ी फ़ाइल 413 upload_too_large है। एक वर्कस्पेस 10 GB तक अपलोड रखता है और एक घंटे में 500 अपलोड लेता है।
  • टर्मिनल पर download को --out <file> चाहिए और इसके बिना यह एग्ज़िट कोड 2 के साथ रुकती है। पाइप करने पर बाइट stdout पर जाते हैं, और --out - भी stdout माँगता है। पूरी फ़ाइल मेमोरी में रखी जाती है।
  • create-link हर कॉल पर नया लिंक बनाती है, अपनी डाउनलोड गिनती के साथ, और लिंक तब तक काम करता है जब तक रद्द न हो या फ़ाइल हटाई न जाए। यह --domain के फ़ाइल डोमेन पर रहता है अगर उस डोमेन का कोई हो, जैसे files.acme.com, वरना फ़ाइल के पते के फ़ाइल डोमेन पर, वरना API के पते पर। प्रोग्राम या स्क्रिप्ट 422 file_unshareable के साथ अस्वीकार होते हैं।
  • revoke-link को दोहराना सुरक्षित है: पहले से रद्द लिंक बिना बदले लौट आता है।
  • किसी ख़ास पते या डोमेन तक सीमित कुंजी या साइन-इन सिर्फ़ उन पर आई फ़ाइलें देखती है, पूरे वर्कस्पेस के लिए अपलोड की गई फ़ाइलें कभी नहीं, और उसके अपने अपलोड उसके पहले पते के होते हैं।
  • फ़ाइलों की इंडेक्स उसी दिन से शुरू होती है जिस दिन वह जारी हुई। पुराने अटैचमेंट अब भी अपने संदेशों पर हैं, जहाँ openemail threads list-attachments <id> उन्हें पढ़ता है।

मेलबॉक्स इंपोर्ट

openemail imports पुराना मेलबॉक्स एक पते में लाता है: Google Takeout आर्काइव, Apple Mail, Thunderbird और ज़्यादातर डेस्कटॉप ऐप की .mbox फ़ाइलें, .eml फ़ाइलें, और इनमें से किसी को भी रखने वाले .zip या .tgz आर्काइव, हर फ़ाइल 100 GB तक और एक इंपोर्ट में 50 फ़ाइलें तक। थ्रेड, तारीख़ें और लेबल साथ आते हैं। इंपोर्ट हुई मेल चुपचाप आती है: वह कोई नियम, फ़ॉरवर्ड, सूचना, सारांश या वेबहुक नहीं चलाती।

ज़्यादातर लोगों को import-files की ज़रूरत होती है: यह इंपोर्ट बनाती है, प्रगति की लाइन के साथ हर फ़ाइल को हिस्सों में अपलोड करती है, और उसे शुरू करती है। बाकी वर्ब यही चरण एक-एक करके हैं, रुके हुए अपलोड को पूरा करने के लिए या उसे ख़ुद चलाने के लिए। create योजना, chunkBytes और हर फ़ाइल के chunks लौटाती है, upload-chunk एक हिस्सा भेजती है, upload-state बताती है कि कौन-से हिस्से पहुँचे, और start इंपोर्ट को कतार में डालती है। openemail open imports वही इंपोर्ट वेब ऐप में दिखाता है।

कमांडयह क्या करता है
openemail imports listवर्कस्पेस के इंपोर्ट का एक पेज दिखाएँ, नए पहले, स्थिति, पढ़े गए बाइट और गिनती के साथ। --address-id एक पता रखता है
openemail imports get <id>एक इंपोर्ट पढ़ें, उसकी स्थिति, प्रगति और गिनती के साथ। जब तक यह completed, failed या cancelled न दिखाए, इसे बार-बार जाँचें
openemail imports create --address-id <value> --files <json|@file|->{ name, bytes } की सूची से इंपोर्ट बनाएँ और उसकी अपलोड योजना पाएँ, status uploading के साथ
openemail imports upload-state <id>हर फ़ाइल के लिए पहले से सहेजे हिस्सों के इंडेक्स, ताकि रुका हुआ अपलोड सिर्फ़ वही भेजे जो बाकी है
openemail imports upload-chunk <id> <file> <chunk> <data>एक फ़ाइल का एक हिस्सा अपलोड करें, पाथ से या - से stdin से। किसी हिस्से को फिर भेजने पर वह बदल जाता है
openemail imports start <id>जाँचें कि हर हिस्सा पहुँचा, हर फ़ाइल का फ़ॉर्मैट पहचानें और इंपोर्ट को कतार में डालें
openemail imports cancel <id>इंपोर्ट को उसके अगले चेकपॉइंट पर रोकें। पहले से इंपोर्ट हुई मेल बनी रहती है। पुष्टि माँगती है
openemail imports list-failures <id>हर वह संदेश या आर्काइव एंट्री दिखाएँ जो नहीं आ सकी, कारण के साथ
openemail imports delete-upload <id>अपलोड की गई फ़ाइलें हटाएँ। पहले से इंपोर्ट हुई मेल बनी रहती है। पुष्टि माँगती है
openemail imports import-files --address-id <value> --files <path>एक ही कमांड में इंपोर्ट बनाएँ, अपलोड करें और शुरू करें, और कतार में लगते ही लौटें
  • पता वर्कस्पेस के अपने डोमेन का होना चाहिए, जिसके लिए कुंजी या साइन-इन काम कर सके। हर पते पर एक ही इंपोर्ट चलता है: एक के कतार में या चलते रहते दूसरा 409 already_running है।
  • import-files हर फ़ाइल के लिए एक बार --files लेती है, या कॉमा से अलग किए कई पाथ, और हर एक को उसके अपने फ़ाइल नाम से भेजती है। --options {"keepInbox":false,"includeSpam":true} जैसा JSON लेता है। create पर यही तीन स्विच हैं: --options-keep-inbox, --options-include-spam और --options-include-trash, हर एक आगे --no- लगाकर बंद होता है, जैसे --no-options-keep-inbox।
  • keepInbox डिफ़ॉल्ट रूप से चालू है, इसलिए पुराने इनबॉक्स की मेल अपनी अनपढ़ी स्थिति के साथ Inbox में आती है। बंद होने पर सब कुछ Archive में जाता है। स्पैम और ट्रैश पीछे रह जाते हैं, जब तक आप उन्हें शामिल न करें।
  • create --files को JSON के रूप में लेती है, इनलाइन या @path से फ़ाइल से, और हर bytes उस फ़ाइल का ठीक आकार होना चाहिए जिसे आप फिर अपलोड करेंगे।
  • फ़ाइल के आख़िरी हिस्से को छोड़कर हर हिस्सा ठीक chunkBytes लंबा होता है, और ग़लत लंबाई का हिस्सा 400 bad_chunk है। start हिस्से ग़ायब वाली फ़ाइल को 412 missing_chunks के साथ अस्वीकार करती है, और जो फ़ाइल न आर्काइव हो न मेलबॉक्स उसे 400 unsupported_file के साथ। जो इंपोर्ट uploading से आगे निकल चुका है, उस पर यह इंपोर्ट को बिना बदले लौटाती है।
  • अगर दोबारा कोशिशों के बाद भी कोई हिस्सा विफल रहे, तो import-files इंपोर्ट को uploading में छोड़कर रुक जाती है। नीचे का ब्लॉक पहली फ़ाइल के ग़ायब हिस्से भेजता है और इंपोर्ट शुरू करता है।
  • इंपोर्ट totalBytes में से processedBytes बताता है, और seen, imported, duplicate, filtered, failed और threads के साथ counts। lastError सिर्फ़ तब सेट होता है जब status failed हो।
  • list-failures हर विफलता को एक reason देती है: too-large (50 MB से ऊपर), unparseable, no-date, storage-error, unreadable-entry, encrypted-entry या archive-limit, और जहाँ पढ़े जा सके वहाँ विषय और भेजने वाला भी।
  • पूरे हो चुके इंपोर्ट पर cancel 409 not_cancellable है। delete-upload अभी अपलोड हो रहे इंपोर्ट को रद्द करती है, और कतार में या चल रहे इंपोर्ट को 409 still_running के साथ अस्वीकार करती है, इसलिए पहले उसे रद्द करें।
रुका हुआ अपलोड पूरा करें
openemail imports get "$import_id" --json > import.jsonopenemail imports upload-state "$import_id" --json > state.jsonchunk=$(jq .chunkBytes import.json)chunks=$(jq '.files[0].chunks' import.json)for i in $(seq 0 $((chunks - 1))); do  jq -e --argjson i "$i" '.received[0] | any(. == $i)' state.json > /dev/null && continue  dd if=takeout-001.zip bs="$chunk" skip="$i" count=1 2> /dev/null |    openemail imports upload-chunk "$import_id" 0 "$i" -doneopenemail imports start "$import_id"

Resend से इंपोर्ट

openemail provider-imports एक फ़ुल-एक्सेस Resend API कुंजी से वर्कस्पेस को Resend से यहाँ लाता है। सप्रेशन अपना कारण बनाए रखते हैं, सेगमेंट ऑडियंस बन जाते हैं, सब्सक्राइब संपर्क अपने नामों के साथ आते हैं, और टेम्पलेट घोषित वेरिएबल वाले HTML टेम्पलेट के रूप में आते हैं। वेबहुक बंद हालत में रजिस्टर होते हैं, क्योंकि यहाँ की डिलीवरी अलग तरह से हस्ताक्षरित होती है। साइनिंग कुंजी या टोकन Resend से बाहर नहीं आ सकते, इसलिए डोमेन और API कुंजियाँ इसके बजाय रिपोर्ट में एक चेकलिस्ट के रूप में लौटती हैं।

कमांडयह क्या करता है
openemail provider-imports inspect <api-key>इंपोर्ट से पहले, Resend अकाउंट में जो है उसे हर रिसोर्स के हिसाब से गिनें। कुछ भी सहेजा नहीं जाता और कुंजी रखी नहीं जाती
openemail provider-imports create --resend-key <value> --resources <a,b>आपके बताए रिसोर्स का इंपोर्ट कतार में डालें
openemail provider-imports listभेजने वाले प्रोवाइडर से हुए इंपोर्ट का एक पेज दिखाएँ, नए पहले, हर एक अपनी रिपोर्ट के साथ
openemail provider-imports get <id>एक इंपोर्ट पढ़ें: उसकी स्थिति, वह किस चरण पर है और अब तक की रिपोर्ट
openemail provider-imports cancel <id>इंपोर्ट रोकें और Resend कुंजी मिटा दें। जो पहले आ चुका है वह बना रहता है। पुष्टि माँगती है
  • Resend कुंजी को फ़ाइल से पढ़ने के लिए @path के रूप में, या stdin से पढ़ने के लिए - के रूप में दें, ताकि वह आपके शेल इतिहास और प्रोसेस सूची से बाहर रहे। कमांड लाइन पर टाइप की गई कुंजी भी काम करती है, चेतावनी के साथ। --dry-run कुंजी छिपाकर बॉडी प्रिंट करता है।
  • --resources suppressions, audiences, contacts, templates, webhooks, domains और api-keys में से कोई भी लेता है, कॉमा से अलग या कई बार।
  • सिर्फ़ भेजने वाली कुंजी 400 restricted_key है। इंपोर्ट के लिए Resend पर एक फ़ुल-एक्सेस कुंजी बनाएँ, और बाद में उसे रद्द कर दें।
  • inspect हर रिसोर्स का पहला पेज पढ़ता है और counts लौटाता है, हर रिसोर्स के लिए एक { count, more }, और जहाँ कोई रिसोर्स पहले पेज से आगे जाता है वहाँ more सेट होता है।
  • एक वर्कस्पेस में एक समय पर एक ही इंपोर्ट चलता है, और दूसरा 409 already_running है। एक ही इंपोर्ट दो बार चलाने से कुछ दोहराता नहीं। कुंजी सिर्फ़ इंपोर्ट चलने तक एन्क्रिप्ट करके रखी जाती है, और उसके ख़त्म होने, विफल होने या रद्द होने पर मिटा दी जाती है।
  • जिन संपर्कों ने Resend पर सदस्यता छोड़ी थी, उन्हें छोड़ दिया जाता है और report.contacts.unsubscribed में गिना जाता है।
  • report.domains हर Resend डोमेन को एक state के साथ दिखाता है: जब वह इस वर्कस्पेस में न हो तो absent, जब हो पर सत्यापित न हो तो added, और verified, साथ में वे रिकॉर्ड जो Resend पर थे। ग़ायब डोमेन openemail domains create से जोड़ें। report.apiKeys उन कुंजियों के नाम बताता है जिन्हें openemail keys create से फिर बनाना है।
  • ब्राउज़र साइन-इन के साथ ये कमांड सिर्फ़ वर्कस्पेस का मालिक इस्तेमाल कर सकता है, और सदस्य को 403 owner_only मिलता है। API कुंजी पर यह पाबंदी नहीं है। किसी ख़ास पते या डोमेन तक सीमित कुंजी या साइन-इन इंपोर्ट की जाँच नहीं कर सकती और न उसे बना सकती है, क्योंकि ऑडियंस, सप्रेशन और टेम्पलेट पूरे वर्कस्पेस के होते हैं।
  • create को हर लाए जाने वाले रिसोर्स का स्कोप भी चाहिए: ऑडियंस के लिए audiences:write, संपर्कों के लिए contacts:write और audiences:write, टेम्पलेट के लिए templates:write, वेबहुक के लिए webhooks:write और डोमेन के लिए domains:read।

कैलेंडर

openemail calendar मेल में मिले कैलेंडर इवेंट पढ़ता है। तीनों कमांड सिर्फ़ पढ़ती हैं। list-events आपकी दी गई अवधि के भीतर हर इवेंट को उसकी घटनाओं में फैलाती है, इसलिए साप्ताहिक मीटिंग हर हफ़्ते एक पंक्ति है, और get-event और get-event-ics एक पूरा इवेंट पढ़ती हैं। openemail open calendar वेब ऐप में कैलेंडर खोलता है।

कमांडयह क्या करता है
openemail calendar list-events --from <when> --to <when>दो पलों के बीच की घटनाओं का एक पेज दिखाएँ, शुरू होने के समय के क्रम में, हर एक eventId से अपने इवेंट की ओर इशारा करती हुई
openemail calendar get-event <id>एक इवेंट पढ़ें, उसके प्रतिभागियों और उनके जवाबों, उसके दोहराव नियम, बाहर रखी तारीख़ों, आयोजक और रिमाइंडर के साथ
openemail calendar get-event-ics <id>इवेंट को iCalendar दस्तावेज़ के रूप में डाउनलोड करें, प्रिंट करके या --out <file> में लिखकर
  • --from और --to 2026-10-01T00:00:00Z जैसे ISO 8601 तारीख़-समय हैं। --to को --from के बाद और ज़्यादा से ज़्यादा 366 दिन बाद होना चाहिए, क्योंकि दोहराई जाने वाली सीरीज़ का कोई अंत नहीं होता जहाँ तक सूची बने। ग़ायब सीमा 422 invalid_parameter है। जो सीमा पार्स न हो, उलटी या बहुत लंबी अवधि, या अनजाना ज़ोन 400 invalid_parameter है।
  • --timezone Europe/London जैसा IANA ज़ोन है, छोड़ने पर UTC। यह उन इवेंट को फैलाता है जो अपने ज़ोन के बिना सहेजे गए हैं, जिससे तय होता है कि पूरे दिन का इवेंट किस दिन पड़ेगा।
  • get-event और get-event-ics किसी घटना का eventId लेती हैं, iCalendar uid नहीं। दोहराई जाने वाली सीरीज़ एक इवेंट है, इसलिए उसके start और end पहली घटना बताते हैं।
  • रद्द हुए इवेंट भी सूची में आते हैं, status CANCELLED के साथ। myPartstat वह जवाब है जो वर्कस्पेस के अपने डोमेन पर मौजूद किसी भी पते के लिए दर्ज है, और null जब उनमें से कोई प्रतिभागी न हो।
  • पेजिंग --cursor और उसी अवधि के साथ आगे बढ़ती है। किसी ख़ास पते तक सीमित कुंजी या साइन-इन सिर्फ़ वे इवेंट देखती है जिन्हें उनमें से कोई आयोजित करता है या जिनमें शामिल होता है, और कोई भी दूसरा इवेंट 404 है।
  • get-event-ics METHOD:PUBLISH घोषित करती है, इसलिए इसे इंपोर्ट करने पर इवेंट जैसा है वैसा दिखता है, स्वीकार या अस्वीकार करने का विकल्प नहीं। समय वाले इवेंट UTC समय के रूप में और पूरे दिन वाले इवेंट तारीख़ के रूप में लिखे जाते हैं। DTSTAMP डाउनलोड का समय है, इसलिए बिना बदले इवेंट के दो डाउनलोड उस लाइन पर अलग होते हैं।

सेटिंग्स

openemail settings मेलबॉक्स की पसंद पढ़ता और बदलता है, जैसे टाइमज़ोन, भाषा, समय का फ़ॉर्मैट और ब्लॉकलिस्ट। चार सेटिंग्स वर्कस्पेस की नहीं, पते की होती हैं: signature, openEmailSignature (OpenEmail फ़ुटर), trackOpens और trackClicks। पता --address से बताएँ, या डोमेन के कैच-ऑल के लिए *@acme.com।

कमांडयह क्या करता है
openemail settings getहर सेटिंग डिफ़ॉल्ट भरकर पढ़ें। --address के साथ, चार प्रति-पता सेटिंग्स वैसे पढ़ी जाती हैं जैसे उस पते से भेजना उन्हें तय करता है
openemail settings updateजो सेटिंग्स आप दें उन्हें बदलें और बाकी रखें। जवाब में हर सेटिंग होती है, लिखने के बाद फिर से पढ़ी हुई
  • --address के बिना get चार प्रति-पता सेटिंग्स को बिल्ट-इन डिफ़ॉल्ट के रूप में पढ़ती है: कोई हस्ताक्षर नहीं, OpenEmail फ़ुटर चालू, और ओपन और लिंक ट्रैकिंग चालू। इसके साथ वे पते के अपने मानों से आती हैं, फिर उसके डोमेन के कैच-ऑल से जब कैच-ऑल ने वह पता पकड़ा हो, फिर डिफ़ॉल्ट से। बिना अपनी सेटिंग्स वाला प्लस पता अपने मूल पते की सेटिंग्स पढ़ता है।
  • --address के बिना update --signature, --open-email-signature, --track-opens और --track-clicks को 422 address_required के साथ अस्वीकार करती है और कुछ नहीं लिखती। इसके साथ update सिर्फ़ ये चार लेती है, और बाकी कुछ भी 422 not_per_address है। पता इसी वर्कस्पेस में होना चाहिए, या यहाँ के किसी सत्यापित डोमेन के लिए *@domain, जिसका कैच-ऑल चालू हो।
  • स्विच आगे --no- लगाने से बंद होते हैं: --no-open-email-signature, --no-track-opens और --no-track-clicks।
  • --signature ज़्यादा से ज़्यादा 150,000 वर्णों का HTML है, जो लिखते समय साफ़ किया जाता है, इसलिए जो लौटता है वही भेजा जाएगा। ख़ाली स्ट्रिंग इसे हटा देती है। भेजना इसे जोड़ेगा या नहीं, यह भेजने पर निर्भर है: openemail emails send --help में --signature देखें।
  • फ़्लैग आम फ़ील्ड को कवर करते हैं। --data कोई भी सहेजी गई सेटिंग JSON के रूप में लेता है, इनलाइन, @path से फ़ाइल से या - से stdin से, जैसे timeFormat, weekStart, undoSendEnabled, blockedSenders या blockedDomains। जो कुंजियाँ सेटिंग्स नहीं पहचानतीं वे बिना एरर के छोड़ दी जाती हैं, और ग़लत टाइप वाली पहचानी हुई कुंजी 422 invalid_parameter है।
  • blockedDomains जैसी सूची पूरी बदल दी जाती है, इसलिए पहले उसे पढ़ें और अपने बदलाव के साथ वापस भेजें, जैसा नीचे का उदाहरण करता है। नियम बनने के लिए बहुत छोटी ब्लॉकलिस्ट एंट्री 422 blocklist_entry_too_broad है।
  • --timezone और --language बिना जाँच के जैसे दिए गए वैसे सहेजे जाते हैं, इसलिए भेजने से पहले ज़ोन या भाषा कोड जाँच लें।
  • प्राइवेसी फ़ील्ड, externalImages, trustedSenders, blockedSenders, blockedDomains, blockedWords और useDefaultBlockedWords, वर्कस्पेस के होते हैं। किसी ख़ास पते या डोमेन तक सीमित कुंजी या साइन-इन इन्हें नहीं बदल सकती, और --address में सिर्फ़ अपने पास का पता, या अपने पास के पूरे डोमेन का कैच-ऑल बता सकती है। दोनों में से कोई भी इनकार 422 capability_unsupported है।
  • बिना कुछ वाला अपडेट कुछ नहीं बदलता और मौजूदा सेटिंग्स लौटाता है। defaultEmailAlias सिर्फ़ वेब ऐप के कंपोज़र में From पता पहले से चुनता है, और API भेजने वाला चुनने के लिए इसका कभी इस्तेमाल नहीं करता।

उदाहरण

फ़ाइल अपलोड करें और लिंक से साझा करें
file_id=$(openemail files upload ./price-list.pdf --json | jq -r .id)openemail files create-link "$file_id" --domain acme.com --json | jq -r .urlopenemail files list-links "$file_id"openemail files download "$file_id" --out copy.pdf

हर create-link नया लिंक बनाती है, इसलिए इसे एक बार चलाएँ और लिंक list-links से वापस पढ़ें। revoke-link बाद में उसे बंद करती है, पहले से गई मेल में भी।

जिस अपलोड का कोई इस्तेमाल नहीं, वह हर अपलोड साफ़ करें
openemail files list --direction uploaded --all | jq -r 'select(.deletable) | .id' > deletable.txtwc -l < deletable.txtxargs -r -n 100 openemail files delete-many --yes --json < deletable.txt | jq -c '.kept[]'

पाइप में --all के साथ files list हर लाइन में एक फ़ाइल प्रिंट करता है। xargs -n 100 delete-many को एक कॉल में ज़्यादा से ज़्यादा 100 ID देता है, और बीच में जो फ़ाइल इस्तेमाल में आ गई वह कॉल को विफल करने के बजाय अपने कारण के साथ kept में लौटती है।

पुराना मेलबॉक्स इंपोर्ट करें और उस पर नज़र रखें
domain_id=$(openemail domains list --all | jq -r 'select(.domain == "acme.com") | .id')address_id=$(openemail domains list-addresses "$domain_id" --all | jq -r 'select(.address == "[email protected]") | .id')openemail imports import-files --address-id "$address_id" --files ~/Downloads/takeout-001.zip --files ~/Downloads/takeout-002.zip --json > import.jsonimport_id=$(jq -r .id import.json)until openemail imports get "$import_id" --json | jq -e '.status != "queued" and .status != "running"' > /dev/null; do  sleep 60doneopenemail imports get "$import_id" --json | jq '{status, counts, lastError}'openemail imports list-failures "$import_id" --json | jq -r '.data[] | [.reason, .subject] | @tsv'

import-files पर --dry-run वह POST /imports प्रिंट करता है जो वह भेजता, हर फ़ाइल के नाम और आकार के साथ, और कुछ अपलोड नहीं करता। list-failures एक बार में 100 पढ़ती है: अगले पेज के लिए उसका प्रिंट किया nextCursor --after के रूप में दें।

Resend से आएँ
openemail provider-imports inspect @resend-key.txtopenemail provider-imports create --resend-key @resend-key.txt --resources suppressions,audiences,contacts,templates,webhooks,domains,api-keys --json > resend.jsonpimp_id=$(jq -r .id resend.json)until openemail provider-imports get "$pimp_id" --json | jq -e '.status != "queued" and .status != "running"' > /dev/null; do  sleep 10doneopenemail provider-imports get "$pimp_id" --json | jq '.report | {contacts, domains: [.domains[] | {name, state}], apiKeys: [.apiKeys[].name]}'
एक महीने की मीटिंग पढ़ें
openemail calendar list-events --from 2026-10-01T00:00:00Z --to 2026-11-01T00:00:00Z --timezone Europe/London --all |  jq -r 'select(.status != "CANCELLED") | [.start, .summary, .myPartstat] | @tsv'openemail calendar get-event cal_8d3f0a2b9c4e41f7a6b5c2d1 --json | jq '.attendees[] | {email, partstat}'openemail calendar get-event-ics cal_8d3f0a2b9c4e41f7a6b5c2d1 --out standup.ics
हस्ताक्षर, ट्रैकिंग और ब्लॉकलिस्ट
openemail settings get --address [email protected] --json | jq '{signature, openEmailSignature, trackOpens, trackClicks}'openemail settings update --address [email protected] --signature "$(cat signature.html)" --no-track-clicks --dry-runopenemail settings update --address [email protected] --signature "$(cat signature.html)" --no-track-clicksopenemail settings update --address '*@acme.com' --no-track-opensopenemail settings update --timezone Europe/London --language enopenemail settings get --json | jq -c '{blockedDomains: ((.blockedDomains + ["spam.example"]) | unique)}' |  openemail settings update --data -

ड्राई रन PATCH /settings?address=sales%40acme.com और उसकी बॉडी को भेजे बिना प्रिंट करता है। कैच-ऑल वाली लाइन acme.com के कैच-ऑल के पकड़े हर पते के लिए ट्रैकिंग सेट करती है, और आख़िरी लाइन बाकी को हटाए बिना एक डोमेन ब्लॉकलिस्ट में जोड़ती है।

स्कोप, पुष्टि और एरर

स्कोपकमांड
files:readfiles list, get, stats, download, list-links
files:writefiles create-link, revoke-link, upload, delete, delete-many
threads:readimports list, get, list-failures
threads:writeimports create, upload-state, upload-chunk, start, cancel, delete-upload, import-files
settings:readprovider-imports list, get, और settings get
settings:writeprovider-imports inspect, create, cancel, और settings update
calendar:readcalendar list-events, get-event, get-event-ics
  • स्कोप के बिना साइन-इन या कुंजी एग्ज़िट कोड 4 के साथ रुकती है, छूटे स्कोप का नाम बताती है और उसे पाने का तरीका भी।
  • files revoke-link, files delete, files delete-many, imports cancel, imports delete-upload और provider-imports cancel पुष्टि माँगती हैं। ना कहने पर वे कोड 10 के साथ बाहर निकलती हैं और कुछ नहीं बदलतीं। बिना निगरानी के और --yes के बिना, वे कुछ भी भेजे जाने से पहले एग्ज़िट कोड 2 के साथ रुकती हैं।
  • यहाँ की कोई भी कमांड सत्यापन कोड नहीं माँगती, न ब्राउज़र साइन-इन के साथ न API कुंजी के साथ, इसलिए स्क्रिप्ट को सिर्फ़ --yes चाहिए।
  • --dry-run वह अनुरोध उसकी बॉडी के साथ प्रिंट करता है जो बदलाव भेजता, और उसे भेजे या पुष्टि माँगे बिना कोड 0 के साथ बाहर निकलता है। फ़ाइल बॉडी उसके आकार और प्रकार के रूप में दिखती है।
  • files list, files list-links, imports list, provider-imports list और calendar list-events एक पेज पढ़ती हैं: --limit 1 से 100 लेता है और इसे छोड़ने पर सर्वर 25 भेजता है, और --cursor पिछले पेज का nextCursor लेता है। --all हर पेज पढ़ता है, --max <n> उतने आइटम के बाद रुकता है, और --ndjson, या पाइप में --all, हर लाइन में एक JSON ऑब्जेक्ट प्रिंट करता है। --json के साथ वे एक { items, hasMore, nextCursor } दस्तावेज़ प्रिंट करती हैं।
  • imports list-failures अपने तरीके से पेज करती है: --after पिछले पेज का nextCursor लेता है, --limit ज़्यादा से ज़्यादा 100 है, जो डिफ़ॉल्ट भी है, और कोई --all नहीं है। --json के साथ यह { object, data, nextCursor } प्रिंट करती है।
  • पढ़ना और वे बदलाव जो दो बार करने पर भी एक जैसे रहते हैं, नेटवर्क विफलता के बाद दोबारा आज़माए जाते हैं: files revoke-link, imports upload-chunk, imports start और settings update। बाकी हर बदलाव एक बार भेजा जाता है। जवाब खो जाने के बाद, फिर कोशिश करने से पहले देख लें: दूसरा upload दूसरी कॉपी सहेजता है और दूसरा create-link दूसरा लिंक बनाता है, आपके दूसरे files delete पर 404 का मतलब है कि पहला काम कर गया, और दूसरा delete-many पहले में हटाई गई चीज़ें missing में दिखाता है।
  • अस्वीकार होने पर कमांड उसकी स्थिति के कोड के साथ बाहर निकलती है: 403 के लिए 4, 404 के लिए 5, 409 के लिए 6, 400 या 422 के लिए 7, और 429 के लिए 8।

आगे कहाँ जाएँ

आपका इनबॉक्स,
आपकी अपनी शर्तों पर।

व्यवसायों, AI, एजेंट और निजी ईमेल के लिए ईमेल इन्फ़्रास्ट्रक्चर। स्केल, निजता और नियंत्रण के लिए बना। वह सब जो ईमेल में पहले दिन से होना चाहिए था।

OpenEmail

व्यवसायों, AI, एजेंट और निजी ईमेल के लिए ईमेल इन्फ़्रास्ट्रक्चर। स्केल, निजता और नियंत्रण के लिए बना। वह सब जो ईमेल में पहले दिन से होना चाहिए था।

© 2026 OpenEmail. सर्वाधिकार सुरक्षित।