Aspose.Email  لـ سي++

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

كيفية استخدام C ++ و SMTP لإرسال بريد إلكتروني مع مرفق أو iCalendar

  تحميل محاكمة مجانية

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

لذلك، إذا كنت قد أنجزت جميع الأعمال التحضيرية، فقد حان الوقت لبدء إرسال الرسائل. يمكنك استخدام Aspose.Email لمكتبة C ++ لهذا الغرض. فكر في أبسط مثال:

auto smtpClient = MakeObject<SmtpClient>(u"smtp.gmail.com", u"login", u"password", SecurityOptions::SSLAuto);
smtpClient->Send(u"login@gmail.com", u"to@gmail.com", u"subject", u"body");

استخدم هذا الخيار إذا كنت تريد إرسال بريد إلكتروني نصي بسيط.

إرسال بريد إلكتروني مع المرفقات باستخدام C ++

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

auto message = MakeObject<MailMessage>(u"login@gmail.com", u"to@aspose.com", u"subject", u"body");
smtpClient->Send(message);

تعتبر فئة MailMessage أداة رائعة. يسمح لك بإرسال الرسائل المخزنة بتنسيقات ملفات EML و MSG (تنسيق رسائل Outlook). يمكنك أيضًا استخدام هذا التنسيق لإرسال المرفقات أو حتى كائنات iCalendar لإعداد الحضور أو تأكيده. يتيح لك MailMessage ضبط قائمة المستلمين ومستلمي Cc و Bcc بدقة. يمكنك إرسال بريد إلكتروني بترميز HTML. يمكنك أيضًا وضع علامة على الرسالة بعلامات مختلفة قبل إرسالها وإضافة البيانات الوصفية وتشفيرها وما إلى ذلك.

لماذا يختار الناس Aspose.Email لـ C ++ لإرسال البريد الإلكتروني؟

نعم، Aspose.Email لـ C ++ ليس مجرد أداة مساعدة لإرسال رسائل البريد الإلكتروني. هذا هو الحل الشامل الذي يوفر دعمًا شاملاً لمجموعة متنوعة من المهام المتعلقة بإرسال البريد الإلكتروني واستلامه وتخزينه ومعالجته. ويمكنك التأكد من أنك لن تواجه قيود المكتبة عند تنفيذ هذه المهام. لقد درسنا هذا الموضوع لسنوات عديدة ونعمل باستمرار على توسيع وظائفه.

ربما تكون قد صادفت مكتبات صغيرة ظهرت مؤخرًا نسبيًا. إنها تحل بسهولة وبشكل طبيعي مشكلة بسيطة يواجهها العديد من المستخدمين. ولكن بمجرد أن تتنحى جانبًا قليلاً، ستدرك أنه من خلال الاستمرار في استخدام هذه المكتبة البسيطة، فإنك تضطر إلى تسييج العكازات باستمرار، وبعض الوحدات لتجاوز قيود المكتبة، والمحولات المصممة لتكوين صداقات مع مكتبتك الصغيرة مع مكتبة صغيرة أخرى، وما إلى ذلك، والآن، لم يعد حلك الصغير الأنيق أنيقًا بعد الآن. علاوة على ذلك، تقوم بإرساله إلى الخادم، حيث يقوم بانتظام وباستمرار بإطلاق النار على نفسه، لأنه لم يقم أحد باختبار مثل هذه المجموعة من العكازات وعمليات الدمج من قبلك. وبغض النظر عن مدى صعوبة المحاولة، عاجلاً أم آجلاً، ستظل تواجه قيود هذه المكتبة. وعليك أن تبحث عن شيء جديد. لذلك، عندما يتعلق الأمر بالعمل مع البريد الإلكتروني، قد ترغب في التفكير في Aspose.Email لـ C ++!

نحن لا نقدم لك مجرد عميل للعمل مع SMTP. أولاً، إنه بعيد عن البروتوكول الوحيد لإرسال رسائل البريد الإلكتروني باستخدام C ++. مع منتجنا، يمكنك إرسال رسائل البريد الإلكتروني باستخدام Exchange EWS وMicrosoft Graph!

لقد أخبرناك بالفعل عن إمكانيات MailMessage في هذه المقالة. ولكن هذه ليست الأداة الوحيدة لإعداد الرسائل لإرسالها. يمكنك:

  • إنشاء رسائل من قالب باستخدام TemplateEngine؛
  • تفريغ الحاويات بأحرف، وذلك بفضل دعم تنسيقات OST و PST و MBOX؛
  • قم بتنزيل الرسائل من صندوق البريد باستخدام دعم بروتوكولات IMAP و POP3 و Exchange EWS و WebDAV، بالإضافة إلى Microsoft Graph؛
  • تحويل رسائل البريد الإلكتروني من صيغة إلى أخرى.

يمكنك بسهولة تلقي رسالة باستخدام بروتوكول Exchange Ews. سيكون بصيغة MAPI. ولكن يمكنك بسهولة تحويله إلى تنسيق EML، مما سيسمح لك بإرساله لاحقًا عبر بروتوكول SMTP. في الوقت نفسه، يمكنك تغيير قائمة المستلمين أو مرسل الرسالة في أي وقت.

كيف يعمل إرسال بريد إلكتروني باستخدام C ++ و SMTP؟

تكوين بروتوكول SMTP

في اللحظة التي تقوم فيها بإنشاء مثيل لفئة SmtpClient، لا يحدث شيء خاص. يمكنك ببساطة تحديد عدد الإعدادات التي ستسمح لك بالاتصال بخادم SMTP في المستقبل لإرسال الرسائل. كل السحر يحدث في المكالمة الأولى إلى send طريقة. ماذا يحدث في هذه اللحظة؟

