كيفية استخدام SWAKS مع SparkPost

Bird

24‏/06‏/2021

البريد الإلكتروني

1 min read

كيفية استخدام SWAKS مع SparkPost

النقاط الرئيسية

    • SWAKS (Swiss Army Knife for SMTP) هو أداة قوية لواجهة الأوامر لإرسال رسائل البريد الإلكتروني واختبار اتصالات SMTP بطريقة مرنة وصديقة للبرامج النصية.

    • يبسط اختبار SMTP اليدوي مقارنةً بـ telnet من خلال تقديم أعلام واضحة، والتعامل مع المصادقة، والمرفقات، واختبار TLS، والتوقيت، والعناوين المخصصة.

    • تعمل الأداة عبر منصات متعددة وتعتبر سهلة الاستخدام للمبتدئين على الرغم من إمكانياتها الواسعة.

    • يشمل الاستخدام الأساسي إرسال رسالة بسيطة، وإضافة خطوط العنوان، وضم العناوين، وإرسال المرفقات دون تحويل يدوي إلى base64.

    • SWAKS مثالي لفحوص الموثوقية والمراقبة — يمكن جدولتة عبر cron لتنفيذ اختبارات دورية "هل لا يزال يعمل؟".

    • يمكنه أيضًا قياس الكمون وسرعة الاتصال عن طريق توقيت تحية SMTP دون إرسال بريد إلكتروني كامل.

    • يدعم SWAKS اختبار TLS المفصل، بما في ذلك التحقق من التوافق مع المعايير الحديثة مثل TLS 1.2 (المطلوب من SparkPost).

    • عند استخدام SparkPost، يسمح SWAKS بالحInjectation بسهولة في خوادم SparkPost SMTP باستخدام مفتاح API للمصادقة.

    • يمكن فرض إصدار TLS (مثل tlsv1_2) للسماح للمستخدمين باختبار بيئاتهم وضمان الامتثال لإلغاءات SparkPost.

    • يوفر SWAKS تصحيحًا تفصيليًا، مما يجعله مفيدًا للتحقق من تكوينات SMTP وتشخيص الاتصالات الفاشلة.

    • يسمح ملف التكوين .swaksrc للمستخدمين بتخزين المعلمات الافتراضية، مما يمكن من الإرسال بأمر واحد للاختبارات المتكررة.

    • يدعم SWAKS تجاوز واجهة الأوامر، مما يتيح للمستخدمين ضبط أي حقل ديناميكيًا عند الحاجة.

أبرز الأسئلة والأجوبة

  • ما هو SWAKS؟

    أداة اختبار SMTP مرنة عبر سطر الأوامر تُعرف باسم "السكين السويسري" للبريد الإلكتروني.

  • لماذا تستخدم SWAKS بدلاً من telnet؟

    يُلقن أتمتة عملية مصافحة SMTP، ويدعم المصادقة، TLS، المرفقات، والرؤوس، مما يجعل الاختبار أسهل وأقوى.

  • ما هي المنصات التي يدعمها SWAKS؟

    لينكس وmacOS ومعظم الأنظمة الشبيهة بـUnix، مع وجود تشابه في بناء الجملة عبرها.

  • كيف أرسل بريد إلكتروني اختبار أساسي باستخدام SWAKS؟

    عن طريق تشغيل أمر بسيط يحدد المستلم والمرسل وعنوان الخادم.

  • هل يمكن لـ SWAKS إرسال رسائل مع خطوط موضوع ورؤوس مخصصة؟

    نعم — يدعم المواضيع، والتجاوز من/إلى، وحقن الرؤوس العشوائي.

  • هل يدعم SWAKS إرسال المرفقات؟

    نعم - وهو يتولى تلقائيًا عملية الترميز base64 نيابة عنك.

  • هل يمكن لـ SWAKS المساعدة في اختبار توافق TLS؟

    بكل تأكيد — يمكنك فرض إصدارات محددة من TLS (مثل TLS 1.2) أو اختبار دعم شيفرة التشفير.

  • لماذا يعتبر TLS 1.2 مهمًا عند الإرسال إلى SparkPost؟

    الإصدارات الأقدم من TLS متوقفة. يتطلب SparkPost TLS 1.2+ للاتصالات الآمنة.

  • كيف يمكنني المصادقة مع SparkPost عند استخدام SWAKS؟

    باستخدام مفتاح API الخاص بك في SparkPost ككلمة مرور SMTP أثناء الأمر.

  • هل يمكن لـ SWAKS قياس الأداء أو زمن الاستجابة؟

    نعم — باستخدام الأمر time والدورات الجزئية لـ SMTP لقياس سرعة المصافحة.

  • هل يدعم SWAKS الأتمتة؟

    نعم — يمكنك تشغيله عبر مهام كرون لاختبار بيئات SMTP بشكل متكرر.

  • ما هو ملف .swaksrc ولماذا يتم استخدامه؟

    إنه ملف تكوين يخزن معلمات SWAKS الافتراضية، مما يتيح الإرسال بأمر واحد مع تجاوزات اختيارية.

