Go Down

Topic: Mail Versand mit ESP8266 (Read 5453 times) previous topic - next topic

Holger_mb

Hallo,
Ich habe folgenden Code zum Versenden vom Mails mit dem ethernet shield w5100. Funktioniert sehr gut. ( über smtp2go.com)
Code: [Select]
#include <SPI.h>
    #include <Ethernet.h>
    
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    byte ip[] = { 192, 168, 178, 101 };
    
    char server[] = "smtpcorp.com";
    int port = 2525;
    
    EthernetClient client;
    
    void setup()
    {
      Serial.begin(9600);
      pinMode(4,OUTPUT);
      digitalWrite(4,HIGH);
      Ethernet.begin(mac, ip);
      delay(2000);
      Serial.println(F("Ready. Press 'e' to send."));
    }
    
    void loop()
    {
      byte inChar;
    
      inChar = Serial.read();
    
      if(inChar == 'e')
      {
          if(sendEmail()) Serial.println(F("Email sent"));
          else Serial.println(F("Email failed"));
      }
    }
    
    byte sendEmail()
    {
      byte thisByte = 0;
      byte respCode;
    
      if(client.connect(server,port) == 1) {
        Serial.println(F("connected"));
      } else {
        Serial.println(F("connection failed"));
        return 0;
      }
    
      if(!eRcv()) return 0;
    
      Serial.println(F("Sending hello"));
    
      client.println("EHLO 1.2.3.4");
      if(!eRcv()) return 0;
    
      Serial.println(F("Sending auth login"));
      client.println("auth login");
      if(!eRcv()) return 0;
    
      Serial.println(F("………………………"));
    
      client.println("…………………………..");
    
      if(!eRcv()) return 0;
    
      Serial.println(F("…………………."));
    
      client.println("…………………..");
    
      if(!eRcv()) return 0;
    
         Serial.println(F("Sending From"));
      client.println("MAIL From: <……………..>");
      if(!eRcv()) return 0;
    
      Serial.println(F("Sending To"));
      client.println("RCPT To: <……………………………….>");
      if(!eRcv()) return 0;
    
      Serial.println(F("Sending DATA"));
      client.println("DATA");
      if(!eRcv()) return 0;
    
      Serial.println(F("Sending email"));
    
       client.println("To: …………………………………………>");
    
        client.println("From: …………………………………………..>");
    
      client.println("Subject: Arduino email test\r\n");
    
      client.println("This is from my Arduino! super");
    
      client.println(".");
    
      if(!eRcv()) return 0;
    
      Serial.println(F("Sending QUIT"));
      client.println("QUIT");
      if(!eRcv()) return 0;
    
      client.stop();
    
      Serial.println(F("disconnected"));
    
      return 1;
    }
    
    byte eRcv()
    {
      byte respCode;
      byte thisByte;
      int loopCount = 0;
    
      while(!client.available()) {
        delay(1);
        loopCount++;
    
          if(loopCount > 10000) {
          client.stop();
          Serial.println(F("\r\nTimeout"));
          return 0;
        }
      }
    
      respCode = client.peek();
    
      while(client.available())
      {  
        thisByte = client.read();    
        Serial.write(thisByte);
      }
    
      if(respCode >= '4')
      {
        efail();
        return 0;  
      }
    
      return 1;
    }
    
    
    void efail()
    {
      byte thisByte = 0;
      int loopCount = 0;
    
      client.println(F("QUIT"));
    
      while(!client.available()) {
        delay(1);
        loopCount++;
    
        if(loopCount > 10000) {
          client.stop();
          Serial.println(F("\r\nTimeout"));
          return;
        }
      }
    
      while(client.available())
      {  
        thisByte = client.read();    
        Serial.write(thisByte);
      }
    
      client.stop();
    
      Serial.println(F("disconnected"));
    }


Die Arduino IDE mit dem ESP8266 funktionirt bei mir. Folgenden WEB Server in einen ESP8266 habe ich laufen zum schalten von Pins.

Code: [Select]
#include <ESP8266WiFi.h>

const char* ssid = "FRITZ!Box Fon WLAN 7170";
const char* password = "64pok46535kda45";

unsigned long ulReqcount;
unsigned long ulReconncount;

WiFiServer server(80);

void setup()
{
  ulReqcount=0;
  ulReconncount=0;
  
   pinMode(2, OUTPUT);
  digitalWrite(2, 0);
  
  Serial.begin(9600);
  delay(1);
  
    WiFi.mode(WIFI_STA);
  WiFiStart();
}

void WiFiStart()
{
  ulReconncount++;
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  server.begin();
  Serial.println("Server started");

  Serial.println(WiFi.localIP());
}

