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

کلیدها، اعضا و نقش‌ها

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

نمای کلی

این فرمان‌ها تعیین می‌کنند چه کسی و چه چیزی به فضای کاری دسترسی دارد. openemail keys کلیدهای API را مدیریت می‌کند و می‌خواند هر کدام چه کرده است، openemail members افراد فضای کاری و دعوت‌نامه‌هایشان را مدیریت می‌کند، و openemail roles تعیین می‌کند یک عضو یا کلید چه کاری می‌تواند بکند. openemail me کلید یا ورودی را که با آن فراخوانی می‌کنید شرح می‌دهد، و openemail languages زبان‌هایی را که یک ارسال ترجمه‌شده می‌پذیرد فهرست می‌کند. صندوق‌های یک‌بارمصرف اصلاً به ورود نیاز ندارند: openemail temp راه روزمرهٔ استفاده از آن‌هاست، و openemail temp-mail همهٔ فراخوانی‌های API پشت آن است. openemail api به هر نقطهٔ پایانی‌ای می‌رسد که فرمان‌های دیگر نمی‌رسند.

  • فرمان کلید شناسهٔ کلید را می‌گیرد، یعنی 24 نویسهٔ هگز پس از oe_live_، همان‌طور که keys list نشان می‌دهد. فرمان عضو شناسهٔ حساب را می‌گیرد، userId در members list، هرگز نشانی ایمیل را. فرمان نقش یک شناسهٔ role_ از roles list می‌گیرد، چون نقش‌ها با نام جست‌وجو نمی‌شوند.
  • فضاهای نام به key، member، role، language و tempMail هم پاسخ می‌دهند. نام‌های مستعار معمول فعل‌ها کار می‌کنند، مانند ls، show، new، edit و rm. در members که فعل‌هایش add و remove است، new و create به add می‌رسند، و rm، del و delete به remove.
  • openemail <command> --help هر آرگومان و پرچم را با نوعش، دامنهٔ مجوزی که فراخوانی لازم دارد، متد و مسیرش و آنچه برمی‌گردد فهرست می‌کند. برای همان صفحه به‌صورت داده، --json را اضافه کنید.

همهٔ فرمان‌ها