هذه أداة سطر أوامر يمكنها إرسال البريد الإلكتروني عبر SMTP. إنها ليست سهلة الاستخدام فحسب، بل توفر أيضًا مجموعة من الخيارات عند الحاجة.

السنة الماضية، نشرنا مقال مدونة يوضح كيفية استخدام أداة Telnet الشائعة والمفيدة للغاية للتحقق من اتصال SMTP.

الخطوة التالية هي تبسيط العملية اليدوية باستخدام أداة رائعة المستوى التالي (تصف نفسها بأنها السكين السويسري للبريد الإلكتروني) تسمى SWAKS. هذه أداة سطر أوامر يمكنها إرسال رسائل البريد الإلكتروني عبر SMTP. هي ليست فقط سهلة الاستخدام بل أيضًا توفر مجموعة متنوعة من الخيارات عند الحاجة.

في البداية، كنت أشعر بالرهبة من كمية الخيارات، لكنها قابلة للاستخدام تمامًا مع الخيارات الأساسية الأكثر بساطة. إذا واجهت أي مشكلات، فقط احفظ هذه الصفحة في مفضلتك، وانسخ والصق الأمثلة، وعدّلها حسب رغبتك. في نهاية هذه المدونة، بمجرد أن تحصل على بعض الألفة ولا يوجد لديك الكثير من التباين/الديناميكية في أوامر SWAKS الخاصة بك، سأوضح لك كيفية إنشاء ملف تكوين الذي يحدد مسبقًا جميع المعلمات الافتراضية الخاصة بك. هذا يجعل تشغيل SWAKS حرفيًا مجرد زر (حسنًا، "مفتاح") بعيدًا! 

لغرض هذا التمرين، سنقوم بتشغيل الأوامر من خادم CentOS 7 ولكن الأوامر مماثلة على جميع المنصات المدعومة. كما ذكرنا أعلاه، إذا كنت عالقًا، فقط انسخ والصق مباشرة في نظامك وعدل ما تحتاج. هنا هي الأساسيات:

السنة الماضية، نشرنا مقال مدونة يوضح كيفية استخدام أداة Telnet الشائعة والمفيدة للغاية للتحقق من اتصال SMTP.

الخطوة التالية هي تبسيط العملية اليدوية باستخدام أداة رائعة المستوى التالي (تصف نفسها بأنها السكين السويسري للبريد الإلكتروني) تسمى SWAKS. هذه أداة سطر أوامر يمكنها إرسال رسائل البريد الإلكتروني عبر SMTP. هي ليست فقط سهلة الاستخدام بل أيضًا توفر مجموعة متنوعة من الخيارات عند الحاجة.

في البداية، كنت أشعر بالرهبة من كمية الخيارات، لكنها قابلة للاستخدام تمامًا مع الخيارات الأساسية الأكثر بساطة. إذا واجهت أي مشكلات، فقط احفظ هذه الصفحة في مفضلتك، وانسخ والصق الأمثلة، وعدّلها حسب رغبتك. في نهاية هذه المدونة، بمجرد أن تحصل على بعض الألفة ولا يوجد لديك الكثير من التباين/الديناميكية في أوامر SWAKS الخاصة بك، سأوضح لك كيفية إنشاء ملف تكوين الذي يحدد مسبقًا جميع المعلمات الافتراضية الخاصة بك. هذا يجعل تشغيل SWAKS حرفيًا مجرد زر (حسنًا، "مفتاح") بعيدًا! 

