پرش به مستندات
CLI

فایل‌ها، درون‌بری‌ها و تنظیمات

همهٔ فرمان‌های فایل‌هایی که صندوق پستی نگه می‌دارد، درون‌بری یک صندوق پستی قدیمی یا یک حساب Resend، تقویمی که در نامه‌ها یافت می‌شود، و تنظیمات فضای کاری و هر نشانی.

نمای کلی

پنج فضای نام آنچه را پیرامون خود نامه است پوشش می‌دهند. openemail files همان صفحهٔ فایل‌هاست: هر پیوست فرستاده‌شده و دریافت‌شده و هر فایل بارگذاری‌شده، با بایت‌هایش و پیوندهای دانلودی که با آن‌ها بیرون رفته است. openemail imports یک صندوق پستی قدیمی را به یک نشانی می‌آورد، و openemail provider-imports یک حساب Resend را منتقل می‌کند. openemail calendar رویدادهای یافت‌شده در نامه‌ها را می‌خواند، و openemail settings ترجیحات صندوق پستی و امضا و ردیابی هر نشانی را می‌خواند و تغییر می‌دهد.

  • هر شناسه می‌گوید به چه چیزی اشاره دارد: file_ برای فایل، imp_ برای درون‌بری صندوق پستی، pimp_ برای درون‌بری Resend و cal_ برای رویداد تقویم، هر کدام با 24 نویسهٔ هگز پس از آن. پیوند دانلود شناسهٔ خودش را دارد، از files list-links یا files create-link.
  • --address-id در یک درون‌بری شناسهٔ یک نشانی است، از openemail domains list-addresses <id>، نه خود نشانی.
  • فضاهای نام به file، import، provider-import یا providerImports، و setting هم پاسخ می‌دهند. فعل‌ها هر جا نام مستعار معمول داشته باشند آن را می‌پذیرند: ls به جای list، show و view به جای get، new و add به جای create، edit به جای settings update، و rm، del و remove به جای files delete.
  • هیچ‌کدام از این فرمان‌ها از ورود با مرورگر کد تأیید هویت نمی‌خواهد. آن‌هایی که چیزی را برای همیشه تغییر می‌دهند از شما تأیید می‌خواهند، و --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 فهرست می‌کند و شناسه‌های ناشناخته را در missing.
  • upload فایل مسیری را که می‌دهید می‌خواند و آن را با نام همان فایل و نوعی که پسوندش نشان می‌دهد ذخیره می‌کند. --filename و --content-type این‌ها را بازنویسی می‌کنند. از stdin، - به --filename نیاز دارد و بدون --content-type نوع application/octet-stream است. بارگذاری تا 10 دقیقه صبر می‌کند که --timeout-ms آن را تغییر می‌دهد.
  • شناسه‌ای که upload برمی‌گرداند فایل را به‌صورت { "fileId": "…" } در openemail emails send --attachments به یک ارسال پیوست می‌کند، و فایلِ بزرگ‌تر از سقف درون‌خطی 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، فایل‌های .mbox از Apple Mail، Thunderbird و بیشتر برنامه‌های رومیزی، فایل‌های .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 مقداری JSON مانند {"keepInbox":false,"includeSpam":true} می‌گیرد. در create همین سه کلید هستند: --options-keep-inbox، --options-include-spam و --options-include-trash، که هر کدام با --no- در جلویش خاموش می‌شود، مانند --no-options-keep-inbox.
  • keepInbox به‌صورت پیش‌فرض روشن است، پس نامه‌های صندوق ورودی قدیمی با وضعیت نخوانده‌شان در صندوق ورودی می‌نشینند. خاموشش همه چیز را زیر بایگانی می‌گذارد. هرزنامه و زباله جا می‌مانند مگر اینکه آن‌ها را هم بگنجانید.
  • create پرچم --files را به‌صورت JSON می‌گیرد، درون‌خطی یا از یک فایل با @path، و هر bytes باید دقیقاً اندازهٔ فایلی باشد که سپس بارگذاری می‌کنید.
  • هر تکه دقیقاً به طول chunkBytes است، به جز آخرین تکهٔ یک فایل، و تکه‌ای با طول نادرست 400 bad_chunk است. start فایلی را که تکه‌هایی کم دارد با 412 missing_chunks رد می‌کند، و فایلی را که نه بایگانی است و نه صندوق پستی با 400 unsupported_file. روی درون‌بری‌ای که از uploading گذشته است، درون‌بری را بدون تغییر برمی‌گرداند.
  • اگر تکه‌ای پس از تلاش‌های دوباره‌اش همچنان شکست بخورد، import-files می‌ایستد و درون‌بری در uploading می‌ماند. بلوک زیر تکه‌های کم‌شدهٔ فایل نخست را می‌فرستد و آن را آغاز می‌کند.
  • یک درون‌بری processedBytes از totalBytes و counts را با seen، imported، duplicate، filtered، failed و threads گزارش می‌دهد. 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 یک فضای کاری را با یک کلید API کامل‌دسترسی Resend از 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 تاریخ و زمان‌هایی به قالب ISO 8601 هستند، مانند 2026-10-01T00:00:00Z. --to باید پس از --from و حداکثر 366 روز بعد از آن باشد، چون یک سری تکرارشونده پایانی ندارد که تا آن فهرست شود. کرانِ ناموجود 422 invalid_parameter است. کرانی که تجزیه نشود، بازهٔ وارونه یا بیش از حد بلند، یا منطقهٔ زمانی ناشناخته 400 invalid_parameter است.
  • --timezone یک منطقهٔ IANA مانند Europe/London است، و وقتی نباشد UTC. رویدادهایی را که بدون منطقهٔ زمانی خودشان ذخیره شده‌اند باز می‌کند، که تعیین می‌کند یک رویداد تمام‌روز در کدام روز می‌افتد.
  • get-event و get-event-ics مقدار eventId یک رخداد را می‌گیرند، نه uid در iCalendar. یک سری تکرارشونده یک رویداد است، پس 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 برای catch-all یک دامنه.

