احراز هویت
با مرورگر یا یک کلید API وارد شوید، چند نمایه نگه دارید و پیش از یک تغییر حساس کدی را تأیید کنید.
دو راه برای ورود
openemail login را در یک ترمینال اجرا کنید تا بپرسد کدام را میخواهید. در هر دو حالت ورود بهصورت یک نمایه ذخیره میشود و هر فرمان بعدی از نمایهٔ فعال استفاده میکند.
| فرمان | به نام | کدهای تأیید هویت |
|---|---|---|
| openemail login | شما، در فضای کاری و با دسترسیای که تأیید میکنید | پیش از چند تغییر حساس خواسته میشود |
| openemail login --with-token | فضای کاری، با دامنههای مجوزی که کلید دارد | هرگز خواسته نمیشود |
- فقط یک ورود با مرورگر میتواند از
ai compose،ai summarizeو فرمانهای MCP استفاده کند. - ورود با مرورگر تا وقتی تأییدی که انتخاب کردهاید منقضی شود یا خارج شوید معتبر است. کلید تا وقتی ابطال نشده کار میکند.
ورود با مرورگر
openemail loginبرای این ورود برنامهٔ تازهای به نامOpenEmail CLI on <your computer>ثبت میکند و صفحهٔ تأیید OpenEmail را در مرورگرتان باز میکند. اگر مرورگر باز نشد، از پیوندی که چاپ میکند استفاده کنید.- در صورت نیاز وارد شوید، سپس فضای کاری، دسترسی CLI (خواندن، خواندن و فرستادن، کامل یا مجموعهٔ مجوزهای خودتان)، دامنهها یا نشانیهایی که به آنها میرسد و مدت تأیید را انتخاب کنید.
- تأیید کنید. مرورگر تأیید را خودش به ترمینال برمیگرداند و میتوانید زبانه را ببندید. CLI چاپ میکند با چه کسی وارد شدهاید، فضای کاری را و اینکه تأیید کی منقضی میشود.
openemail loginopenemail login --scopes emails:send,threads:readopenemail login --profile work- CLI ده دقیقه منتظر تأیید شما میماند. انتخاب «حالا نه» در صفحهٔ تأیید، ورود را با کد خروج
10لغو میکند. --scopesمجوزها را در صفحهٔ تأیید از پیش انتخاب میکند و هنوز میتوانید آنجا تغییرشان دهید.- وقتی نمایه از قبل ورودی دارد، ترمینال پیش از جایگزینی آن میپرسد. بدون نظارت، رد میکند مگر اینکه
--forceیا--yesبدهید. جایگزین کردن یک ورود با مرورگر، ورود قبلی را ابطال میکند.
هر ورود با مرورگر یک برنامهٔ متصل مستقل است که با دسترسی تأییدشده در حساب ← برنامههای متصل فهرست میشود و آنجا میتوانید آن را تغییر دهید یا حذف کنید. openemail open apps آن صفحه را باز میکند.
در زیر آن جریان OAuth است که سرور MCP به کار میبرد: یک کلاینت عمومی با PKCE، یک کد یکبارمصرف و یک توکن دسترسی که یک ساعت اعتبار دارد و برای شما تمدید میشود. مرورگر روی یک درگاه تصادفی به 127.0.0.1 برمیگردد و آنجا فقط کد همین ورود پذیرفته میشود.
از طریق SSH، یا بدون مرورگر
وقتی CLI نمیتواند روی این دستگاه مرورگری باز کند، به جای آن پیوند را چاپ میکند: از طریق SSH، در CI، در Linux بدون نمایشگر، یا وقتی --no-browser میدهید. پیوند را در مرورگری روی هر دستگاهی باز کنید و تأیید کنید. سپس صفحه یک کد ورود نشان میدهد که آن را در ترمینال میچسبانید.
$ openemail login --no-browserOpen this link in a browser on any device to sign in: https://api.openemail.uk/auth/mcp/authorize?response_type=code&client_id=…Paste the code from your browser- هر کد فقط برای ورودی کار میکند که پیوند را چاپ کرده است، پس کد زبانهٔ دیگری رد میشود.
- چسباندن کل نشانیای که مرورگر به آن رسیده هم کار میکند.
- بدون ترمینال، کد را از طریق stdin بدهید.
کلیدهای API
کلید API یک اسکریپت را بدون مرورگر وارد میکند و هرگز از آن کد خواسته نمیشود. یکی را در تنظیمات ← کلیدهای API (openemail open api-keys) فقط با دامنههای مجوزی که اسکریپت نیاز دارد بسازید. CLI پیش از ذخیرهٔ کلید آن را با GET /keys/self بررسی میکند و کلیدهای oe_live_ و oe_test_ را میپذیرد. نامهای که با کلید آزمایشی فرستاده شود هرگز تحویل داده نمیشود.
openemail login --with-token < ~/.config/openemail/keyecho "$OPENEMAIL_KEY" | openemail login --with-token --profile ciopenemail login --token oe_live_…--token هم کار میکند، اما کلید در تاریخچهٔ پوستهتان میماند، پس CLI هشدار میدهد و --with-token را پیشنهاد میکند. دو راه برای استفاده از کلید بدون ذخیرهٔ آن هست:
OPENEMAIL_API_KEYدر محیط را هر فرمانی که آن را ببیند، پیش از هر نمایهٔ ذخیرهشده، به کار میبرد.--api-key <key>فقط برای همان یک فرمان به کار میرود.
وقتی بیش از یک اعتبارنامه باشد، نخستین مورد از اینها برنده است: --api-key، OPENEMAIL_API_KEY، نمایهای که --profile نام میبرد، نمایهای که OPENEMAIL_PROFILE نام میبرد، و سپس نمایهٔ فعال.
نمایهها
نمایه یک ورود ذخیرهشده از هر یک از دو نوع است. نخستین آنها default نام دارد. با --profile در نمایههای بیشتری وارد شوید و میانشان جابهجا شوید:
openemail login --profile workopenemail profile listopenemail profile use workopenemail inbox --profile defaultOPENEMAIL_PROFILE=work openemail statusopenemail profile currentopenemail profile remove workprofile listهر نمایه را با نوع، فضای کاری و کاربر یا کلیدش نشان میدهد و نمایهٔ فعال را علامت میزند. خروجی JSON آن هرگز توکن یا کلیدی ندارد.profile currentفقط نام را روی stdout چاپ میکند، پس$(openemail profile current)در یک اسکریپت کار میکند.profile remove <name>همانopenemail logout --profile <name>است.- نام نمایه تا 64 نویسه از حروف، ارقام، نقطه، خط تیره و زیرخط است.
profile useنام دیگری هم دارد:profile switch. برداشتن نمایهٔ فعال یا خروج از آن هیچ نمایهای را فعال باقی نمیگذارد، و فرمان بعدی که به ورود نیاز دارد شما را بهopenemail profile use <name>راهنمایی میکند.
ورود با کدام API گفتوگو میکند
نمایهٔ ذخیرهشده APIای را که در آن وارد شده به خاطر میسپارد، و اعتبارنامهاش فقط به همانجا فرستاده میشود. --base-url یا OPENEMAIL_BASE_URL که مبدأ دیگری را نام ببرد، پیش از فرستادن هر چیزی فرمان را با کد خروج 2 متوقف میکند و میگوید چطور با نمایهای جداگانه به آن مبدأ وارد شوید.
openemail login --profile other --base-url https://api.example.comopenemail inbox --profile other- کلیدی که از
OPENEMAIL_API_KEYیا--api-keyمیآید نمایهٔ ذخیرهشده نیست، پس به مبدأ--base-urlیاOPENEMAIL_BASE_URLمیرود، یا اگر هیچکدام تنظیم نشده باشد بهhttps://api.openemail.uk. - فرمانهایی که اعتبارنامهای نمیفرستند، هر نمایهای که فعال باشد، از
--base-urlوOPENEMAIL_BASE_URLپیروی میکنند: صندوقهای یکبارمصرف، متدهایی که کلید نمیخواهند،docsوopen. httpساده برای هر مبدأیی جزlocalhost،127.0.0.1و::1با کد خروج2رد میشود: API، برنامهٔ وب، درخواستهای ورود، توکن و ابطال، و سرور MCP. برای همهٔ موارد دیگر ازhttpsاستفاده کنید.- مسیر درخواستی که از مبدأ API بیرون برود، مانند
openemail api //example.com/x، پیش از فرستادن هر چیزی با کد خروج2وinvalid_pathمتوقف میشود.
کارهایی که هر ورود نمیتواند انجام دهد
ورود با مرورگر از طرف شما عمل میکند، اما برخی کارها هرگز برای یک برنامه تأیید نمیشوند، هر دسترسیای را که انتخاب کنید:
- مدیریت کلیدهای API.
keys:writeوkeys:manageهرگز اعطا نمیشوند، پس ساختن، چرخاندن و ابطال کلیدها به کلید APIای باkeys:manageیا به برنامهٔ وب نیاز دارد.openemail me rotateکلیدی را که با آن فراخوانی میکنید میچرخاند، پس به کلید API نیاز دارد. - صورتحساب، و خود فضاهای کاری. طرحها، فاکتورها و ساختن، جابهجایی یا حذف یک فضای کاری در برنامهٔ وب میمانند.
- نشانی رایگان شما. یک برنامه برای یک فضای کاری تجاری تأیید میشود و فضای شخصیای که نشانی رایگان را دارد هرگز پیشنهاد نمیشود، همان قاعدهای که API دنبال میکند.
- اعضا و نقشها، مگر اینکه تأیید کل فضای کاری را پوشش دهد.
members:writeوroles:writeاز تأییدی که به برخی دامنهها یا نشانیها محدود است حذف میشوند.
کلید API هم محدودیت خودش را دارد. ai compose، ai summarize و هر فرمان openemail mcp جز config از سرور MCP میگذرند که ورود با مرورگر میخواهد، پس با یک کلید با کد خروج 4 متوقف میشوند و دلیلش را میگویند.
کدهای تأیید هویت
با ورود از طریق مرورگر، چند تغییر نخست کد تأیید هویت میخواهند، همانطور که در برنامهٔ وب. CLI وقتی لازم باشد میپرسد: یک کد ششرقمی برایتان ایمیل میکند یا، اگر ورود دومرحلهای روشن باشد، کدی از برنامهٔ احراز هویت یا یکی از کدهای پشتیبانتان میخواهد. وقتی کد درست باشد فرمان اجرا میشود و تا 60 دقیقه دیگر از آن ورود پرسیده نمیشود. از کلید API هرگز پرسیده نمیشود.
| فرمان | کد میخواهد |
|---|---|
| webhooks create, update | همیشه |
| rules create, update | همیشه |
| roles update, delete | همیشه |
| members add, update, remove | همیشه |
| members grant-address, revoke-address | همیشه |
| domains delete, delete-address | همیشه |
| audiences delete | برای مخاطبانی که خودتان ساختهاید |
| audiences empty | برای مخاطبانی که خودتان ساختهاید و هنوز مخاطب دارد |
| mcp call createRule, setRuleEnabled | همیشه |
| mcp call removeDomain, removeDomainAddress | همیشه |
| mcp call deleteAudience, emptyAudience | همانطور که فرمان مخاطبان متناظر |
| api | وقتی عملیاتی که فرا میخواند یکی از موارد بالا باشد |
$ openemail webhooks create --url https://acme.com/hooks/openemailWe emailed a code to a•••@acme.com.Verification code: 482913Verified. You will not be asked again for 60 minutes.- برای فرستادن دوبارهٔ ایمیل، در اعلان
rرا تایپ کنید. کد نادرست میگوید چند تلاش باقی مانده است. - پس از پذیرفته شدن کد، فرمان یک بار دیگر اجرا میشود، هرگز دو بار.
--yesیک حذف را تأیید میکند اما هرگز از کد نمیگذرد.- بدون نظارت (با
--jsonیا--no-input، در CI یا بدون ترمینال) کسی نمیتواند کد را تایپ کند، پس فرمان با کد خروج4متوقف میشود و چیزی را تغییر نمیدهد. - هر کد 5 تلاش دارد، و پس از پنجمین تلاش نادرست CLI کد تازهای پیشنهاد میکند. هر ورود میتواند 5 کد در ساعت و 20 کد در روز بخواهد.
- ده کد نادرست برای یک ورود در 24 ساعت تأیید هویت آن را متوقف میکند. آنگاه CLI میگوید کی از سر گرفته میشود و بدون پیشنهاد کد دیگری با کد خروج
4وstep_up_pausedمتوقف میشود، و ایمیلی که آن را توضیح میدهد نام برنامه را میآورد.
پیش از اینکه یک اسکریپت یا کلاینت هوش مصنوعی کاری حساس انجام دهد، openemail verify را اجرا کنید. همین حالا کد را میخواهد و در 60 دقیقهٔ بعد هر فرمان آن نمایه بدون کد اجرا میشود، از جمله openemail mcp call و پل MCP محلی.
openemail verifyopenemail verify --statusopenemail verify --status --jsonopenemail verify --forceاین 60 دقیقه از آنِ یک ورود است. از نمایهٔ دیگر، یا از کلاینت هوش مصنوعیای که خودش وارد شده، کد جداگانه خواسته میشود و خروج بیدرنگ آن را پایان میدهد. --force کد تازهای میخواهد و 60 دقیقهٔ تازهای را آغاز میکند.
انقضا، خروج و ابطال
- توکن دسترسیِ پشت ورود با مرورگر یک ساعت اعتبار دارد. CLI پیش از انقضا آن را تمدید و توکن تازه را ذخیره میکند، پس هرگز متوجه آن نمیشوید.
- هر توکن تازهسازی فقط یک بار کار میکند. توکن قدیمیای که بیش از 30 ثانیه پس از جایگزینیاش به دست CLI به کار رود، مثلاً از یک رونوشت
config.jsonروی دستگاهی دیگر، سرور را وادار میکند آن ورود را بهطور کامل ابطال کند، پس بهجای رونوشت گرفتن از فایل، روی هر دستگاه وارد شوید. - تأیید تا مدتی که در صفحهٔ تأیید انتخاب کردهاید معتبر است. وقتی تمام شود، یا وقتی برنامه در حساب ← برنامههای متصل حذف شود، CLI دیگر نمیتواند از طرف شما عمل کند و از شما میخواهد دوباره
openemail loginرا اجرا کنید. openemail logoutورود با مرورگر را روی سرور ابطال میکند، که آن را از برنامههای متصل برمیدارد، سپس آن را روی این دستگاه فراموش میکند، حتی اگر به سرور دسترسی نباشد.--allاز همهٔ نمایهها خارج میشود.- خروج از یک کلید API فقط آن را اینجا فراموش میکند. کلید تا وقتی آن را با
openemail keys revoke <id>یا در برنامهٔ وب ابطال نکنید کار میکند.
جای نگهداری ورودها
همه چیز در ~/.openemail یا در پوشهای است که OPENEMAIL_CONFIG_DIR نام میبرد. پوشه را فقط شما میتوانید بخوانید (0700)، و هر فایل درون آن را هم (0600). هر فایل نخست در یک فایل موقت نوشته و سپس با تغییر نام در جایش گذاشته میشود، تا یک خرابی هرگز نیمی از فایل را به جا نگذارد، و هر تغییر زیر یک فایل قفل انجام میشود، تا فرمانهایی که کنار هم اجرا میشوند هرگز نمایهای را از دست ندهند.
| فایل | محتوای آن |
|---|---|
| config.json | نمایههای شما: کلیدهای API، توکنهای دسترسی و نوسازی، و اینکه کدام نمایه فعال است |
| temp-mail.json | صندوقهای یکبارمصرفی که این CLI ساخته، همراه با توکنهای صندوقشان |
| update-check.json | آخرین باری که دربارهٔ انتشار تازه از npm پرسیده شد، و پاسخش |
توکنها و کلیدها بهصورت متن ساده در فایلهایی نگه داشته میشوند که فقط کاربر شما میتواند بخواند، پس با پوشه مثل یک کلید SSH رفتار کنید. فایلی که CLI نمیتواند از آن سر در بیاورد هرگز بیصدا خروج به حساب نمیآید: یک بار با ذکر مسیر هشدار میدهد و پیش از نوشتن فایل تازه، نسخهای کنارش نگه میدارد (config.json.bak). فایلی که اصلاً نمیتواند بخواند، مثلاً به خاطر مجوزهایش، فرمان را با خطایی که نام آن را میآورد متوقف میکند.