لغرض هذا التمرين، سنقوم بتشغيل الأوامر من خادم CentOS 7 ولكن الأوامر مماثلة على جميع المنصات المدعومة. كما ذكرنا أعلاه، إذا كنت عالقًا، فقط انسخ والصق مباشرة في نظامك وعدل ما تحتاج. هنا هي الأساسيات:

السنة الماضية، نشرنا مقال مدونة يوضح كيفية استخدام أداة Telnet الشائعة والمفيدة للغاية للتحقق من اتصال SMTP.

الخطوة التالية هي تبسيط العملية اليدوية باستخدام أداة رائعة المستوى التالي (تصف نفسها بأنها السكين السويسري للبريد الإلكتروني) تسمى SWAKS. هذه أداة سطر أوامر يمكنها إرسال رسائل البريد الإلكتروني عبر SMTP. هي ليست فقط سهلة الاستخدام بل أيضًا توفر مجموعة متنوعة من الخيارات عند الحاجة.

في البداية، كنت أشعر بالرهبة من كمية الخيارات، لكنها قابلة للاستخدام تمامًا مع الخيارات الأساسية الأكثر بساطة. إذا واجهت أي مشكلات، فقط احفظ هذه الصفحة في مفضلتك، وانسخ والصق الأمثلة، وعدّلها حسب رغبتك. في نهاية هذه المدونة، بمجرد أن تحصل على بعض الألفة ولا يوجد لديك الكثير من التباين/الديناميكية في أوامر SWAKS الخاصة بك، سأوضح لك كيفية إنشاء ملف تكوين الذي يحدد مسبقًا جميع المعلمات الافتراضية الخاصة بك. هذا يجعل تشغيل SWAKS حرفيًا مجرد زر (حسنًا، "مفتاح") بعيدًا! 

لغرض هذا التمرين، سنقوم بتشغيل الأوامر من خادم CentOS 7 ولكن الأوامر مماثلة على جميع المنصات المدعومة. كما ذكرنا أعلاه، إذا كنت عالقًا، فقط انسخ والصق مباشرة في نظامك وعدل ما تحتاج. هنا هي الأساسيات:

تثبيت

sudo yum install epel-release -y && sudo yum install swaks -y

بمجرد التثبيت، إليك الشكل الأساسي لإرسال رسالة. في هذا المثال، نحن نستخدم عنوان الخادم المحلي:

swaks -s 127.0.0.1 -f sender@from.com -t recipient@recipient.com

أرسل رسالة مع سطر العنوان "Subject" + رؤوس أخرى ثم قم بتضمين نص "Hello World!" في الجسم:

swaks -s 127.0.0.1 
  -f me@from.com 
  -t them@recipient.com 
  --header "Subject: Hello! This is the subject header" 
  --header "Second_Header: 123" 
  --header "Third_Header: XYZ" 
  --body "Hello World!"

إليك كيفية إضافة مرفق، حيث تقوم SWAKS بتحويل base64 لك، وهي رائعة لاختبار حدود حجم الرسالة:

swaks -s 127.0.0.1 -f me@from.com -t them@recipient.com --attach /path/to/file.tgz

لقد قمت بكل الأساسيات تقريبًا! الآن دعنا نرى كيف يمكنك تحسين عملية الإعداد الخاصة بك. إليك بعض الأفكار:

  • استخدم مجدول مثل chron لإجراء اختبارات تتأكد إذا كانت تعمل ويمكن أن تكون أساسًا أو حتى تعزز نظام المراقبة الخاص بك.

  • قياس زمن الانتظار عند توصيل وقطع الاتصال بخادم البريد.

  • اختبار إصدارات TLS المختلفة والشفرات

لن تترك وحدك هنا، سأريك كيف تقوم بجميع ما سبق. هذه المرة سوف نقوم بحقن في خوادمنا SparkPost.

أرسل رسالة إلى خوادمنا SparkPost (كيفية إنشاء مفتاح API، و خيارات SMTP). بمجرد الحصول على مفتاح المصادقة الخاص بك، قم بلصقه في الأمر (وتأكد من الحفاظ على المفتاح آمنًا وسريًا!):

swaks 
  --server smtp.sparkpostmail.com:587 
  --tls 
  --auth-user SMTP_Injection 
  --auth-password "YOUR_AUTH_KEY" 
  -f me@from.com 
  -t them@recipient.com

