إرسال البريد الإلكتروني بلغة C++: نظرة عامة على المكتبات وأمثلة عملية
يُعد إرسال البريد الإلكتروني إحدى المهام القياسية في تطبيقات الخوادم والتطبيقات المكتبية. على الرغم من أن لغة C++ لا تحتوي على دعم مدمج للعمل مع بروتوكولات البريد، إلا أن هناك العديد من المكتبات الناضجة التي تسمح بدمج إرسال البريد الإلكتروني (بما في ذلك المرفقات والتشفير TLS/SSL) في مشروعك. في هذه المقالة، سنستعرض ثلاثة أساليب رئيسية: استخدام libcurl، ومكتبة VMime، وPOCO C++ Libraries.
1. إرسال البريد الإلكتروني باستخدام libcurl
libcurl هي مكتبة قوية متعددة المنصات لنقل البيانات عبر بروتوكولات مختلفة، بما في ذلك SMTP وSMTPS وSMTP مع STARTTLS. وهي جزء من مشروع cURL ومتاحة تقريبًا لجميع أنظمة التشغيل.
تثبيت libcurl
على Ubuntu/Debian:
sudo apt-get install libcurl4-openssl-devعلى macOS (عبر Homebrew):
brew install curlفي Windows، يمكنك تنزيل ملفات DLL المجمعة مسبقًا أو تجميعها عبر vcpkg.
مثال: رسالة بسيطة بدون مرفقات
يتصل الكود التالي بخادم SMTP (Gmail SMTP مع SSL)، ويُصادق، ويرسل رسالة نصية.
#include <iostream>#include <string>#include <curl/curl.h>
int main() { CURL *curl = curl_easy_init(); if (!curl) return 1;
// إعدادات SMTP Gmail curl_easy_setopt(curl, CURLOPT_URL, "smtps://smtp.gmail.com:465"); curl_easy_setopt(curl, CURLOPT_USERNAME, "بريدك_الإلكتروني@gmail.com"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "كلمة_مرور_التطبيق_الخاصة_بك");
// بيانات الرسالة const char *payload_text = "To: recipient@example.com\\r" "From: بريدك_الإلكتروني@gmail.com\\r" "Subject: رسالة اختبار من C++\\r" "\\r" "مرحبًا! تم إرسال هذه الرسالة باستخدام libcurl.\\r";
curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "بريدك_الإلكتروني@gmail.com"); struct curl_slist *recipients = NULL; recipients = curl_slist_append(recipients, "recipient@example.com"); curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients); curl_easy_setopt(curl, CURLOPT_READDATA, payload_text);
// الإرسال CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) std::cerr << "خطأ: " << curl_easy_strerror(res) << std::endl;
curl_slist_free_all(recipients); curl_easy_cleanup(curl); return 0;}ميزات libcurl
- دعم SMTP وSMTPS (SSL/TLS) وSTARTTLS.
- إمكانية إرسال المرفقات عبر تنسيق MIME (يدويًا أو باستخدام
curl_mime). - تحكم منخفض المستوى — تقوم بتكوين الرؤوس ونص الرسالة يدويًا.
- توثيق ممتاز ودعم مجتمعي.
2. مكتبة VMime
VMime هي مكتبة C++ متخصصة للعمل مع البريد الإلكتروني. توفر واجهة برمجة تطبيقات عالية المستوى لإنشاء الرسائل وتحليلها وإرسالها مع دعم MIME والمرفقات وجميع بروتوكولات البريد الحديثة.
تثبيت VMime
يُوصى بتجميعها من المصدر باستخدام CMake:
git clone https://github.com/kisli/vmime.gitcd vmimemkdir build && cd buildcmake .. -DVMIME_BUILD_SAMPLES=ONmake -j4sudo make installللعمل مع SSL، ستحتاج إلى مكتبة libgsasl وlibssl-dev.
مثال: إرسال رسالة مع مرفق
#include <vmime/vmime.hpp>#include <iostream>
int main() { try { // إنشاء جلسة vmime::shared_ptr<vmime::net::session> session = vmime::net::session::create();
// إعداد النقل (SMTP مع SSL) vmime::shared_ptr<vmime::net::transport> trans