فرمانچه می‌کند
openemail settings getخواندن همهٔ تنظیمات با مقدارهای پیش‌فرضِ پرشده. با --address، چهار تنظیم مخصوص نشانی همان‌طور خوانده می‌شوند که ارسالی از آن نشانی آن‌ها را تعیین می‌کند
openemail settings updateتغییر تنظیماتی که می‌دهید و نگه داشتن بقیه. پاسخ همهٔ تنظیمات است که پس از نوشتن دوباره خوانده شده‌اند
  • بدون --address، get چهار تنظیم مخصوص نشانی را به‌صورت پیش‌فرض‌های داخلی می‌خواند: بدون امضا، پانویس OpenEmail روشن، و ردیابی باز شدن و پیوند روشن. با آن، این‌ها از مقدارهای خود نشانی می‌آیند، سپس از catch-all دامنه‌اش وقتی catch-all آن نشانی را گرفته باشد، سپس از پیش‌فرض‌ها. نشانیِ بعلاوه‌داری که تنظیمات خودش را ندارد تنظیمات نشانی پایه‌اش را می‌خواند.
  • بدون --address، update پرچم‌های --signature، --open-email-signature، --track-opens و --track-clicks را با 422 address_required رد می‌کند و چیزی نمی‌نویسد. با آن، update فقط همین چهار را می‌پذیرد و هر چیز دیگری 422 not_per_address است. نشانی باید در همین فضای کاری باشد، یا *@domain برای یک دامنهٔ تأییدشده در اینجا با catch-all روشن.
  • کلیدها با --no- در جلویشان خاموش می‌شوند: --no-open-email-signature، --no-track-opens و --no-track-clicks.
  • --signature یک HTML حداکثر 150,000 نویسه‌ای است که هنگام نوشتن پاک‌سازی می‌شود، پس آنچه برمی‌گردد همان است که فرستاده خواهد شد. رشتهٔ خالی آن را برمی‌دارد. اینکه یک ارسال آن را اضافه کند یا نه به خود ارسال بستگی دارد: --signature را در openemail emails send --help ببینید.
  • پرچم‌ها فیلدهای رایج را پوشش می‌دهند. --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 فقط می‌تواند نشانی‌ای را نام ببرد که دارد، یا catch-all دامنه‌ای را که کامل دارد. هر دو رد 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 در هر فراخوانی حداکثر 100 شناسه به delete-many می‌دهد، و هر فایلی که در این میان به کار رفته باشد به جای شکست دادن فراخوانی با دلیلش در 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'

--dry-run روی import-files درخواست 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 و بدنه‌اش را بدون فرستادن چاپ می‌کند. سطر catch-all ردیابی را برای هر نشانی‌ای تنظیم می‌کند که catch-all دامنهٔ 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 دوم پیوند دومی می‌سازد، 404 در files delete دوم یعنی اولی کار کرده، و delete-many دوم آنچه اولی حذف کرده را در missing فهرست می‌کند.
  • هر رد با کدِ وضعیتش خارج می‌شود: 4 برای 403، 5 برای 404، 6 برای 409، 7 برای 400 یا 422، و 8 برای 429.

بعد کجا بروید

صندوق ورودی شما،
با شرایط خودتان.

زیرساخت ایمیل برای کسب‌وکارها، هوش مصنوعی، عامل‌ها و ایمیل شخصی. ساخته‌شده برای مقیاس، حریم خصوصی و کنترل. هر چه ایمیل باید از روز نخست می‌داشت.

OpenEmail

زیرساخت ایمیل برای کسب‌وکارها، هوش مصنوعی، عامل‌ها و ایمیل شخصی. ساخته‌شده برای مقیاس، حریم خصوصی و کنترل. هر چه ایمیل باید از روز نخست می‌داشت.

© 2026 OpenEmail. همه حقوق محفوظ است.