فرمانچه می‌کند
openemail me getشرح کلید API یا ورود با مرورگری که با آن فراخوانی می‌کنید: دامنه‌های مجوزش، نقشی که سقف آن است، فضای کاری‌اش و اینکه با چه نشانی‌هایی می‌تواند بفرستد. به دامنهٔ مجوز نیاز ندارد
openemail me pingبررسی اینکه اعتبارنامه احراز هویت می‌شود، برای بررسی سلامت. به دامنهٔ مجوز نیاز ندارد
openemail me rotateدادن یک راز تازه به کلید API که با آن فراخوانی می‌کنید، که یک بار نشان داده می‌شود. از شما تأیید می‌خواهد
openemail keys listفهرست کلیدهای API فضای کاری، تازه‌ترین در ابتدا، با وضعیت، دامنه‌های مجوز، نقش، محدودهٔ ارسال و آخرین استفاده. هرگز رازی نمی‌آید
openemail keys get <id>خواندن یک کلید، بدون رازش
openemail keys create --name <value>ساختن یک کلید و گرفتن رازش یک بار، در token
openemail keys update <id>تغییر نام یک کلید، جایگزین کردن دامنه‌های مجوز یا محدودهٔ ارسالش، یا خاموش و روشن کردنش با --no-enabled و --enabled
openemail keys delete <id>برداشتن یک کلید ابطال‌شده از فهرست، با نگه داشتن تاریخچه‌اش. از شما تأیید می‌خواهد
openemail keys rotate <id>دادن یک راز تازه به یک کلید، که یک بار نشان داده می‌شود، و متوقف کردن راز قدیمی بی‌درنگ. از شما تأیید می‌خواهد
openemail keys revoke <id>ابطال همیشگی یک کلید، با --reason اختیاری. از شما تأیید می‌خواهد
openemail keys list-requests <id>خواندن گزارش درخواست‌های یک کلید: متد، مسیر، وضعیت، کد خطا، مدت، IP و عامل کاربر
openemail keys list-activity <id>خواندن آنچه برای یک کلید رخ داده: ساخته شد، تغییر کرد، چرخانده شد، خاموش و روشن شد، ابطال شد، حذف شد، و هر فراخوانی ردشده
openemail keys list-workspace-requestsخواندن گزارش درخواست‌های همهٔ کلیدهایی که می‌توانید ببینید، یا آن‌هایی که --key-ids نام می‌برد
openemail keys list-workspace-activityخواندن آنچه برای همهٔ کلیدهایی که می‌توانید ببینید رخ داده، یا برای آن‌هایی که --key-ids نام می‌برد
openemail roles listفهرست نقش‌های فضای کاری، نقش‌های پیش‌ساخته در ابتدا، با شمار اعضا و کلیدهایی که هر کدام را دارند
openemail roles get <id>خواندن یک نقش با مجوزهایش و شمارش‌های زندهٔ استفاده‌اش
openemail roles create --name <value> --permissions <a,b>ساختن یک نقش سفارشی، با --description اختیاری
openemail roles update <id>تغییر نام یک نقش، تغییر توضیحش، یا جایگزین کردن کل فهرست مجوزهایش
openemail roles delete <id>حذف یک نقش و بردن دارندگانش به نقشی که در --reassign-to آمده. از شما تأیید می‌خواهد
openemail roles list-permissionsفهرست واژگان مجوزها، با یک برچسب، یک گروه و اینکه یک کلید می‌تواند هر کدام را داشته باشد یا نه
openemail members listفهرست همهٔ کسانی که دسترسی دارند، مالک در ابتدا، با نقش، مجوزها و نشانی‌ها و دامنه‌هایی که هر کدام می‌تواند به کار ببرد
openemail members get <user-id>خواندن یک عضو با شناسهٔ حساب
openemail members add --email <value> --role-id <value>دعوت از کسی با یک نقش، و با نشانی‌ها یا دامنه‌های کامل از طریق --address-ids، --domain-ids و --access
openemail members update <user-id> --role-id <value>بردن یک عضو به نقشی دیگر. اعطاهای نشانی و دامنه‌اش همان‌طور که هستند می‌مانند
openemail members remove <user-id>بیرون بردن کسی از فضای کاری با همهٔ اعطاهای نشانی‌اش. از شما تأیید می‌خواهد
openemail members grant-address <user-id> --address-id <value>دادن یک نشانی به یک عضو، یا تغییر --access او به آن
openemail members revoke-address <user-id> <address-id>پس گرفتن یک نشانی از یک عضو. از شما تأیید می‌خواهد
openemail members list-invitationsفهرست دعوت‌نامه‌هایی که هنوز کسی نپذیرفته، از جمله منقضی‌شده‌ها
openemail members revoke-invitation <invitation-id>پس گرفتن یک دعوت‌نامه تا پیوندش از کار بیفتد. از شما تأیید می‌خواهد
openemail members resend-invitation <invitation-id>فرستادن دوبارهٔ یک دعوت‌نامه، با پیوندی تازه و 14 روز بیشتر
openemail languages listفهرست همهٔ زبان‌هایی که یک ارسال ترجمه‌شده می‌پذیرد، به ترتیبی که یک انتخابگر باید نشان دهد. به دامنهٔ مجوز نیاز ندارد
openemail temp new [--name <local-part>] [--domain <domain>] [--ttl <minutes>]ساختن یک صندوق یک‌بارمصرف و چاپ فقط نشانی‌اش. به ورود نیاز ندارد
openemail temp listفهرست صندوق‌های یک‌بارمصرفی که این CLI ساخته، بدون خواندن از شبکه
openemail temp read [inbox] [message-id]فهرست نامه‌های یک صندوق، یا چاپ یک پیام به‌صورت متن خواندنی
openemail temp watch [inbox] [--first]چاپ هر پیام تازه همان لحظه که می‌رسد، با بررسی هر 3 ثانیه
openemail temp delete [inbox] [--yes]حذف یک صندوق و نامه‌هایش همین حالا، و فراموش کردن توکنش. از شما تأیید می‌خواهد
openemail temp-mail list-domainsفهرست دامنه‌هایی که می‌توان صندوق یک‌بارمصرف را روی آن‌ها ساخت. به اعتبارنامه نیاز ندارد
openemail temp-mail createساختن یک صندوق یک‌بارمصرف و توکن صندوقش، که CLI ذخیره‌اش می‌کند. به اعتبارنامه نیاز ندارد
openemail temp-mail get <inbox-id>خواندن زمان انقضای یک صندوق، تمدیدهای باقی‌مانده و شمار پیام‌ها
openemail temp-mail extend <inbox-id>جلو بردن زمان انقضا تا یک ساعت دورتر، تا 24 ساعت پس از ساخته شدن صندوق
openemail temp-mail delete <inbox-id>نابود کردن یک صندوق و نامه‌هایش همین حالا. از شما تأیید می‌خواهد
openemail temp-mail list-messages <inbox-id>فهرست یک صفحه از پیام‌ها، تازه‌ترین در ابتدا، هر کدام با تکه‌متنی ساده و کوتاه
openemail temp-mail get-message <inbox-id> <message-id>خواندن یک پیام با متن ذخیره‌شده‌اش، و علامت زدن آن به‌عنوان دیده‌شده
openemail temp-mail delete-message <inbox-id> <message-id>حذف یک پیام با متن و پیوست‌هایش. از شما تأیید می‌خواهد
openemail temp-mail list-attachments <inbox-id> <message-id>خواندن پیوست‌های یک پیام، با بایت‌هایشان به base64
openemail api <method> <path>فراخوانی هر نقطهٔ پایانی REST با ورود شما، کدهای تأیید هویت و تأییدهایش

