Bu yazımızda, bir SMTP sunucusu kullanarak ESP8266 NodeMCU kartına nasıl mail atacağımızı öğreneceğiz.. ESP8266 NodeMCU kartını Arduino IDE ile programlayacağız. Başlayalım
SMTP Sunucularının Tanıtılması
SMTP , Basit Posta İletişim Protokolü anlamına gelir ve e-posta iletimi için bir internet standardıdır. ESP8266 kullanarak e-posta göndermek için, onu bir SMTP Sunucusuna bağlamanız gerekir.
ESP-Mail-Client Kütüphanesi
ESP8266 NodeMCU kartıyla mail göndermek için ESP-Mail-Client kütüphanesini kullanacağız . Bu kütüphane, ESP8266’nın SMTP ve IMAP sunucuları aracılığıyla e-postalar gönderip almasına olanak tanır.
ESP-Mail-Client Kütüphanesini Yükleme
Bu yazıya devam etmeden önce, ESP-Mail-Client kütüphanesini yüklemeniz gerekir . Bu kitaplık, Arduino IDE kütüphane Yöneticisi aracılığıyla kurulamaz. Kütüphaneyi kurmak için bu adımları izleyin:
- ESP-Mail-Client kütüphanesi.zip klasörünü indirmek için burayı tıklayın.
- Arduino IDE’nizde Sketch > Include Library > Add .ZIP Library’ye gidin.
- Az önce indirdiğiniz .zip dosyasını seçin .
Ardından, Dosya > Örnekler > ESP-Mail-Client’e giderseniz deneyebileceğiniz birkaç örnek bulacaksınız. Örneklere GitHub sayfasından da erişebilirsiniz— buradan .
NOT: ESP8266’yı VS Code + PlatformIO ile kullanıyorsanız , aşağıdakileri bilgisayarınıza kopyalamanız gerekir.
lib_deps = mobizt/ESP Mail Client @ ^1.1.7
Gönderen E-postası (Yeni Hesap)
E-postaları ana kişisel e-posta adresinize göndermek için yeni bir e-posta hesabı oluşturmanızı öneririz. ESP8266 yoluyla e-posta göndermek için ana kişisel e-postanızı kullanmayın . Kodunuzda bir şeyler ters giderse veya yanlışlıkla çok fazla istekte bulunursanız, banlanabilir veya hesabınızı geçici olarak devre dışı bırakabilirsiniz.
E-postaları göndermek için yeni oluşturulmuş bir Gmail.com hesabını kullanacağız, ancak başka herhangi bir e-posta sağlayıcısını da kullanabilirsiniz. Alıcı e-postası, herhangi bir sorun olmadan kişisel e-postanız olabilir.
Gönderen E-posta Hesabı Oluşturma
ESP8266 ile e-posta göndermek için yeni bir e-posta hesabı oluşturun. Bir Gmail hesabı kullanmak istiyorsanız, yeni bir tane oluşturmak için bu bağlantıya gidin .
2 Adımlı Doğrulamayı Açma ve Uyulama Şifresi Oluşturma
ESP8266’nin Gmail hesabınızı kullanarak e-posta gönderebilmesi için bir uygulama şifresi oluşturmanız gerekir. Uygulama Şifresi, daha az güvenli bir uygulama veya cihazın Google Hesabınıza erişmesine izin veren 16 basamaklı bir şifredir. Burada uygulama şifreleriyle oturum açma hakkında daha fazla bilgi edinebilirsiniz .
Bir uygulama şifresi yalnızca 2 adımlı doğrulamanın açık olduğu hesaplarda kullanılabilir .
2 Adımlı Doğrulamayı Açmak İçin
- Google Hesabınızı açın .
- Gezinme panelinde Güvenlik öğesini seçin .
- “Google’da oturum açma”nın altında 2 Adımlı Doğrulama > Başlayın ‘ı seçin .
- Ekrandaki adımları izleyin.
2 adımlı doğrulamayı etkinleştirdikten sonra bir uygulama şifresi oluşturabilirsiniz
Uygulama Şifresi Oluşturma.
- Google Hesabınızı açın .
- Gezinme panelinde Güvenlik öğesini seçin .
- “Google’da oturum açma”nın altında, Uygulama Şifreleri’ni seçin .
Uygulama seç alanında posta öğesini seçin . Cihaz için Diğer’i seçin ve ona bir isim verin, örneğin ESP8266. Ardından, Oluştur’a tıklayın .
ESP32 veya ESP8266 ile e-posta göndermek için kullanacağınız parolayı içeren bir pencere açılacaktır. Bu şifreyi kaydedin (hatırlamanıza gerek kalmayacağını söylese de) çünkü daha sonra ihtiyacınız olacak. Kodlarımızda bu mail hesabına bağlanmak için bu şifreyi kullanacağız.
Yani kısacası bu tarz uygulamalar için kendi mail şifremizi değil, Aşağıdaki 16 basamaklı şifremizi kullanmamız gerekiyor.
Gmail SMTP Sunucu Ayarları
Bir Gmail hesabı kullanıyorsanız, bunlar SMTP Sunucusu ayrıntılarıdır:
- SMTP Sunucusu: smtp.gmail.com
- SMTP kullanıcı adı: Gmail adresini tamamlayın
- SMTP şifresi: Gmail şifreniz
- SMTP bağlantı noktası (TLS): 587
- SMTP bağlantı noktası (SSL): 465
- SMTP TLS/SSL gerekli: evet
Outlook SMTP Sunucusu Ayarları
Outlook hesapları için SMTP Sunucusu ayarları şunlardır:
- SMTP Sunucusu: smtp.office365.com
- SMTP Kullanıcı Adı: Outlook e-posta adresini tamamlayın
- SMTP Parolası: Outlook parolanız
- SMTP Bağlantı Noktası: 587
- SMTP TLS/SSL Gerekli: Evet
Canlı veya Hotmail SMTP Sunucu Ayarları
Canlı veya Hotmail hesapları için SMTP Sunucusu ayarları şunlardır:
- SMTP Sunucusu: smtp.live.com
- SMTP Kullanıcı Adı: Canlı/Hotmail e-posta adresini tamamlayın
- SMTP Parolası: Windows Live Hotmail parolanız
- SMTP Bağlantı Noktası: 587
- SMTP TLS/SSL Gerekli: Evet
Başka bir e-posta sağlayıcı kullanıyorsanız, SMTP Sunucusu ayarlarını aramanız gerekir. Artık ESP8266’nız ile e-posta göndermeye başlamak için her şeye sahipsiniz.
Arduino IDE’nizde Dosya > Örnekler > ESP-Mail-Client’a gidebilir ve sağlanan örneklerle deneyler yapabilirsiniz; e-posta ayrıntılarınızı (gönderen ve alıcı hesapları), SMTP sunucu ayarlarınızı ve SSID’nizi ve şifrenizi girmeniz gerekir.
ESP8266 ile HTML veya Ham Metin içeren bir E-posta Gönderin
Aşağıdaki kod, SMTP Sunucusu aracılığıyla HTML veya ham metin içeren bir e-posta gönderir. Örnek olarak, ESP8266 başlatıldığında bir kez bir e-posta gönderir. Tekrar mail göndermek isterseniz “reset” tuşuna basabilirsiniz Ardından, kodu değiştirebilmeli ve kendi projelerinize entegre edebilmelisiniz.
Kodu henüz yüklemeyin, sizin için çalışması için bazı değişiklikler yapmanız gerekiyor.
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP_Mail_Client.h>
#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"
#define SMTP_server "smtp.gmail.com"
#define SMTP_Port 465
/* The sign in credentials */
#define AUTHOR_EMAIL "YOUR_EMAIL@XXXX.com"
#define AUTHOR_PASSWORD "Uygulama Sifrenizi Yazin"
/* Recipient's email*/
#define RECIPIENT_EMAIL "RECIPIENTE_EMAIL@XXXX.com"
SMTPSession smtp;
void setup(){
Serial.begin(115200);
Serial.println();
Serial.print("Connecting...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(200);
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println();
smtp.debug(1);
ESP_Mail_Session session;
session.server.host_name = SMTP_server ;
session.server.port = SMTP_Port;
session.login.email = sender_email;
session.login.password = sender_password;
session.login.user_domain = "";
/* Declare the message class */
SMTP_Message message;
message.sender.name = "ESP8266";
message.sender.email = sender_email;
message.subject = "ESP8266 Testing Email";
message.addRecipient("Microcontrollerslab",Recipient_email);
//Send HTML message
String htmlMsg = "<div style=\"color:#0000FF;\"><h1>Hello Microcontrollerslab!</h1><p>This is an HTML email 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;
/*
//Send simple text message
String textMsg = "Hello Microcontrollerslab! This is a simple text sent from ESP board";
message.text.content = textMsg.c_str();
message.text.charSet = "us-ascii";
message.text.transfer_encoding = Content_Transfer_Encoding::enc_7bit; */
if (!smtp.connect(&session))
return;
if (!MailClient.sendMail(&smtp, &message))
Serial.println("Error sending Email, " + smtp.errorReason());
}
void loop(){
}
Gönderen e-postasını, SMTP Sunucusu ayrıntılarını, alıcıyı ve mesajı ayarlamanın yanı sıra ağ kimlik bilgilerinizi girmeniz gerekir.
Kod Nasıl Çalışır?
Bu kod, kütüphane tarafından sağlanan bir örnekten uyarlanmıştır. Örnek, her bir kod satırının ne yaptığını anlamanız için iyi yorumlanmıştır. İhtiyacınız olan veya değiştirmeniz gerekebilecek ilgili parçalara bir göz atalım.
İlk olarak, ağ kimlik bilgilerinizi aşağıdaki satırlara girin:
#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"
SMTP sunucu ayarlarınızı girin. E-postaları göndermek için bir Gmail hesabı kullanıyorsanız, ayarlar şunlardır:
#define SMTP_HOST "smtp.gmail.com"
#define SMTP_PORT 465
Gönderen e-posta oturum açma kimlik bilgilerini girin (e-posta ve şifrenin tamamı)
#define AUTHOR_EMAIL "YOUR_EMAIL@XXXX.com"
#define AUTHOR_PASSWORD "YOUR_EMAIL_PASS"
Alıcı e-postasını ekleyin:
#define RECIPIENT_EMAIL "RECIPIENTE_EMAIL@XXXX.com"
Aşağıdaki kod bölümü, ESP8266 kartımızı, ağ kimlik bilgilerini yukarıda belirttiğimiz yerel ağa bağlayacaktır. WiFi.begin() işlevini kullanacağız. Argümanlar, kodda daha önce tanımladığımız SSID ve şifre olacaktır.
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(200);
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Aşağıda gösterildiği gibi sunucunun detaylarını belirterek oturumumuzu yapılandıracağız. Tüm parametreler daha önce kodda tanımlanmıştır.
session.server.host_name = SMTP_server ;
session.server.port = SMTP_Port;
session.login.email = sender_email;
session.login.password = sender_password;
session.login.user_domain = "";
Mesaj Başlığını Ayarlama
Aşağıdaki kod satırları, mesaj başlığının içeriğini belirtir. Gönderenin adı, gönderenin e-posta adresi ve e-postanın konusundan oluşacaktır. Konuyu tercihinize göre verebilirsiniz.
message.sender.name = "ESP8266";
message.sender.email = sender_email;
message.subject = "ESP8266 Testing Email";
message.addRecipient("Mekinfo",Recipient_email);
HTML mesaj gövdesi
Aşağıdaki kod satırları HTML metin gövdesini tanımlar. Başlık için ‘Merhaba Mekinfo!’ belirtiyoruz. Bir sonraki satır “Bu bir ESP8266 kartından gönderilen Maildir!” şeklinde olacaktır. Bu mesaj da belirttiğimiz gibi mavi renkte olacaktır. Tercihinize göre kendi HTML metninizi ve ayarlarınızı ekleyebilirsiniz.
String htmlMsg = "<div style=\"color:#0000FF;\"><h1>Merhaba Mekinfo!</h1><p>Bu bir ESP8266 kartından gönderilen Maildir!</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;
Basit Metin Mesajı gövdesi
E-postayı basit bir metin olarak göndermek istiyorsanız, aşağıda verilen kod bloğunun yorumunu kaldırın. Yukarıda açıklanan HTML metin bloğunu yorumlayın. Aynı mesajı belirteceğiz ancak bu sefer basit bir metin olarak gönderilecek.
String textMsg = "Merhaba Mekinfo!' Bu bir ESP8266 kartından gönderilen Maildir!";
message.text.content = textMsg.c_str();
message.text.charSet = "us-ascii";
message.text.transfer_encoding = Content_Transfer_Encoding::enc_7bit;
Aşağıdaki satırlar bağlantıyı başlatacak ve e-postayı gönderecektir.
if (!smtp.connect(&session))
return;
if (!MailClient.sendMail(&smtp, &message))
Serial.println("Error sending Email, " + smtp.errorReason());
Gösteri
Kodu ESP8266’nıza yükleyin. Yüklemeden sonra, Seri Monitörü 115200 baud hızında açın.
Her şey beklendiği gibi giderse, Seri Monitörde benzer bir mesaj almalısınız.
E-posta hesabınızı kontrol edin. ESP8266 kartınızdan bir e-posta almış olmalısınız.
Kaynak:
https://randomnerdtutorials.com/esp8266-nodemcu-send-email-smtp-server-arduino/
https://microcontrollerslab.com/esp8266-send-email-smtp-server-arduino-ide/
https://iotdesignpro.com/projects/how-to-send-smtp-email-using-esp8266-nodemcu