void loop()
{

  if (WiFi.status() != WL_CONNECTED)
  {
    WiFiStart();
  }

  WiFiClient client = server.available();
  if (!client)
  {
    return;
  }

  Serial.println("new client");
  unsigned long ultimeout = millis()+250;
  while(!client.available() && (millis()<ultimeout) )
  {
    delay(1);
  }
  if(millis()>ultimeout)
  {
    Serial.println("client connection time-out!");
    return;
  }
  
   String sRequest = client.readStringUntil('\r');
 
  client.flush();
  
  if(sRequest=="")
  {
    Serial.println("empty request! - stopping client");
    client.stop();
    return;
  }
  
  String sPath="",sParam="", sCmd="";
  String sGetstart="GET ";
  int iStart,iEndSpace,iEndQuest;
  iStart = sRequest.indexOf(sGetstart);
  if (iStart>=0)
  {
    iStart+=+sGetstart.length();
    iEndSpace = sRequest.indexOf(" ",iStart);
    iEndQuest = sRequest.indexOf("?",iStart);
    
       if(iEndSpace>0)
    {
      if(iEndQuest>0)
      {
        // there are parameters
        sPath  = sRequest.substring(iStart,iEndQuest);
        sParam = sRequest.substring(iEndQuest,iEndSpace);
      }
      else
      {
        // NO parameters
        sPath  = sRequest.substring(iStart,iEndSpace);
      }
    }
  }

  if(sParam.length()>0)
  {
    int iEqu=sParam.indexOf("=");
    if(iEqu>=0)
    {
      sCmd = sParam.substring(iEqu+1,sParam.length());
      Serial.println(sCmd);
    }
  }

  if(sPath!="/")
  {
    sResponse="<html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL was not found on this server.</p></body></html>";
    
    sHeader  = "HTTP/1.1 404 Not found\r\n";
    sHeader += "Content-Length: ";
    sHeader += sResponse.length();
    sHeader += "\r\n";
    sHeader += "Content-Type: text/html\r\n";
    sHeader += "Connection: close\r\n";
    sHeader += "\r\n";
  }

  else
  {
    ulReqcount++;
    sResponse  = "<html><head><title>Demo f&uumlr ESP8266 Steuerung</title></head><body>";
    sResponse += "<font color=\"#000000\"><body bgcolor=\"#d0d0f0\">";
    sResponse += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=yes\">";
    sResponse += "<h1>Demo f&uumlr ESP8266 Steuerung</h1>";
    sResponse += "Funktion 1 schaltet GPIO2 und erzeugt eine serielle Ausgabe.<BR>";
    sResponse += "Funktion 2 erzeugt nur eine serielle Ausgabe.<BR>";
    sResponse += "<FONT SIZE=+1>";
    sResponse += "<p>Funktion 1 <a href=\"?pin=FUNCTION1ON\"><button>einschalten</button></a>&nbsp;<a href=\"?pin=FUNCTION1OFF\"><button>ausschalten</button></a></p>";
    sResponse += "<p>Funktion 2 <a href=\"?pin=FUNCTION2ON\"><button>einschalten</button></a>&nbsp;<a href=\"?pin=FUNCTION2OFF\"><button>ausschalten</button></a></p>";
    
     if (sCmd.length()>0)
    {
      sResponse += "Kommando:" + sCmd + "<BR>";
      
      if(sCmd.indexOf("FUNCTION1ON")>=0)
      {
        digitalWrite(2, 1);
      }
      else if(sCmd.indexOf("FUNCTION1OFF")>=0)
      {
        digitalWrite(2, 0);
      }
    }
    
    sResponse += "<FONT SIZE=-2>";
    sResponse += "<BR>Aufrufz&auml;hler=";
    sResponse += ulReqcount;
    sResponse += " - Verbindungsz&auml;hler=";
    sResponse += ulReconncount;
    sResponse += "<BR>";
    sResponse += "Stefan Thesen 04/2015<BR>";
    sResponse += "</body></html>";
    
    sHeader  = "HTTP/1.1 200 OK\r\n";
    sHeader += "Content-Length: ";
    sHeader += sResponse.length();
    sHeader += "\r\n";
    sHeader += "Content-Type: text/html\r\n";
    sHeader += "Connection: close\r\n";
    sHeader += "\r\n";
  }
  
  client.print(sHeader);
  client.print(sResponse);
  
  client.stop();
  Serial.println("Client disonnected");
}


Aber ich bin nicht in der Lage den Mail Versand (über smtp2go.com)  in den Code für den Web Server des ESP8266 einzufügen. Ich brauche Hilfe. oder einen Vorschlag für des Versenden von Mails (über smtp2go.com) mit dem ESP8266 in der Arduino IDE. Vielen Dank

Holger_mb

Noch zur Erklärung:
Der code für den Mailversand für SMTP2GO ist von hier  http://playground.arduino.cc/Code/Email .
Dieser funktioniert bei mir mit dem Ethernet Shield w5100 sehr gut.

Diesen möchte ich für den ESP8266 anpassen. Hier scheitere ich. Den ESP8266 habe ich in die Arduino IDE eingebunden. Mit einigen Beispielen für den ESP8266 aus der Arduino IDE habe ich experimentiert.
Ich komme nicht weiter.

Grüße Holger Weiß


Holger_mb

Der Mail Versand geht jetzt super. Den code von http://forum.arduino.cc/index.php?topic=328663.0 habe ich angepasst und es funktioniert super.

vielen Dank für den Tipp


Go Up