همهٔ پرچم‌ها در راهنمای فرمانشان هستند، مثلاً openemail keys create --help، openemail members add --help یا openemail temp new --help.

کلیدهای API

خواندن کلیدها به keys:read نیاز دارد و هر تغییری به keys:manage. به ورود با مرورگر هرگز keys:write یا keys:manage داده نمی‌شود، پس ساختن، تغییر، چرخاندن، ابطال و حذف کلیدها به کلید API‌ای با keys:manage یا به برنامهٔ وب (openemail open api-keys) نیاز دارد. ورود با مرورگر با keys:read فقط برای مالک فضای کاری کلیدها را می‌خواند، و ورود یک عضو با 403 owner_only رد می‌شود.

  • keys create، keys rotate و me rotate راز کلید را یک بار در token چاپ می‌کنند، و سپس CLI هشدار می‌دهد که دیگر هرگز نشان داده نمی‌شود. هر خواندنی به جای آن maskedKey را نشان می‌دهد.
  • اگر چیزی ندهید، کلید تازه فقط emails:send دارد و نقش، محدودهٔ ارسال و انقضای کلیدی را که آن را می‌سازد می‌گیرد. --domain-allowlist و --address-allowlist تعیین می‌کنند با چه نشانی‌هایی می‌تواند بفرستد، و --expires-in-minutes از 5 تا 5,256,000 می‌گیرد، یعنی ده سال.
  • یک کلید هرگز کلیدی گسترده‌تر از خودش نمی‌سازد و به آن نمی‌رسد. دامنه‌های مجوز، نقش، انقضا، حالت و محدودهٔ ارسال همه باید درون کلید فراخواننده بگنجند، وگرنه فراخوانی با 403 beyond_caller_authority رد می‌شود و param آنچه را بیش از حد گسترده بود نام می‌برد. کلیدی که به برخی دامنه‌ها یا نشانی‌ها محدود است فقط کلیدهای درون محدودهٔ ارسال خودش را می‌بیند، و هر کلید دیگری 404 است.
  • keys update آنچه را می‌فرستید جایگزین می‌کند: --scopes، --address-allowlist و --domain-allowlist هر کدام کل فهرست تازه را می‌گیرند، و پرچمی که نگذارید همان‌طور که بود می‌ماند. --no-enabled کلید را خاموش می‌کند، تا هر فراخوانی با آن با inactive_api_key رد شود، و --enabled آن را دقیقاً برمی‌گرداند. این کلید را به شکلی برگشت‌پذیر متوقف می‌کند.
  • keys revoke همیشگی است: کلید دیگر هرگز روشن، چرخانده یا تغییر داده نمی‌شود. keys delete فقط کلید ابطال‌شده را برمی‌دارد و هر کلید دیگری با 409 not_revoked رد می‌شود. گزارش درخواست‌ها و فعالیت کلید حذف‌شده زیر «کلید حذف‌شده» می‌مانند.
  • keys rotate پنجرهٔ هم‌پوشانی ندارد، پس راز قدیمی همان لحظه که راز تازه برمی‌گردد از کار می‌افتد. وقتی کلید همان است که نمایهٔ ذخیره‌شدهٔ شما به کار می‌برد، CLI راز تازه را در آن نمایه ذخیره می‌کند تا همچنان کار کند. کلیدی که از OPENEMAIL_API_KEY یا --api-key بیاید ذخیره‌شدنی نیست، پس CLI می‌گوید توکن تازه را هر جا که کلید قدیمی نگه داشته می‌شد ذخیره کنید.

گزارش درخواست‌ها هر فراخوانی یک کلید را ثبت می‌کند: متد، مسیر، وضعیت، کد خطا، مدت، IP و عامل کاربر، هرگز بدنه یا رشتهٔ پرس‌وجو. چیزی از آن زدوده نمی‌شود، پس تا نخستین فراخوانی کلید می‌رسد، و فراخوانی‌هایی که با ورود از طریق مرورگر انجام شده‌اند در آن نیستند. گزارش فعالیت هر تغییر کلید و هر فراخوانی‌ای را که کلید را ارائه کرد و رد شد، به‌صورت auth_failed، با انجام‌دهندهٔ هر تغییر در actor ثبت می‌کند.

  • list-requests و list-activity یک کلید را می‌خوانند. list-workspace-requests و list-workspace-activity همهٔ کلیدهایی را که می‌توانید ببینید می‌خوانند، یا تا 50 کلیدی که --key-ids نام می‌برد، از جمله کلیدهای حذف‌شده.
  • --since و --until یک بازه را نگه می‌دارند و زمانی به قالب ISO 8601 مانند 2026-09-01T00:00:00Z می‌گیرند. --failed-only فراخوانی‌هایی را نگه می‌دارد که با وضعیت 400 یا بالاتر پاسخ گرفته‌اند.

