تخطَّ إلى المستندات
CLI

الاستيثاق

سجّل الدخول بمتصفحك أو بمفتاح API، واحتفظ بعدة ملفات شخصية، وتحقّق من رمز قبل أي تغيير حساس.

طريقتان لتسجيل الدخول

شغّل openemail login في طرفية فيسألك أي الطريقتين تريد. في الحالتين يُحفظ تسجيل الدخول كملف شخصي، ويستخدم كل أمر لاحق الملف النشط.

الأمريتصرف باسمرموز التحقق
openemail loginأنت، في مساحة العمل وبالصلاحيات التي توافق عليهايُطلب قبل بعض التغييرات الحساسة
openemail login --with-tokenمساحة العمل، بنطاقات الصلاحية التي يحملها المفتاحلا يُطلب أبدًا
  • لا يستطيع استخدام ai compose وai summarize وأوامر MCP إلا تسجيل الدخول عبر المتصفح.
  • يبقى تسجيل الدخول عبر المتصفح صالحًا حتى تنتهي الموافقة التي اخترتها أو حتى تسجّل الخروج. ويعمل المفتاح إلى أن يُبطَل.

تسجيل الدخول عبر المتصفح

  1. يسجّل openemail login تطبيقًا جديدًا لهذا الدخول باسم OpenEmail CLI on <your computer>، ويفتح صفحة الموافقة في OpenEmail داخل متصفحك. وإن لم يُفتح المتصفح، فاستخدم الرابط الذي يطبعه.
  2. سجّل الدخول إن لزم، ثم اختر مساحة العمل، والصلاحية التي تحصل عليها CLI (قراءة، أو قراءة وإرسال، أو كاملة، أو مجموعتك الخاصة من الأذونات)، والنطاقات أو العناوين التي تبلغها، ومدة الموافقة.
  3. وافق. يعيد المتصفح الموافقة إلى الطرفية من تلقاء نفسه، ويمكنك إغلاق التبويب. تطبع CLI الحساب الذي سجّلت به الدخول، ومساحة العمل، وموعد انتهاء الموافقة.
الطرفية
openemail loginopenemail login --scopes emails:send,threads:readopenemail login --profile work
  • تنتظر CLI موافقتك 10 دقائق. واختيار «ليس الآن» في صفحة الموافقة يلغي تسجيل الدخول برمز الخروج 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 work
  • يعرض profile 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 قبل أن يفعل سكربت أو عميل ذكاء اصطناعي شيئًا حساسًا. يطلب الرمز الآن، وخلال الدقائق الستين التالية يعمل كل أمر في ذلك الملف الشخصي دونه، بما في ذلك openemail mcp call وجسر MCP المحلي.

الطرفية
openemail verifyopenemail verify --statusopenemail verify --status --jsonopenemail verify --force

الدقائق الستون ملك لتسجيل دخول واحد. يُطلب من ملف شخصي آخر، أو من عميل ذكاء اصطناعي سجّل الدخول بنفسه، رمزه الخاص، وتسجيل الخروج ينهيها فورًا. يطلب --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) قبل كتابة ملف جديد. والملف الذي لا تستطيع قراءته أصلًا، بسبب أذوناته مثلًا، يوقف الأمر بخطأ يسمّيه.

صندوق بريدك،
بشروطك أنت.

بنية بريد إلكتروني للشركات والذكاء الاصطناعي والوكلاء والبريد الشخصي. مبنية للتوسّع والخصوصية والتحكّم. كل ما كان ينبغي للبريد الإلكتروني أن يملكه منذ اليوم الأول.

OpenEmail

بنية بريد إلكتروني للشركات والذكاء الاصطناعي والوكلاء والبريد الشخصي. مبنية للتوسّع والخصوصية والتحكّم. كل ما كان ينبغي للبريد الإلكتروني أن يملكه منذ اليوم الأول.

© 2026 OpenEmail. جميع الحقوق محفوظة.