إذا كنت تبحث عن توجيه حول كيفية معالجة مشاكل إرسال عبر SMTP إلى خوادمنا، تحقق من مقال معالجة مشاكل SMTP. لاختبار اتصال SMTP الأساسي، يمكنك أيضًا تحقق من اتصالات SMTP باستخدام جلسات telnet اليدوية.

استنادًا إلى أفضل ممارسات الأمن، قامت SparkPost بتحديث جميع إصدارات TLS الأقدم باستثناء v1.2 وما فوق. إذا كنت تريد معرفة ما إذا كان نظامك متوافقًا، فإن SWAKS يسمح لك باختبار إصدارات TLS والشفرات المحددة.

swaks 
  -s smtp.sparkpostmail.com:587 
  --tls 
  -f me@from.com 
  -t them@recipient.com 
  --auth-user SMTP_Injection 
  --auth-password "YOUR_API_KEY" 
  -tlsp tlsv1_2 
  --tls-cipher ECDHE-RSA-AES128-GCM-SHA256

في هذا المثال، نحن نستخدم "tlsv1_2" ولكن يمكنك تغيير ذلك إلى "tlsv1_1" واستخدامه على نطاقات أخرى لملاحظة توافقها.

ماذا لو كنت تريد قياس الوقت الذي يستغرقه خادم بريد للاستجابة؟ يمكن لـ SWAKS المرور عبر دورة SMTP والانسحاب في بعض النقاط دون إرسال رسالة، ويمكنك قياسها باستخدام الأمر "time" الذي يظهر في نهاية الإخراج:

$ time swaks -s 127.0.0.1 
  -f sender@from.com 
  -t them@recipient.com 
  test 
  --quit-after RCPT
=== Trying 127.0.0.1:25...
=== Connected to 127.0.0.1.
...
 -> RCPT TO:<them@recipient.com>
<- 250 2.1.5 <them@recipient.com> ok
 -> QUIT
<

كما وعدت، إذا وصلت إلى هذا الحد فإن المكافأة هي استخدام ملف إعداد لتحديد المعلمات الافتراضية:

$ cd $HOME
$ vim .swaksrc

انسخ والصق هذا في ملف .swaksrc:

--from swakstest@jasdevism.com
-h-From: "Jas Swaks" <swakstest@jasdevism.com>
-s 127.0.0.1
--body "This is a test!"
--to jsingh@sparkpost.com

بمجرد حفظه، ما عليك سوى كتابة "swaks" وسوف يملأ كل شيء ويرسله في طريقه السعيد! ويمكنك الأفضل من ذلك بتجاوزه بإضافة رغبتك على خط الأوامر، على سبيل المثال إذا أردت مستلم مختلف:

swaks -t recipient@somewherelse.com
sudo yum install epel-release -y && sudo yum install swaks -y

بمجرد التثبيت، إليك الشكل الأساسي لإرسال رسالة. في هذا المثال، نحن نستخدم عنوان الخادم المحلي:

swaks -s 127.0.0.1 -f sender@from.com -t recipient@recipient.com

أرسل رسالة مع سطر العنوان "Subject" + رؤوس أخرى ثم قم بتضمين نص "Hello World!" في الجسم:

swaks -s 127.0.0.1 
  -f me@from.com 
  -t them@recipient.com 
  --header "Subject: Hello! This is the subject header" 
  --header "Second_Header: 123" 
  --header "Third_Header: XYZ" 
  --body "Hello World!"

إليك كيفية إضافة مرفق، حيث تقوم SWAKS بتحويل base64 لك، وهي رائعة لاختبار حدود حجم الرسالة:

swaks -s 127.0.0.1 -f me@from.com -t them@recipient.com --attach /path/to/file.tgz

لقد قمت بكل الأساسيات تقريبًا! الآن دعنا نرى كيف يمكنك تحسين عملية الإعداد الخاصة بك. إليك بعض الأفكار:

  • استخدم مجدول مثل chron لإجراء اختبارات تتأكد إذا كانت تعمل ويمكن أن تكون أساسًا أو حتى تعزز نظام المراقبة الخاص بك.

  • قياس زمن الانتظار عند توصيل وقطع الاتصال بخادم البريد.

  • اختبار إصدارات TLS المختلفة والشفرات

لن تترك وحدك هنا، سأريك كيف تقوم بجميع ما سبق. هذه المرة سوف نقوم بحقن في خوادمنا SparkPost.