اعتبارنامهٔ شما، و زبان‌ها

openemail me get نخستین فرمانی است که وقتی یک فراخوانی رد می‌شود باید اجرا کرد. به دامنهٔ مجوز نیاز ندارد، پس هر کلید یا ورود معتبری می‌تواند خودش را شرح دهد.

  • scopes همان کاری است که اعتبارنامه همین حالا می‌تواند بکند: دامنه‌های مجوزی که با آن ساخته شده، کوتاه‌شده با نقشی که زیر آن صادر شده، که در هر درخواست محاسبه می‌شود. grantedScopes همان است که با آن ساخته شده و roleId نقش را نام می‌برد. دامنهٔ مجوزی که در grantedScopes هست و در scopes نیست را نقش برداشته است. این دلیل معمول یک 403 insufficient_scope روی کلیدی است که به نظر می‌رسد آن دامنه را دارد، و راه‌حل تغییر نقش است نه ساختن کلیدی دیگر.
  • domainAllowlist و addressAllowlist می‌گویند با چه نشانی‌هایی می‌تواند بفرستد. null بودن هر دو یعنی هر نشانی‌ای که فضای کاری دارد.
  • با ورود از طریق مرورگر، خود ورود را شرح می‌دهد: object برابر oauth_token است، clientId برنامهٔ متصلِ همین CLI را نام می‌برد، و expiresAt زمان پایان تأیید شماست، یا وقتی هرگز پایان نمی‌یابد null.
  • me ping با ok: true و همان جزئیات دامنهٔ مجوز اما بدون فهرست‌های مجاز پاسخ می‌دهد، که برای بررسی سلامت مناسب است. کلید ابطال‌شده، منقضی، خاموش یا اشتباه‌تایپ‌شده با 401 و کد خروج 3 شکست می‌خورد.
  • me rotate به کلیدی که با آن فراخوانی می‌کنید راز تازه‌ای می‌دهد. به keys:write نیاز دارد که ورود با مرورگر هرگز ندارد، پس کلید API لازم دارد. همه چیز دیگر کلید می‌ماند، راز قدیمی بی‌درنگ از کار می‌افتد و نمایهٔ ذخیره‌شده راز تازه را می‌گیرد، مانند keys rotate. گم شدن پاسخ ممکن است کلید را با رازی که کسی ندیده رها کند، و آنگاه باید از برنامهٔ وب راز تازه‌ای بگیرد.
  • openemail whoami همان پاسخ را با قالبی برای آدم‌ها نشان می‌دهد.

openemail languages list کل جدول زبان‌ها را در یک پاسخ چاپ می‌کند، حدود دویست ردیف، با کد، نام انگلیسی، نام بومی، پرچم هر زبان و اینکه از راست به چپ نوشته می‌شود یا نه. کد، نام انگلیسی یا نام بومی همه به‌عنوان مقصد یک ارسال ترجمه‌شده کار می‌کنند. به ورود نیاز دارد اما به دامنهٔ مجوز نه. openemail ai languages همان جدول را با پرچم --search چاپ می‌کند، و بدون ورود جدولی را که همراه CLI بسته‌بندی شده چاپ می‌کند.

اعضا و نقش‌ها

