#ifndef __SMTP_SERVICE__H_ #define __SMTP_SERVICE__H_ #include "email.h" class SmtpService { byte* _smtp_server; unsigned int _port; void read_response(Client& client) { delay(100); while(client.available()) { const char c = client.read(); Serial.print(c); } } void send_line(Client& client, String line) { const unsigned int MAX_LINE = 1024; // had to replace 256 to 1024 char buffer[MAX_LINE]; line.toCharArray(buffer, MAX_LINE); Serial.println(buffer); client.println(buffer); read_response(client); } public: SmtpService( byte* smtp_server, const unsigned int port) : _smtp_server(smtp_server), _port(port) {} void send_email (const Email& email) { EthernetClient client; // Serial.print("Connecting..."); Serial << "Connecting..." << endl; // Serial << "_smtp_server " << (const char*) _smtp_server << " port " << (unsigned int) _port << endl; char buf[16]; sprintf(buf, "%d.%d.%d.%d", _smtp_server[0], _smtp_server[1], _smtp_server[2], _smtp_server[3]); // Serial << "_smtp_server " << String(_smtp_server[0]) << "." << String(_smtp_server[1]) << "." << String(_smtp_server[2]) << "." << String(_smtp_server[3]) << " port " << String(_port) << endl; Serial << "_smtp_server " << buf << " port " << String(_port) << endl; if(!client.connect(_smtp_server, _port)) { // Serial.println("connection failed."); Serial << "connection failed." << endl; } else { // Serial.println("Connected."); Serial << "Connected." << endl; read_response(client); send_line(client, String("ehlo ") + email.getDomain()); send_line(client, String("AUTH LOGIN")); send_line(client, email.getLogin()); send_line(client, email.getPassword()); send_line(client, String("mail from: <") + email.getFrom() + String(">")); send_line(client, String("rcpt to: <") + email.getTo() + String(">")); send_line(client, String("rcpt to: <") + email.getCc() + String(">")); send_line(client, String("data")); send_line(client, String("from: ") + email.getFrom()); send_line(client, String("to: ") + email.getTo()); send_line(client, String("subject: ") + email.getSubject()); send_line(client, String("")); send_line(client, email.getBody()); send_line(client, String(".")); send_line(client, String("quit")); // client.println("Disconnecting."); Serial << "Disconnecting." << endl; client.stop(); } } }; #endif