کلیدها، اعضا و نقشها
کلیدهای 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فقط کلید ابطالشده را برمیدارد و هر کلید دیگری با 409not_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نیست را نقش برداشته است. این دلیل معمول یک 403insufficient_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در ابتدا میگذارد، پس هنگام شمردن صندلیها آن ردیف را کنار بگذارید. مالک همهٔ مجوزها را دارد و نمیتوان او را دعوت، تغییر یا حذف کرد، و کسی را هم که از پیش در فضای کاری است نمیتوان دوباره دعوت کرد: هر دو 422member_is_ownerاست.- کسانی که اعطای نشانی دارند اما هرگز نقشی به آنها داده نشده با
implied: trueبرمیگردند و نقششان از اعطاهایشان استنباط میشود.members updateبه آنها نقشی واقعی میدهد. members addیک دعوتنامه میفرستد، حتی برای کسی که از پیش حساب دارد. تا وقتی نپذیرد چیزی داده نمیشود، و آنگاه دقیقاً همان نقش، نشانیها و دامنههایی که دعوتنامه دارد. دعوت دوباره از همان نشانی تا ده دقیقه 409invitation_too_soonاست، و پس از آن به جای فرستادن دعوتنامهٔ دوم، دعوتنامهٔ در انتظار را تازه میکند.resend-invitationپیوند تازهای با 14 روز اعتبار بیشتر میفرستد و پیوند قدیمی را بازنشسته میکند، که دعوتنامهٔ منقضی را هم تمدید میکند.revoke-invitationیک دعوتنامه را پس میگیرد، و دعوتنامهای که از پیش پذیرفته شده 409invitation_acceptedاست، پس به جای آن عضو را بردارید.members updateنقش را تغییر میدهد و هیچ چیز دیگر را.grant-addressیک نشانی میدهد یا دسترسی به آن را تغییر میدهد، پس اجرای دوبارهاش با--accessدیگری اعطا را تغییر میدهد نه اینکه اعطای دومی اضافه کند.revoke-addressیک نشانی را پس میگیرد و بقیه را میگذارد. ابطال آخرین اعطای یک عضو استنباطی او را از فضای کاری برمیدارد.members removeدسترسی کسی به فضای کاری، عضویتش و همهٔ اعطاهایش را پایان میدهد، و درaddressesRevokedگزارش میدهد چند اعطای نشانی رفت. حسابش و نامههایی که فرستاده دستنخورده میمانند.
یک نقش سقفی هم برای کلیدهای API است که زیر آن صادر میشوند. کاری که یک کلید میتواند بکند دامنههای مجوز خودش است که با مجوزهای نقشش کوتاه شده، و در هر درخواست محاسبه میشود.
roles listنقشهای پیشساخته را اول نشان میدهد، به ترتیب Owner، Admin، Member، Viewer، Developer و Billing، سپس نقشهای سفارشی بر اساس نام. هر فضای کاری تا 24 نقش سفارشی دارد، و پس از آنroles createیک 422role_limit_reachedاست.- یک نقش مجوزهایی را که مجوزهایش لازم میدانند هم ذخیره میکند، پس
templates:writeمقدارtemplates:readرا هم ذخیره میکند، وroles:writeمقدارهایroles:readوmembers:readرا میآورد. فهرست را از پاسخ بخوانید به جای اینکه فرضش کنید. roles update --permissionsکل فهرست را جایگزین میکند، پس نقش را بخوانید، فهرست را تغییر دهید و همهاش را بفرستید.--description nullیادداشت را پاک میکند. تغییر از فراخوانی بعدیِ هر عضو و کلیدی که آن نقش را دارد اعمال میشود.- هر نقشی جز Owner را میتوان تغییر نام داد، بازنویسی و حذف کرد، از جمله نقشهای پیشساخته، و نقش پیشساختهٔ حذفشده برنمیگردد. نقش مالک به ویرایش با 409
role_immutableو به حذف با 409role_undeletableپاسخ میدهد. - تا وقتی عضو، کلید API یا دعوتنامهٔ در انتظاری نقشی را دارد،
roles deleteبه--reassign-toبا نقشی که آنها را تحویل میگیرد نیاز دارد، وگرنه با 409role_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، برای همیشه 409extension_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" --yesmembers و 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" --yestemp new فقط نشانی را چاپ میکند، پس در یک متغیر پوسته جا میشود، و temp watch --first با نخستین پیام میایستد. به جای openemail send یک فرم ثبتنام را به آن نشانی بفرستید تا کد تأییدش را به همین شکل بگیرید.
دامنههای مجوز، تأییدها و خطاها
| دامنهٔ مجوز | فرمانها |
|---|---|
| keys:read | keys list, get, list-requests, list-activity, list-workspace-requests, list-workspace-activity |
| keys:manage | keys create, update, delete, rotate, revoke |
| keys:write | me rotate |
| roles:read | roles list, get, list-permissions |
| roles:write | roles create, update, delete |
| members:read | members list, get, list-invitations |
| members:write | members 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، خودکار دوباره تلاش میشوند.