یک عضو دو چیز دارد که هرگز با هم ادغام نمی‌شوند. نقشش می‌گوید چه کاری می‌تواند بکند، و اعطاهای نشانی و دامنه‌اش می‌گویند آن کار را روی کدام نامه‌ها می‌تواند بکند، و هر اعطا دسترسی خودش را دارد: member می‌خواند و می‌فرستد، و viewer فقط می‌خواند. ارسال به هر دو نیاز دارد، پس نقشی با emails:send و اعطای viewer روی یک نشانی همچنان نمی‌تواند از آن بفرستد. یک دامنهٔ کامل همهٔ نشانی‌های روی آن را پوشش می‌دهد، از جمله آن‌هایی که بعداً ساخته می‌شوند.

  • members list مالک فضای کاری را با علامت isOwner در ابتدا می‌گذارد، پس هنگام شمردن صندلی‌ها آن ردیف را کنار بگذارید. مالک همهٔ مجوزها را دارد و نمی‌توان او را دعوت، تغییر یا حذف کرد، و کسی را هم که از پیش در فضای کاری است نمی‌توان دوباره دعوت کرد: هر دو 422 member_is_owner است.
  • کسانی که اعطای نشانی دارند اما هرگز نقشی به آن‌ها داده نشده با implied: true برمی‌گردند و نقششان از اعطاهایشان استنباط می‌شود. members update به آن‌ها نقشی واقعی می‌دهد.
  • members add یک دعوت‌نامه می‌فرستد، حتی برای کسی که از پیش حساب دارد. تا وقتی نپذیرد چیزی داده نمی‌شود، و آنگاه دقیقاً همان نقش، نشانی‌ها و دامنه‌هایی که دعوت‌نامه دارد. دعوت دوباره از همان نشانی تا ده دقیقه 409 invitation_too_soon است، و پس از آن به جای فرستادن دعوت‌نامهٔ دوم، دعوت‌نامهٔ در انتظار را تازه می‌کند.
  • resend-invitation پیوند تازه‌ای با 14 روز اعتبار بیشتر می‌فرستد و پیوند قدیمی را بازنشسته می‌کند، که دعوت‌نامهٔ منقضی را هم تمدید می‌کند. revoke-invitation یک دعوت‌نامه را پس می‌گیرد، و دعوت‌نامه‌ای که از پیش پذیرفته شده 409 invitation_accepted است، پس به جای آن عضو را بردارید.
  • members update نقش را تغییر می‌دهد و هیچ چیز دیگر را. grant-address یک نشانی می‌دهد یا دسترسی به آن را تغییر می‌دهد، پس اجرای دوباره‌اش با --access دیگری اعطا را تغییر می‌دهد نه اینکه اعطای دومی اضافه کند. revoke-address یک نشانی را پس می‌گیرد و بقیه را می‌گذارد. ابطال آخرین اعطای یک عضو استنباطی او را از فضای کاری برمی‌دارد.
  • members remove دسترسی کسی به فضای کاری، عضویتش و همهٔ اعطاهایش را پایان می‌دهد، و در addressesRevoked گزارش می‌دهد چند اعطای نشانی رفت. حسابش و نامه‌هایی که فرستاده دست‌نخورده می‌مانند.

یک نقش سقفی هم برای کلیدهای API است که زیر آن صادر می‌شوند. کاری که یک کلید می‌تواند بکند دامنه‌های مجوز خودش است که با مجوزهای نقشش کوتاه شده، و در هر درخواست محاسبه می‌شود.

  • roles list نقش‌های پیش‌ساخته را اول نشان می‌دهد، به ترتیب Owner، Admin، Member، Viewer، Developer و Billing، سپس نقش‌های سفارشی بر اساس نام. هر فضای کاری تا 24 نقش سفارشی دارد، و پس از آن roles create یک 422 role_limit_reached است.
  • یک نقش مجوزهایی را که مجوزهایش لازم می‌دانند هم ذخیره می‌کند، پس templates:write مقدار templates:read را هم ذخیره می‌کند، و roles:write مقدارهای roles:read و members:read را می‌آورد. فهرست را از پاسخ بخوانید به جای اینکه فرضش کنید.
  • roles update --permissions کل فهرست را جایگزین می‌کند، پس نقش را بخوانید، فهرست را تغییر دهید و همه‌اش را بفرستید. --description null یادداشت را پاک می‌کند. تغییر از فراخوانی بعدیِ هر عضو و کلیدی که آن نقش را دارد اعمال می‌شود.
  • هر نقشی جز Owner را می‌توان تغییر نام داد، بازنویسی و حذف کرد، از جمله نقش‌های پیش‌ساخته، و نقش پیش‌ساختهٔ حذف‌شده برنمی‌گردد. نقش مالک به ویرایش با 409 role_immutable و به حذف با 409 role_undeletable پاسخ می‌دهد.
  • تا وقتی عضو، کلید API یا دعوت‌نامهٔ در انتظاری نقشی را دارد، roles delete به --reassign-to با نقشی که آن‌ها را تحویل می‌گیرد نیاز دارد، وگرنه با 409 role_in_use رد می‌شود. کلیدهای ابطال‌شده هنوز به نقششان اشاره می‌کنند، پس نقشی که شمار apiKeys آن 0 است هم ممکن است به آن نیاز داشته باشد. پاسخ افراد را در reassigned و کلیدها را در keysReassigned گزارش می‌دهد.
  • roles list-permissions کل واژگان را با یک برچسب و یک گروه برای هر کدام فهرست می‌کند. چندتایی، مانند billing:write و workspace:manage، با scope: false برمی‌گردند: یک نقش می‌تواند آن‌ها را داشته باشد، اما هیچ کلیدی نمی‌تواند.

کلیدی که roles:write دارد می‌تواند نقشی را که سقف آن است ویرایش کند و در فراخوانی بعدی خودش را گسترده‌تر کند، پس این دامنهٔ مجوز را از کلیدهایی که فقط باید بخوانند دور نگه دارید. با ورود از طریق مرورگر، members:write و roles:write فقط وقتی داده می‌شوند که تأیید کل فضای کاری را پوشش دهد، نه برخی دامنه‌ها یا نشانی‌ها را.