في الواقع، كل هذا يتوقف على الإعدادات التي حددتها. دعونا نفكر في العديد من الخيارات. لنفترض أنك حددت مضيف الخادم ولكنك لم تحدد المنفذ ونوع التشفير. في هذه الحالة، ستبدأ آلية الاختيار التلقائي للإعدادات. تتكون هذه الآلية من محاولات متتالية للاتصال بخادم SMTP باستخدام المنافذ القياسية وخوارزميات التشفير المقابلة. أولاً، تتم محاولة الاتصال بالخادم عبر قناة مشفرة. ولكن في حالة فشلها، ستحاول الآلية إنشاء اتصال غير مشفر. إذا كنت لا تريد استخدام الإصدار غير المشفر من البروتوكول، فحدد SecurityOptions.SSL_AUTO إعداد. يتيح لك هذا الإعداد أيضًا تحديد إعدادات الخادم، ولكن يتحقق فقط من القنوات المشفرة.

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

بالمناسبة، تجدر الإشارة إلى أن SmtpClient الخاص بنا (مثل جميع العملاء الآخرين لمكتبتنا) يمكنه الاتصال بخادم SMTP من خلال وكيل. يمكنك أيضًا تحديد إعدادات خادم الوكيل أثناء التهيئة.

تخويل عميل SMTP

يدعم SmtpClient أكثر من مجرد طرق اتصال مختلفة. كما أنه يدعم طرق التفويض المختلفة. على سبيل المثال، يمكنك استخدام آلية OAuth. للقيام بذلك، نقدم العديد من الأدوات في وقت واحد.

بادئ ذي بدء، هو TokenProvider. هذه هي الفئة التي تحتوي على جميع البيانات اللازمة لتخزين وتحديث رمز OAuth. في هذه الحالة، يجب إجراء تفويض OAuth بنفسك وحفظ جميع المعلومات الضرورية المستلمة من خادم OAuth. يلعب RefreshToken دورًا رئيسيًا هنا. هذا رمز إضافي صادر عن خادم التفويض، إلى جانب AccessToken. الفرق بينهما هو أن AccessToken، كقاعدة عامة، صالح فقط لفترة زمنية معينة. في حين أن RefreshToken صالح لفترة أطول، أو حتى إلى أجل غير مسمى (حتى يقوم المستخدم بإبطاله). بفضل RefreshToken، يمكن لفئة TokenProvider دائمًا تحديث accessToken إذا لم يعد الأخير صالحًا.

خيار آخر هو واجهة iTokenProvider. في هذه الحالة، لا يمكنك تنفيذ آلية OAuth بنفسك فحسب، بل يمكنك أيضًا تمريرها إلى SMTPClient بحيث تستخدمها بنفسها حسب الحاجة.

تجدر الإشارة إلى أن آلية OAuth ليست ضرورية دائمًا. في بعض الأحيان يكون تسجيل الدخول باستخدام اسم مستخدم وكلمة مرور أسهل بكثير. ولهذا، لا تحتاج إلى إعادة تكوين حساب بريدك الإلكتروني على الإطلاق، ورفض التفويض الثنائي، وما إلى ذلك، فهناك حل أكثر أمانًا - هذه كلمة مرور منفصلة للتطبيق. للاستفادة من هذه الميزة، يجب أن تبحث في إعدادات حساب البريد الإلكتروني الخاص بك. على الأرجح، سيتم إنشاء كلمة مرور التطبيق تلقائيًا عند إعداده في حسابك. لا تنس حفظه في مكان ما. نوصي أيضًا بتقييد أذونات التطبيق الخاص بك قدر الإمكان أثناء التهيئة. بالطبع، إذا تمكن المهاجم من الوصول إلى كلمة المرور هذه، فلن يتمكن من تخصيص حسابك، ولكن لا يزال بإمكانه القيام بالكثير من الأشياء غير السارة. وهنا لا يمكنك فعل أي شيء، لأن كلمة المرور هي الشيء الوحيد الذي يحمي بياناتك من المتسللين. بشكل عام، تعتبر الأداة مريحة للغاية، ولكنها تقلل من أمان حسابك، واستخدمها على مسؤوليتك الخاصة.

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

لذلك، تم تأسيس الاتصال بالخادم، وكان التفويض ناجحًا. لقد حان الوقت لإرسال الرسائل. للإرسال، يتم استخدام كائن من فئة MailMessage. من الناحية الفنية، يمكنك فقط تمرير جميع البيانات الضرورية إلى طريقة الإرسال. ولكن، في الواقع، سيظل يتم جمعها في كائن MailMessage. علاوة على ذلك، بفضل قدرة فئة MailMessage على التسلسل إلى تنسيق EML، نحصل على تدفق البيانات الضروري الذي يمكن تمريره إلى خادم SMTP الخاص بنا. وبالتالي، نعطي الخادم أمرًا لإرسال خطاب ونقل جميع محتويات الرسالة إليه في شكل بيانات نصية. إذا تم إرسال البيانات الثنائية في الرسالة، على سبيل المثال، في شكل ملفات مرفقة، يتم ترميز هذه البيانات بتنسيق Base64، وتشير البيانات الوصفية للحرف إلى أن المستلم سيحتاج إلى فك تشفيرها مرة أخرى. يمكن لخادم SMTP التحقق من صحة الرسالة المستلمة (على سبيل المثال، التحقق من حقل FROM بحساب المرسل على الخادم)، بالإضافة إلى استكمال البيانات الوصفية للرسالة وفقًا لتقديره. بعد ذلك، سيرسل الخادم البريد الإلكتروني إلى المستلمين، وسيتم الحصول على قائمة بها أيضًا من البيانات الوصفية للبريد الإلكتروني.