سنتعلم في هذا المقال كيفية إرسال رسائل بريد إلكتروني تحتوي على نص كتابي وكيفية إرسال الملحقات مثل الصور والملفات النصية باستخدام لوحة ESP8266 NodeMCU عن طريق خادم SMTP. كما سوف نبرمج لوحة ESP8266 NodeMCU باستخدام arduino core (واجهة برمجة تطبيقات لمجموعة محددة من الرقائق).

سنغطي في هذا المقال المواضيع التالية:
● إرسال ESP8266 NodeMCU رسائل بريد إلكتروني (نصوص كتابية ونصوص HTML).
● إرسال ESP8266 NodeMCU رسائل بريد إلكتروني مع ملحقات (صور وملفات نصية .txt).

مقدمة عن خادم SMTP

برتوكول  SMTP: بروتوكول نقل الرسائل البسيط، وهو بروتوكول معياري للإنترنت لنقل البريد. لذلك يجب أن نوصل لوحة ESP8266 NodeMCU ب خادم SMTP عند استخدامها لإرسال رسائل البريد الإلكتروني.

مكتبة ESP-Mail-Client

سنستخدم هذه المكتبة لإرسال رسائل البريد الإلكتروني باستخدام لوحة ESP8266 NodeMCU. إذ تسمح المكتبة للوحة بإرسال واستقبال رسائل البريد الإلكتروني مع ملحقات أو دونها عن طريق خوادم SMTP وIMAP.
سنستخدم SMTP لإرسال رسائل البريد الإلكتروني مع أو دون ملحقات. إذ يمكننا حفظ الملف المرسل بالبريد الإلكتروني في نظام ملفاتESP8266 (SPIFFS أو LittleFS) أو على كرت ذاكرة microSD (لن نشرح هذه الطريقة في هذا المقال).

تثبيت مكتبة ESP-Mail-Client

يجب تحميل المكتبة بداية، لكن لا يمكن تثبيت هذه المكتبة عن طريق مدير مكتبة برنامج

Arduino IDE (Arduino IDE Library Manager).

لذلك اتبع الخطوات التالية لتثبيت المكتبة:

  1. أنقر هنا  لتحميل المجلد المضغوط للمكتبة.
  2. في برنامج Arduino IDE، اذهب إلى مخطط -> إضافة مكتبة -> إضافة مكتبة من ملف مضغوط.
  3.  اختر الملف المضغوط الذي حملناه في الخطوة 1.
    إذا اخترنا بعد ذلك: ملف-> أمثلة->  ESP-Mail-Client، ستجد العديد من الأمثلة التي يمكن أن تجربها. يمكنك أيضاً الوصول إلى الأمثلة في المكتبة على صفحة GitHub هنا .
    إذا كنت تستخدم ESP8266 with VS Code + PlatformIO، فانسخ السطر البرمجي التالي إلى ملف platformio.ini لإضافة المكتبة.

lib_deps = mobizt/ESP Mail Client @ ^1.1.7

البريد الإلكتروني للمرسل:

ننصحك بإنشاء حساب بريد إلكتروني جديد لإرسال رسائل البريد الإلكتروني، وألا تستخدم بريدك الإلكتروني الشخصي الأساسي لإرسال رسائل البريد الإلكتروني عبر ESP8266، لأنه من الممكن أن يتم حظر الحساب أو أن يٌعطل لمدة مؤقتة إذا حدث خطأ ما في شيفرتك البرمجية أو إذا قمت بالعديد من الطلبات بالخطأ.

سنستخدم حساب Gmail جديد لإرسال رسائل بريد إلكترونية، ولكن يمكنك استخدام أي مزود بريد آخر مثل Yahoo أو Outlook.

إنشاء حساب بريد إلكتروني مرسل جديد

أنشئ حساب بريد إلكتروني جديد لإرسال رسائل البريد الإلكتروني باستخدام ESP8266. إذا أردت استخدام حساب Gmail

اضغط هنا  لإنشاء حساب جديد.

صورة للصفحة الرئيسية في موقع Gmail
الصفحة الرئيسية في موقع Gmail، مصدر الصورة: (موقع randomnerdtutorials )

إنشاء كلمة مرور للتطبيق