صندوق‌های یک‌بارمصرف

صندوق یک‌بارمصرف به حساب یا ورود نیاز ندارد. با توکن صندوق خودش به آن دسترسی پیدا می‌شود، که با oe_inbox_ آغاز می‌شود و فقط یک بار، هنگام ساخته شدن صندوق، برمی‌گردد. در کارهای روزمره از openemail temp استفاده کنید، و وقتی به فیلد یا گامی نیاز دارید که temp نشان نمی‌دهد، مانند تمدیدهای باقی‌مانده، یک تمدید یا بایت‌های یک پیوست، از openemail temp-mail.

  • هر دو توکن را در ~/.openemail/temp-mail.json نگه می‌دارند که فقط خودتان می‌توانید بخوانید. temp new و temp-mail create آن را ذخیره می‌کنند، temp list صندوق‌هایی را که به هر دو راه ساخته شده‌اند نشان می‌دهد، و هر دو حذف آن را فراموش می‌کنند. صندوق ذخیره‌شده را می‌توان هر جا که فرمانی شناسه‌اش را بخواهد با نشانی‌اش نام برد.
  • برای صندوقی که این CLI نساخته، توکن را با --inbox-token بدهید. بدون توکن ذخیره‌شده یا داده‌شده، فرمان پیش از فرستادن هر چیزی با کد خروج 3 متوقف می‌شود.
  • دو فرمان ساختن پرچم‌هایشان را متفاوت نام‌گذاری می‌کنند: temp new پرچم‌های --name، --domain و --ttl را می‌گیرد، و temp-mail create پرچم‌های --local-part، --domain و --ttl-minutes. بخش محلی 3 تا 32 نویسه از حروف، ارقام، نقطه، خط تیره یا زیرخط است که با حرف یا رقم آغاز و پایان می‌یابد، و نام‌هایی مانند postmaster رد می‌شوند. مدت اجاره 1 تا 1440 دقیقه است، و به‌صورت پیش‌فرض 60.
  • هر نشانی IP می‌تواند در ساعت 6 و در روز 30 صندوق بسازد، و بعدی 429 too_many_inboxes با کد خروج 8 است. تمدید صندوقی که از پیش دارید شمرده نمی‌شود، پس temp-mail extend پاسخ این سقف است.
  • temp-mail extend تا یک ساعت اضافه می‌کند، هرگز فراتر از 24 ساعت پس از ساخته شدن صندوق، و حداکثر 23 بار. extensionsLeft را از پاسخ بخوانید. در 0، برای همیشه 409 extension_limit است.
  • temp-mail list-messages در هر صفحه 1 تا 50 پیام می‌خواند، به‌صورت پیش‌فرض 50، هر کدام با یک snippet متنی ساده تا 400 نویسه که اغلب یک کد یک‌بارمصرف دارد. چیزی فراتر از یک صفحه کنار گذاشته نمی‌شود و --all همهٔ صفحه‌ها را می‌پیماید.
  • خواندن پیام با temp read، temp-mail get-message یا temp-mail list-attachments آن را دیده‌شده علامت می‌زند. متن بزرگ‌تر از 2 MB بریده می‌شود که truncated این را می‌گوید، و پیوست بزرگ‌تر از 8 MB هرگز نگه داشته نشده، پس content آن null است.
  • حذف یک صندوق نامه‌هایش را بی‌درنگ حذف می‌کند، اما نشانی تا 7 روز پس از زمانی که اجاره‌اش پایان می‌یافت رزرو می‌ماند، و درخواست دوباره‌اش پیش از آن 409 address_taken است.

نامه در صندوق یک‌بارمصرف از غریبه‌ها می‌آید، به نشانی‌ای که هر کسی می‌تواند نامش را ببرد. فرستنده‌اش هرگز تأیید نمی‌شود و هیچ چیز آن پویش نمی‌شود، پس با پیوندها، HTML و پیوست‌هایش با احتیاط رفتار کنید.

هر نقطهٔ پایانی، و فضای نام security

openemail api <method> <path> یک درخواست را از همان مسیر انتقالی می‌فرستد که هر فرمان دیگری، پس نمایه یا کلید شما، تمدید توکن، کدهای تأیید هویت و تأییدها همه اعمال می‌شوند. یک مسیر به‌تنهایی یک GET است و پاسخ JSON قالب‌بندی‌شده چاپ می‌شود. openemail api /keys/self فراخوانی پشت me get است.

  • -d، --data بدنه را به‌صورت JSON درون‌خطی، از یک فایل با @path یا از stdin با - می‌گیرد. -q، --query و -H، --header مقدار key=value می‌گیرند و می‌توانند تکرار شوند، و -o، --out پاسخ را همان‌طور که رسیده در یک فایل ذخیره می‌کند.
  • یک DELETE، و هر فراخوانی‌ای که یک فرمان منبع برایش تأیید می‌گرفت، مانند ابطال یا چرخاندن یک کلید، نخست از شما تأیید می‌خواهد، و بدون نظارت به --yes نیاز دارد.
  • درخواست ناموفق خطای API را چاپ می‌کند و با کد متناظر خارج می‌شود.

