إرسال البريد الإلكتروني باستخدام C++: libcurl وعملاء SMTP

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

إرسال البريد الإلكتروني باستخدام C++: نظرة عامة على المكتبات والأدوات

يُعد إرسال البريد الإلكتروني إحدى المهام الأساسية للعديد من التطبيقات: من أنظمة المراقبة إلى إشعارات المستخدمين. في لغة C++، يمكن حل هذه المهمة بعدة طرق - من الاستخدام المباشر للمقابس (sockets) إلى المكتبات القوية التي تدعم التشفير و MIME والمرفقات. في هذه المقالة، سنستعرض أفضل الأدوات لإرسال البريد الإلكتروني باستخدام C++ وسنعرض أمثلة على الكود.



لماذا C++ لإرسال البريد الإلكتروني؟

تمنحك لغة C++ تحكمًا كاملاً في اتصالات الشبكة والأداء والذاكرة. ومع ذلك، لا تحتوي المكتبة القياسية للغة C++ على أدوات مدمجة للعمل مع بروتوكولات البريد (SMTP، POP3، IMAP). لذلك، يستخدم المطورون إما مكتبات خارجية أو يقومون بتنفيذ البروتوكول يدويًا عبر المقابس. سنركز على الحلول الجاهزة التي توفر الوقت وتضمن الاستقرار.



المكتبات الرئيسية لإرسال البريد الإلكتروني باستخدام C++

  • libcurl - المكتبة الأكثر شيوعًا عبر المنصات لنقل البيانات. تدعم SMTP و SMTP مع SSL/TLS والمصادقة ومرفقات MIME.
  • VMime - مكتبة متخصصة للعمل مع البريد الإلكتروني. دعم كامل لـ MIME وتشفير S/MIME والرؤوس المخصصة وجميع بروتوكولات البريد.
  • c-icap و libESMTP - مكتبات منخفضة المستوى، موجهة لجلسات SMTP.
  • Boost.Asio + تنفيذ SMTP خاص - لمن يريد أقل عدد من التبعيات ومستعد لكتابة البروتوكول يدويًا.

في هذه المقالة، سنركز بالتفصيل على libcurl، لأنها الأكثر شمولاً واستخدامًا على نطاق واسع.



تثبيت libcurl

للبدء في العمل مع libcurl، يجب تثبيتها:

  • لينكس (Ubuntu/Debian): sudo apt install libcurl4-openssl-dev
  • macOS: brew install curl
  • ويندوز: قم بتنزيل الملفات الثنائية المجمعة مسبقًا من الموقع الرسمي أو استخدم vcpkg: vcpkg install curl


مثال 1: إرسال بريد إلكتروني بسيط عبر Gmail (SSL)

في هذا المثال، يتم استخدام libcurl لإرسال رسالة عبر خادم SMTP لـ Gmail مع تشفير SSL.

#include <stdio.h>#include <string.h>#include <curl/curl.h>

int main(void) { CURL *curl; CURLcode res;

curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init();

if(curl) { // إعدادات SMTP curl_easy_setopt(curl, CURLOPT_URL, "smtps://smtp.gmail.com:465"); curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL); curl_easy_setopt(curl, CURLOPT_USERNAME, "بريدك@gmail.com"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "كلمة_مرور_التطبيق");

// المرسل والمستلم curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "<بريدك@gmail.com>"); struct curl_slist *recipients = NULL; recipients = curl_slist_append(recipients, "<المستلم@example.com>"); curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);

// نص الرسالة const char *payload_text = "From: اسمك <بريدك@gmail.com>\\r" "To: المستلم <المستلم@example.com>\\r" "Subject: رسالة اختبار من C++\\r" "\\r" "مرحباً! هذه الرسالة أُرسلت باستخدام libcurl بلغة C++.\\r";

curl_easy_setopt(curl, CURLOPT_READDATA, payload_text); curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);

// التنفيذ res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "خطأ: %s", curl_easy_strerror(res)); else printf("تم إرسال الرسالة!");

curl_slist_free_all(recipients); curl_eas

توصيات