أرسل رسالة إلى خوادمنا SparkPost (كيفية إنشاء مفتاح API، و خيارات SMTP). بمجرد الحصول على مفتاح المصادقة الخاص بك، قم بلصقه في الأمر (وتأكد من الحفاظ على المفتاح آمنًا وسريًا!):

swaks 
  --server smtp.sparkpostmail.com:587 
  --tls 
  --auth-user SMTP_Injection 
  --auth-password "YOUR_AUTH_KEY" 
  -f me@from.com 
  -t them@recipient.com

إذا كنت تبحث عن توجيه حول كيفية معالجة مشاكل إرسال عبر SMTP إلى خوادمنا، تحقق من مقال معالجة مشاكل SMTP. لاختبار اتصال SMTP الأساسي، يمكنك أيضًا تحقق من اتصالات SMTP باستخدام جلسات telnet اليدوية.

استنادًا إلى أفضل ممارسات الأمن، قامت SparkPost بتحديث جميع إصدارات TLS الأقدم باستثناء v1.2 وما فوق. إذا كنت تريد معرفة ما إذا كان نظامك متوافقًا، فإن SWAKS يسمح لك باختبار إصدارات TLS والشفرات المحددة.

swaks 
  -s smtp.sparkpostmail.com:587 
  --tls 
  -f me@from.com 
  -t them@recipient.com 
  --auth-user SMTP_Injection 
  --auth-password "YOUR_API_KEY" 
  -tlsp tlsv1_2 
  --tls-cipher ECDHE-RSA-AES128-GCM-SHA256

في هذا المثال، نحن نستخدم "tlsv1_2" ولكن يمكنك تغيير ذلك إلى "tlsv1_1" واستخدامه على نطاقات أخرى لملاحظة توافقها.

ماذا لو كنت تريد قياس الوقت الذي يستغرقه خادم بريد للاستجابة؟ يمكن لـ SWAKS المرور عبر دورة SMTP والانسحاب في بعض النقاط دون إرسال رسالة، ويمكنك قياسها باستخدام الأمر "time" الذي يظهر في نهاية الإخراج:

$ time swaks -s 127.0.0.1 
  -f sender@from.com 
  -t them@recipient.com 
  test 
  --quit-after RCPT
=== Trying 127.0.0.1:25...
=== Connected to 127.0.0.1.
...
 -> RCPT TO:<them@recipient.com>
<- 250 2.1.5 <them@recipient.com> ok
 -> QUIT
<

كما وعدت، إذا وصلت إلى هذا الحد فإن المكافأة هي استخدام ملف إعداد لتحديد المعلمات الافتراضية:

$ cd $HOME
$ vim .swaksrc

انسخ والصق هذا في ملف .swaksrc:

--from swakstest@jasdevism.com
-h-From: "Jas Swaks" <swakstest@jasdevism.com>
-s 127.0.0.1
--body "This is a test!"
--to jsingh@sparkpost.com

بمجرد حفظه، ما عليك سوى كتابة "swaks" وسوف يملأ كل شيء ويرسله في طريقه السعيد! ويمكنك الأفضل من ذلك بتجاوزه بإضافة رغبتك على خط الأوامر، على سبيل المثال إذا أردت مستلم مختلف:

swaks -t recipient@somewherelse.com
sudo yum install epel-release -y && sudo yum install swaks -y

بمجرد التثبيت، إليك الشكل الأساسي لإرسال رسالة. في هذا المثال، نحن نستخدم عنوان الخادم المحلي:

swaks -s 127.0.0.1 -f sender@from.com -t recipient@recipient.com

أرسل رسالة مع سطر العنوان "Subject" + رؤوس أخرى ثم قم بتضمين نص "Hello World!" في الجسم:

swaks -s 127.0.0.1 
  -f me@from.com 
  -t them@recipient.com 
  --header "Subject: Hello! This is the subject header" 
  --header "Second_Header: 123" 
  --header "Third_Header: XYZ" 
  --body "Hello World!"

إليك كيفية إضافة مرفق، حيث تقوم SWAKS بتحويل base64 لك، وهي رائعة لاختبار حدود حجم الرسالة:

swaks -s 127.0.0.1 -f me@from.com -t them@recipient.com --attach /path/to/file.tgz