فضای نام security در openemail --help فهرست نمی‌شود، چون openemail verify آن را به کار می‌گیرد. فعل‌هایش step-up-status، begin-step-up و verify-step-up همان فراخوانی‌هایی‌اند که verify انجام می‌دهد: verify --status وضعیت را می‌خواند، و verify کدی می‌خواهد، آن را از شما می‌پرسد و بررسی‌اش می‌کند. این‌ها برای ورود با مرورگر وجود دارند. با کلید API هر کدام با 400 step_up_not_applicable رد می‌شود، و openemail verify می‌گوید کلید هرگز به کد نیاز ندارد.

نمونه‌ها

ساختن یک کلید برای یک اسکریپت و ورود با آن
openemail keys create --name 'Billing sender' --scopes emails:send \  --domain-allowlist billing.acme.com --expires-in-minutes 129600 --json \  | jq -r .token | openemail login --with-token --profile billingopenemail whoami --profile billing

آن را با کلید API‌ای اجرا کنید که keys:manage دارد، مثلاً از طریق OPENEMAIL_API_KEY. راز از پاسخ یکراست به یک نمایهٔ تازه می‌رود، پس هرگز روی صفحه یا در فایلی نمی‌نشیند. کلید فقط از billing.acme.com می‌تواند بفرستد و 90 روز دیگر منقضی می‌شود.

بازبینی کلیدها و فراخوانی‌های ناموفقشان
openemail keys list --all | jq -r 'select(.status != "active") | [.name, .status, .lastUsedAt] | @tsv'openemail keys list-workspace-requests --failed-only --since 2026-09-26T00:00:00Z --all \  | jq -r '[.createdAt, .keyName, .status, .errorCode, .method, .path] | @tsv'
بازنشسته کردن یک کلید
id=4c1b257a66287fd113bd89d0openemail keys update "$id" --no-enabledopenemail keys list-activity "$id" --since 2026-09-27T00:00:00Z --all | jq -r 'select(.type == "auth_failed") | .createdAt'openemail keys revoke "$id" --reason 'Contractor offboarded' --yesopenemail keys delete "$id" --yes

خاموش کردن کلید در گام نخست با --enabled برگشت‌پذیر است. هر فراخوانی که هنوز آن را ارائه کند رد می‌شود و در فعالیتش به‌صورت auth_failed دیده می‌شود، که به شما می‌گوید چه چیزی هنوز به آن وابسته است. ابطال برگشت‌پذیر نیست، و فقط کلید ابطال‌شده را می‌توان حذف کرد.

ساختن یک نقش و دعوت از کسی با آن
openemail roles list-permissions --json | jq -r '.[] | [.group, .id, .label] | @tsv'role=$(openemail roles create --name Support --permissions threads:write,emails:send,templates:read \  --description 'Answers help@ and nothing else.' --json | jq -r .id)openemail members add --email [email protected] --role-id "$role" \  --domain-ids 93542ff8-2baa-4f2f-841d-5ceaa074ab0d --access memberopenemail members list-invitations

نقش با threads:read و emails:read هم برمی‌گردد، چون مجوزهایی که نام می‌برد آن‌ها را لازم می‌دانند. Sam فقط پس از پذیرفتن، نقش و کل دامنه را می‌گیرد. با ورود از طریق مرورگر، members add نخست کد تأیید هویت می‌خواهد.

بردن یک هم‌تیمی، سپس حذف نقش قدیمی‌اش
old=role_8b1f4c2e9a7d3b60e5f1a2c4new=role_2c7e9a1f4b8d3e60c5a7f1b9user=$(openemail members list --all | jq -r 'select(.email == "[email protected]") | .userId')openemail members update "$user" --role-id "$new"openemail roles get "$old" --json | jq '{name, members, apiKeys}'openemail roles delete "$old" --reassign-to "$new" --dry-runopenemail roles delete "$old" --reassign-to "$new" --yes

members و apiKeys هنگام پرسش شمرده می‌شوند، پس نشان می‌دهند حذف چه چیزهایی را جابه‌جا خواهد کرد. اجرای آزمایشی DELETE را با reassignTo در پرس‌وجویش بدون فرستادن چاپ می‌کند. با ورود از طریق مرورگر، به‌روزرسانی و حذف هر کدام کد تأیید هویت می‌خواهند، پس وقتی اسکریپتی این کار را می‌کند نخست openemail verify را اجرا کنید.

