//www.jopapa.me 2019
//Manda email si cambia nuestra IP. Para ESP32.
#include "ESP32_MailClient.h"
#define WIFI_SSID "Jopapa"
#define WIFI_PASSWORD "EstaEsMiClave"
String miIP="0.0.0.0";  //Para que en primera conexión nos diga la que tenemos
String ip;
//The Email Sending data object contains config and data to send
SMTPData smtpData;

//Callback function to get the Email sending status
void sendCallback(SendStatus info);

void setup(){
  Serial.begin(115200);
  Serial.print("Connecting to AP");
  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();
}

void loop(){
  ip = getIp();
  if (ip != miIP){
   Serial.println("Atencion, tu IP ha cambiado"); 
   Serial.println("Tu anterior IP era: "+ miIP);
   miIP=ip;
   Serial.println("Tu actual IP es: " + miIP);
   //Enviar e-mail con la nueva IP
   enviarMail();
  }       
//  Crear aquí un delay o un millis para chekear la IP, por x horas. En esta caso cada 12 horas.
for (int Hours = 0; Hours < 12; Hours++) {          //Creates 12 hours
  for (int Minutes = 0; Minutes < 60; Minutes++) {   //Creates 1 hour
   Serial.print(Hours); Serial.print(":"); Serial.println(Minutes);
   for (int Seconds = 0; Seconds < 60; Seconds++) {  //Creates 1 minute
    delay(1000);                                     //Creates 1 second
   }
  }
}
}

void enviarMail(){
  Serial.println("Sending email...");
  //Set the Email host, port, account and password
  smtpData.setLogin("smtp.gmail.com", 587, "pepito@gmail.com", "2018pepito2019");
  //Set the sender name and Email
  smtpData.setSender("ESP32", "pepito@gmail.com");
  //Set Email priority or importance High, Normal, Low or 1 to 5 (1 is highest)
  smtpData.setPriority("High");
  //Set the subject
  smtpData.setSubject("Tu nueva IP es " + miIP);
  //Set the message - normal text or html format
  smtpData.setMessage(miIP, true);
  //Add recipients, can add more than one recipient
  smtpData.addRecipient("pepito@gmail.com");
  smtpData.setSendCallback(sendCallback);
  //Start sending Email, can be set callback function to track the status
  if (!MailClient.sendMail(smtpData))
    Serial.println("Error sending Email, " + MailClient.smtpErrorReason());
  //Clear all data from Email object to free memory
  smtpData.empty(); 
}


//Callback function to get the Email sending status
void sendCallback(SendStatus msg){
  //Print the current status
  Serial.println(msg.info());
  //Do something when complete
  if (msg.success()){
    Serial.println("----------------");
  }
}


String getIp(){
  WiFiClient client;
  if (client.connect("api.ipify.org", 80)) { //Nos da nuestra IP en forma texto plano
   Serial.println("Conectado a ipify.org");
   client.println("GET / HTTP/1.0");
   client.println("Host: api.ipify.org");
   client.println();
  }else {
   Serial.println("Conexión a ipify.org fallida");
   return String();
  }
  delay(5000);
  String line;
  while(client.available()){
   line = client.readStringUntil('\n');
  }
  return line;
}

Saber nuestra IP por Mail


         Si tenemos dispositivos en casa como camaras IP, automatismos gobernados por Internet, NAS que contienen datos, etc; el manejar  o acceder a ellos es fácil si tenemos una IP fija. Si no disponemos de ella por precio o disponibilidad, hay otros métodos que no son fáciles de configurar o también son de pago.

         Esta solución nos envia un correo electrónico cada vez que cambia nuestra IP y así poder acceder a casa sin problemas. Solo necesitamos un ESP32 y una cuenta de Gmail. La libreria ESP32_Mail_Client-2.1.1 nos facilita mucho la programación y además podemos usar la misma cuenta de gmail para enviar y recibir ese correo.

          El programa conecta con nuestro router y usa un servicio gratuito ipify.org que nos devuelve nuestra IP. Si es diferente a la que ya teniamos antes, entonces nos manda un e-mail a nuestro teléfono con la nueva.

          Solo tenemos que determinar con que frecuencia queremos que el programa haga esa verificación.
Menu