نحتاج لإنشاء كلمة مرور للتطبيق لتتمكن لوحة ESP32 من إرسال رسائل البريد الإلكتروني مستخدمةً حساب Gmail الخاص بك، وهي رمز مؤلف من 16 خانة رقمية تمنح الإذن بالوصول إلى حساب Gmail الخاص بك للأجهزة والتطبيقات الأقل أماناً.
يمكن استخدام كلمة المرور فقط مع الحسابات المفعّلة لخاصية التأكيد عبر خطوتين.

  1.  افتح حساب غوغل الخاص بك.
  2.  اختر الأمان (security) في لوحة التنقل.
  3.  تحت تسجيل الدخول، اختر التأكيد بخطوتين-> ابدأ.
  4.  اتبع خطوات التي تظهر على الشاشة.

بعد تفعيل التأكيد بخطوتين يمكنك إنشاء كلمة مرور للتطبيق.

  1.  افتح حسابك في غوغل .
  2.  اختر الأمان (security) في لوحة التنقل.
  3. تحت تسجيل الدخول، اختر كلمة مرور التطبيق.
صورة صفحة ضمن موقع Gmail تظهر تفعيل التأكيد بخطوتين وظهور خيار كلمة مرور التطبيق
صفحة ضمن موقع Gmail تظهر تفعيل التأكيد بخطوتين وظهور خيار كلمة مرور التطبيق، مصدر الصورة: موقع randomnerdtutorials

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

صفحة ضمن موقع Gmail تظهر إنشاء كلمة المرور، موقعrandomnerdtutorials
صفحة ضمن موقع Gmail تظهر إنشاء كلمة المرور، موقع randomnerdtutorials

الآن، أنشأنا كلمة مرور التطبيق التي سنستخدمها على كود ESP32 لإرسال رسائل بريد إلكترونية.

 صفحة ضمن موقع Gmail تظهر اسم كلمة المرور المنشأة، مصدر الصورة: موقعrandomnerdtutorials )
صفحة ضمن موقع Gmail تظهر اسم كلمة المرور المنشأة، مصدر الصورة: موقع randomnerdtutorials

إذا كنت تستخدم مزود بريد إلكتروني آخر، فتحقق مما تحتاج إلى القيام به للسماح بالتطبيقات الأقل أمانا. يجب عليك العثور على التعليمات من خلال بحث سريع على غوغل “مزود البريد الإلكتروني الذي تستخدمه + السماح بالتطبيقات الأقل أماناً”.

إعدادات خادم SMTP في Gmail

إذا كنت تستخدم حساب Gmail، فهذه تفاصيل خادم SMTP:

  •  خادم SMTP: smtp.gmail.com
  •  اسم مستخدم SMTP: عنوان Gmail
  • كلمة مرور SMTP: كلمة مرور Gmail
  •  منفذ SMTP (TLS): 587
  •  منفذ SMTP (SSL): 465
  •  مطلوب SMTP TLS/SSL: نعم

إعدادات خادم SMTP في Outlook

بالنسبة لحسابات Outlook، هذه هي إعدادات خادم SMTP:

  •  خادم SMTP: smtp.office365.com
  •  اسم مستخدم SMTP: عنوان البريد في Outlook
  •  كلمة مرور SMTP: كلمة مرور Outlook الخاصة بك
  •  منفذ SMTP: 587
  •  SMTP TLS/SSL مطلوب : نعم

إعدادات خادم SMTP Live أو Hotmail

بالنسبة لحسابات Live أو حسابات Hotmail، هذه هي إعدادات خادم SMTP:

  • خادم SMTP: smtp.live.com
  •  اسم مستخدم SMTP: عنوان البريد الإلكتروني Live / Hotmail
  •  كلمة مرور SMTP: كلمة مرور Windows Live / Hotmail الخاصة بك
  •  منفذ SMTP: 587
  • SMTP TLS/SSL مطلوب: نعم

إذا كنت تستخدم مزود بريد إلكتروني آخر، فستحتاج إلى البحث عن إعدادات خادم SMTP الخاص به.

الآن كل شيء جاهز لبدء إرسال رسائل البريد الإلكتروني باستخدام ESP8266 .

في Arduino IDE، يمكنك اختيار الملفات-> أمثلة-> ESP-Mail-Client وتجربة الأمثلة التي تحتاج إلى إدراج تفاصيل البريد الإلكتروني (حسابات المرسل والمستلم) وإعدادات خادم SMTP وSSID وكلمة المرور.

إرسال بريد إلكتروني يحتوي على نص HTML أو نص بسيط باستخدام ESP8266

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

تحتاج إلى إدراج بيانات الشبكة والبريد الإلكتروني للمرسل والمستلم وتفاصيل خادم SMTP والرسالة.