لقد قمت بكل الأساسيات تقريبًا! الآن دعنا نرى كيف يمكنك تحسين عملية الإعداد الخاصة بك. إليك بعض الأفكار:

  • استخدم مجدول مثل chron لإجراء اختبارات تتأكد إذا كانت تعمل ويمكن أن تكون أساسًا أو حتى تعزز نظام المراقبة الخاص بك.

  • قياس زمن الانتظار عند توصيل وقطع الاتصال بخادم البريد.

  • اختبار إصدارات TLS المختلفة والشفرات

لن تترك وحدك هنا، سأريك كيف تقوم بجميع ما سبق. هذه المرة سوف نقوم بحقن في خوادمنا SparkPost.

أرسل رسالة إلى خوادمنا SparkPost (كيفية إنشاء مفتاح API، و خيارات SMTP). بمجرد الحصول على مفتاح المصادقة الخاص بك، قم بلصقه في الأمر (وتأكد من الحفاظ على المفتاح آمنًا وسريًا!):

swaks 
  --server smtp.sparkpostmail.com:587 
  --tls 
  --auth-user SMTP_Injection 
  --auth-password "YOUR_AUTH_KEY" 
  -f me@from.com 
  -t them@recipient.com

إذا كنت تبحث عن توجيه حول كيفية معالجة مشاكل إرسال عبر SMTP إلى خوادمنا، تحقق من مقال معالجة مشاكل SMTP. لاختبار اتصال SMTP الأساسي، يمكنك أيضًا تحقق من اتصالات SMTP باستخدام جلسات telnet اليدوية.

استنادًا إلى أفضل ممارسات الأمن، قامت SparkPost بتحديث جميع إصدارات TLS الأقدم باستثناء v1.2 وما فوق. إذا كنت تريد معرفة ما إذا كان نظامك متوافقًا، فإن SWAKS يسمح لك باختبار إصدارات TLS والشفرات المحددة.

swaks 
  -s smtp.sparkpostmail.com:587 
  --tls 
  -f me@from.com 
  -t them@recipient.com 
  --auth-user SMTP_Injection 
  --auth-password "YOUR_API_KEY" 
  -tlsp tlsv1_2 
  --tls-cipher ECDHE-RSA-AES128-GCM-SHA256

في هذا المثال، نحن نستخدم "tlsv1_2" ولكن يمكنك تغيير ذلك إلى "tlsv1_1" واستخدامه على نطاقات أخرى لملاحظة توافقها.

ماذا لو كنت تريد قياس الوقت الذي يستغرقه خادم بريد للاستجابة؟ يمكن لـ SWAKS المرور عبر دورة SMTP والانسحاب في بعض النقاط دون إرسال رسالة، ويمكنك قياسها باستخدام الأمر "time" الذي يظهر في نهاية الإخراج:

$ time swaks -s 127.0.0.1 
  -f sender@from.com 
  -t them@recipient.com 
  test 
  --quit-after RCPT
=== Trying 127.0.0.1:25...
=== Connected to 127.0.0.1.
...
 -> RCPT TO:<them@recipient.com>
<- 250 2.1.5 <them@recipient.com> ok
 -> QUIT
<

كما وعدت، إذا وصلت إلى هذا الحد فإن المكافأة هي استخدام ملف إعداد لتحديد المعلمات الافتراضية:

$ cd $HOME
$ vim .swaksrc

انسخ والصق هذا في ملف .swaksrc:

--from swakstest@jasdevism.com
-h-From: "Jas Swaks" <swakstest@jasdevism.com>
-s 127.0.0.1
--body "This is a test!"
--to jsingh@sparkpost.com

بمجرد حفظه، ما عليك سوى كتابة "swaks" وسوف يملأ كل شيء ويرسله في طريقه السعيد! ويمكنك الأفضل من ذلك بتجاوزه بإضافة رغبتك على خط الأوامر، على سبيل المثال إذا أردت مستلم مختلف:

swaks -t recipient@somewherelse.com

أخبار أخرى

اقرأ المزيد من هذه الفئة

A person is standing at a desk while typing on a laptop.

المنصة الأصلية للذكاء الاصطناعي التي تتوسع مع عملك.

A person is standing at a desk while typing on a laptop.

المنصة الأصلية للذكاء الاصطناعي التي تتوسع مع عملك.

A person is standing at a desk while typing on a laptop.

المنصة الأصلية للذكاء الاصطناعي التي تتوسع مع عملك.