بررسی تحویل با یک صندوق یک‌بارمصرف
address=$(openemail temp new --ttl 15)openemail send --from [email protected] --to "$address" --subject 'Delivery check' --text 'Your code is 482913' --yesopenemail temp watch "$address" --first --json | jq -r .snippet | grep -oE '[0-9]{6}'openemail temp delete "$address" --yes

temp new فقط نشانی را چاپ می‌کند، پس در یک متغیر پوسته جا می‌شود، و temp watch --first با نخستین پیام می‌ایستد. به جای openemail send یک فرم ثبت‌نام را به آن نشانی بفرستید تا کد تأییدش را به همین شکل بگیرید.

دامنه‌های مجوز، تأییدها و خطاها

دامنهٔ مجوزفرمان‌ها
keys:readkeys list, get, list-requests, list-activity, list-workspace-requests, list-workspace-activity
keys:managekeys create, update, delete, rotate, revoke
keys:writeme rotate
roles:readroles list, get, list-permissions
roles:writeroles create, update, delete
members:readmembers list, get, list-invitations
members:writemembers add, update, remove, grant-address, revoke-address, revoke-invitation, resend-invitation
هیچ، با هر کلید یا ورودیme get, me ping, languages list
هیچ، و بدون ورودtemp، temp-mail list-domains و create. دیگر فرمان‌های temp-mail توکن صندوق را می‌گیرند
  • ورود یا کلیدی که آن دامنهٔ مجوز را ندارد با کد خروج 4 متوقف می‌شود، دامنهٔ مجوزِ ناموجود را نام می‌برد و می‌گوید چطور آن را به دست آورید.
  • این‌ها از شما تأیید می‌خواهند: keys delete، rotate و revoke، me rotate، roles delete، members remove، revoke-address و revoke-invitation، temp delete، و temp-mail delete و delete-message. پاسخ منفی با کد 10 خارج می‌شود و چیزی را تغییر نمی‌دهد. بدون نظارت و بدون --yes، پیش از فرستادن هر چیزی با کد خروج 2 متوقف می‌شوند.
  • با ورود از طریق مرورگر، roles update و roles delete، و members add، update، remove، grant-address و revoke-address کد تأیید هویت هم می‌خواهند، مگر اینکه این ورود در 60 دقیقهٔ گذشته کدی را تأیید کرده باشد. --yes هرگز از آن نمی‌گذرد و بدون نظارت کسی نمی‌تواند تایپش کند، پس فرمان با کد خروج 4 متوقف می‌شود. نخست openemail verify را اجرا کنید. از کلید API هرگز پرسیده نمی‌شود.
  • --dry-run درخواستی را که یک تغییر می‌فرستاد، با بدنه‌اش، چاپ می‌کند و بدون فرستادن یا خواستن تأیید با کد 0 خارج می‌شود.
  • یک فهرست یک صفحه می‌خواند. --limit از 1 تا 100 می‌گیرد و وقتی نباشد سرور 25 می‌فرستد، به جز در temp-mail list-messages که 1 تا 50 می‌گیرد و 50 می‌فرستد. --cursor مقدار nextCursor صفحهٔ پیشین را می‌گیرد. --all همهٔ صفحه‌ها را می‌خواند، --max <n> پس از همان تعداد مورد می‌ایستد، و --ndjson، یا --all در یک لوله، در هر سطر یک شیء JSON چاپ می‌کند. با --json یک فهرست یک سند { items, hasMore, nextCursor } چاپ می‌کند.
  • roles list-permissions، languages list، temp-mail list-domains و temp-mail list-attachments همه چیز را یک‌جا، به‌صورت آرایه‌ای ساده و بدون صفحه، برمی‌گردانند.
  • هر رد با کدِ وضعیتش خارج می‌شود: 3 برای 401، مانند کلید ابطال‌شده، 4 برای 403، مانند beyond_caller_authority یا owner_only، 5 برای 404، 6 برای 409، مانند not_revoked، role_in_use یا invitation_too_soon، 7 برای 400 یا 422، مانند member_is_owner یا role_limit_reached، و 8 برای 429، مانند too_many_inboxes.
  • تغییری که ممکن است کاری را دو بار انجام دهد پس از خرابی شبکه هرگز دوباره تلاش نمی‌شود: keys create و rotate، me rotate، roles create و delete، members add، remove، revoke-address و resend-invitation، و temp-mail create، extend، delete و delete-message. پیش از اجرای دوبارهٔ هر کدام بررسی کنید. خواندن‌ها، و تغییرهایی که دو بار به همان نتیجه می‌رسند، مانند keys update، keys revoke، roles update، members update و grant-address، خودکار دوباره تلاش می‌شوند.

بعد کجا بروید

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

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

OpenEmail

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

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