طريقة عمل الكود البرمجي

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

أولاً، أدخل بيانات الشبكة في الأسطر التالية:

#define WIFI_SSID “REPLACE_WITH_YOUR_SSID”
#define WIFI_PASSWORD “REPLACE_WITH_YOUR_PASSWORD”

أدخل إعدادات خادم SMTP، إذا كنت تستخدم حساب Gmail لإرسال رسائل إلكترونية، فالإعدادات كالتالي:

#define SMTP_HOST “smtp.gmail.com”
#define SMTP_PORT 465

إدراج بيانات تسجيل الدخول البريد الإلكتروني للمرسل (البريد الإلكتروني كاملاً وكلمة المرور)

#define AUTHOR_EMAIL “[email protected]
#define AUTHOR_PASSWORD “YOUR_EMAIL_PASS”

أدخل البريد الإلكتروني للمستلم:

#define RECIPIENT_EMAIL “[email protected]

أدخل ترويسة الرسالة في الأسطر الآتية في setup  اسم المرسل والبريد الإلكتروني للمرسل وموضوع البريد الإلكتروني واسم المستلم والبريد الإلكتروني للمستلم

/* Set the message headers */
message.sender.name = “ESP”;
message.sender.email = AUTHOR_EMAIL;
message.subject = “ESP Test Email”;
message.addRecipient(“Sara”, RECIPIENT_EMAIL);

في الأسطر الآتية، أدخل محتوى الرسالة (نص) في متغير textMsg:

//Send raw text message
String textMsg = “Hello World! – Sent from ESP board”; message.text.content = textMsg.c_str();
message.text.charSet = “us-ascii”;
message.text.transfer_encoding = Content_Transfer_Encoding::enc_7bit;

إذا رغبت في إرسال نص HTML بدلاً من نص كتابي، أزل التعليق على الأسطر الآتية – يجب إدراج نص HTML في متغير htmlMsg.

/*Send HTML message*/
/*String htmlMsg = ” <div style=\”color:#2f4468;\”><h1>Hello World!</h1><p>- Sent from ESP board</p></div>”;
message.html.content = htmlMsg.c_str();
message.html.content = htmlMsg.c_str();
message.text.charSet = “us-ascii”;
message.html.transfer_encoding = Content_Transfer_Encoding::enc_7bit;*/

أخيراً، ترسل السطور البرمجية أدناه الرسالة:

if (!MailClient.sendMail(&smtp, &message))
Serial.println(“Error sending Email, ” + smtp.errorReason());

توضيح

حمّل الكود على ESP8266، بعد التحميل افتح شاشة العرض التسلسلية “Serial Monitor ” بمعدل بود 115200.
إذا سارت الأمور كما هو متوقع، فيجب أن تتلقى رسالة مماثلة في الشاشة التسلسلية.

صورة تظهر النتيجة على الشاشة التسلسلية،
النتيجة على الشاشة التسلسلية، مصدر الصورة: موقع randomnerdtutorials

تحقق من حساب بريدك الإلكتروني، يجب تلقي رسالة إلكترونية من لوحة ESP8266.

صورة تظهر وصول الرسالة الإلكترونية المرسلة،
          وصول الرسالة الإلكترونية المرسلة، مصدر الصورة: موقع randomnerdtutorials

إذا قمت باختيار إرسال رسالة بنص HTML، فهكذا ستبدو الرسالة:

صورة تظهر وصول الرسالة الإلكترونية المرسلة ذات نص HTML،
وصول الرسالة الإلكترونية المرسلة ذات نص HTML، مصدر الصورة: موقع randomnerdtutorials

إذا فعلّت خيار رسالة النص المكتوب، فهكذا ستبدو الرسالة:

صورة تظهر وصول الرسالة الإلكترونية المرسلة كنص كتابي،
وصول الرسالة الإلكترونية المرسلة كنص كتابي، مصدر الصورة: موقع randomnerdtutorials

 

إرسال المرفقات عبر البريد الإلكتروني باستخدام ESP8266 (Arduino IDE)

يوضح هذا القسم كيفية إرسال المرفقات في رسائل البريد الإلكترونية المرسلة بواسطة ESP8266 ، وكيفية إرسال ملفات .txt أو صور.png. وقد يكون هذا مفيداً لإرسال ملف .txt مع قراءات المستشعر في الساعات القليلة الماضية أو في تطبيقات أخرى.
يجب حفظ الملفات المُراد إرسالها في نظام ملفاتESP8266 (SPIFFS أو LittleFS) ، كما يمكن أيضاً إرسال المرفقات المحفوظة على كرت microSD، لكننا لن نشرح هذا الموضوع في هذا المقال.

إعداد نظام الملفات

لإرسال الملفات عبر البريد الإلكتروني، يجب حفظها في نظام الملفات ESP8266 ، يمكن استخدام SPIFFS أو LittleFS. لتحميل الملفات إلى نظام الملفات باستخدام Arduino IDE، تحتاج إلى تثبيت إضافة برمجيةPlugin لمحمل نظام الملفات.

إذا كنت تستخدم VS Code + PlatformIO، فاتبع المقال التالي لمعرفة كيفية تحميل الملفات إلى LittleFS:
● ESP8266 NodeMCU مع VS Code و PlatformIO: تحميل الملفات إلى نظام الملفات (LittleFS)

ملاحظة: لاستخدام LittleFS مع مكتبة ESP-Mail-Client، تحتاج إلى تحرير ملفات المكتبة (ESP_Mail_FS.h) لاستخدام نظام الملفات المحدد. اقرأ القسم الآتي إذا كنت ترغب في استخدام LittleFSKK وإلا انتقل إلى القسم الذي يليه.

تحرير ملفات المكتبة لاستخدام LittleFS

SPIFFS هو نظام الملفات الافتراضي المستخدم من قبل مكتبة ESP-Mail-Client. إذا كنت ترغب في استخدام SPIFFS، يمكنك تخطي هذا القسم، وإلا فتابع القراءة لمعرفة كيفية تحرير المكتبة لاستخدام LittleFS بدلاً من ذلك.

لاستخدام LittleFS يجب تحرير ملف ESP_Mail_FS.h كما يلي:

انتقل إلى مجلد تثبيت مكتبات Arduino. في حالتنا، يقع في المسار التالي (قد يكون مسارك مشابهاً):
C:\Users\USERNAME\Documents\Arduino\libraries
انتقل إلى ESP-Mail-Client-master > src وافتح ملف ESP_Mail_FS.h باستخدام محرر نصوص.
حدد موقع القسم التالي.

صورة تظهر ملف ESP_Mail_FS.h ،
ملف ESP_Mail_FS.h، مصدر الصورة: موقع randomnerdtutorials

استبدله بما يلي:

#if defined(ESP32)
#define ESP_Mail_DEFAULT_FLASH_FS SPIFFS
#endif

#if defined(ESP8266)
#include #define ESP_Mail_DEFAULT_FLASH_FS LittleFS
#endif

وبهذه الطريقة، فإنه يستخدم نظام الملفات SPIFFS افتراضياً لـ ESP32 وLittleFS لـ ESP8266 .

صورة توضح كيف يستخدم يستخدم نظام الملفات SPIFFS افتراضياً ل ESP32 وLittleFS ل ESP8266 ،
صورة توضح كيف يستخدم يستخدم نظام الملفات SPIFFS افتراضياً ل ESP32 وLittleFS ل ESP8266 ، مصدر الصورة: موقعrandomnerdtutorials

بعد حفظ الملف أصبحت تستخدم المكتبة LittleFS كنظام الملفات الافتراضي ل ESP8266 .

تحميل الملفات إلى نظام الملفات
  • أنشئ ملف Arduino جديد واحفظه.
  • انتقل إلى ملف-> إظهار مجلد الملفات (Sketch-> Show sketch folder).
  • أنشئ مجلد يدعى data داخل مجلد ملفات Arduino.
  • انقل ملف .png وملف .txt إلى مجلد data.

ملاحظة:

باستخدام الكود البرمجي الافتراضي، يجب تسمية الملفات باسم image.png text_file.txt أو يمكنك تعديل الكود البرمجي لاستيراد ملفات باسم مختلف.
يمكنك تنزيل هذه الملفات: هنا

صورة توضح الملفات المرسلة، مصدر الصورة:
صورة توضح الملفات المرسلة، مصدر الصورة: موقع randomnerdtutorials

يجب أن تبدو بنية المجلد كما يلي (رابط لتنزيل مجلد المشروع): هنا

صورة توضح بنية المجلد،
صورة توضح بنية المجلد، مصدر الصورة: موقعrandomnerdtutorials

بعد نقل الملفات إلى مجلد data، في Arduino IDE انتقل إلى أدوات-> تحميل ESP8266 Sketch Data أو تحميل ESP8266 LittleFS Data اعتماداً على نظام الملفات، وانتظر حتى يتم تحميل الملفات.

صورة توضح خيار تحميل الملفات،
خيار تحميل الملفات، مصدر الصورة: موقع randomnerdtutorials

يجب أن تحصل على رسالة نجاح في نافذة تصحيح الأخطاء. إذا تحملت الملفات بنجاح، فانتقل إلى القسم التالي.

صورة توضح رسالة النجاح،
رسالة النجاح، مصدر الصورة: موقع randomnerdtutorials

الكود البرمجي

يرسل الكود البرمجي التالي رسالة بريد إلكترونية تحتوي على ملف نصي وصورة مرفقة، عليك تأكد من إدراج إعدادات البريد الإلكتروني للمرسل بالإضافة إلى البريد الإلكتروني للمستلم قبل تحميل الكود.

تحميل الكود: هنا

شرح آلية عمل الكود البرمجي:

يشبه هذا الكود البرمجي إلى حد كبير الكود السابق، لذلك سنلقي نظرة على الأجزاء ذات الصلة بإرسال المرفقات.
في ()setup، تحتاج إلى تهيئة نظام الملفات: SPIFFS أو LittleFS.

if (!LittleFS.begin()) }
// Uncomment to use SPIFFS
//if (!SPIFFS.begin())

{
Serial.println(“An error has occurred while mounting the filesystem”);
}
else

{
Serial.println(“Filesystem mounted successfully”);
}

تحتاج إلى إنشاء مرفق على النحو التالي:

/* The attachment data item */
SMTP_Attachment att;

ثم أضف تفاصيل المرفق: اسم الملف ونوع MIME ومسار الملف ونوع تخزين الملفات وترميز النقل. سنرسل ملف الصورة في السطور التالية.

att.descr.filename = “image.png”;
att.descr.mime = “image/png”;
att.file.path = “/image.png”;
att.file.storage_type = esp_mail_file_storage_type_flash; att.descr.transfer_encoding = Content_Transfer_Encoding::enc_base64;

وأخيراً، أضف المرفق إلى الرسالة:

message.addAttachment(att);

إذا كنت ترغب في إرسال المزيد من المرفقات، عليك استدعاء السطر التالي بعد إضافة المرفق السابق:

message.resetAttachItem(att);

ثم أدخل تفاصيل المرفق الآخر (ملف نصي):

att.descr.filename = “text_file.txt”;
att.descr.mime = “text/plain”;

;”att.file.path = “/text_file.txt
att.file.storage_type = esp_mail_file_storage_type_flash; att.descr.transfer_encoding = Content_Transfer_Encoding::enc_base64;

وأضف هذا المرفق إلى الرسالة:

message.addAttachment(att);

أخيراً تحتاج فقط إلى إرسال الرسالة كما فعلت مع المثال السابق:

if (!MailClient.sendMail(&smtp, &message, true))
Serial.println(“Error sending Email, ” + smtp.errorReason());

توضيح

بعد تحميل الكود البرمجي افتح الشاشة التسلسلية بمعدل 115200، إذا سار كل شيء كما هو متوقع، فيجب تلقي رسالة مماثلة على الشاشة التسلسلية.

صورة توضح الرسالة التي يجب أن تظهر على شاشة العرض التسلسلي لتدل على نجاح العملية،
الرسالة التي يجب أن تظهر على شاشة العرض التسلسلي لتدل على نجاح العملية، مصدر الصورة: موقع randomnerdtutorials

إذا انتقلت إلى البريد الوارد، فيجب أن تتلقى الرسالة مع المرفقين

صورة توضح وصول الرسالة مع المرفقين،
وصول الرسالة مع المرفقين، مصدر الصورة: موقع randomnerdtutorials

الخاتمة

شرحنا في هذا المقال كيفية إرسال لوحة ESP8266 NodeMCU رسائل البريد الإلكتروني عن طريق خادم SMTP وكيفية إرسال نص HTML ونص بسيط ومرفقات، وكل ما عليك  الآن هو تعديل الكود وتضمينه في مشاريعك.

نأمل أن تكون قد وجدت هذا المقال مثيراً للاهتمام.


المصدر: هنا

ترجمة: غدير سليمان، مراجعة: رلا  دنوره، تدقيق لغوي: حنين غالية، تصميم: علي العلي، تحرير: نور شريفه