Greetings;
I have successfully implemented the code below from a an earlier post about Emailing files from Arduino.
/*
Email client sketch for IDE v1.0.5 and w5100/w5200
Posted 7 May 2015 by SurferTim
*/
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
// this must be unique
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x59, 0x67 };
// change network settings to yours
IPAddress ip( 192, 168, 2, 2 );
IPAddress gateway( 192, 168, 2, 1 );
IPAddress subnet( 255, 255, 255, 0 );
char server[] = "mail.smtp2go.com";
int port = 2525;
File myFile;
EthernetClient client;
void setup()
{
Serial.begin(115200);
pinMode(53,OUTPUT);
digitalWrite(53,HIGH);
Ethernet.begin(mac);
delay(2000);
Serial.println(F("Ready. Press 'e' to send."));
Serial.println(Ethernet.localIP());
if (!SD.begin(53))
{
Serial.println("SD initialization failed!");
}
else
{
Serial.println("SD initialization done.");
}
}
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"));
// replace 1.2.3.4 with your Arduino's ip
client.println("EHLO 192.168.10.105");
if (!eRcv()) return 0;
//Serial.println(F("Sending auth login"));
client.println("auth login");
if (!eRcv()) return 0;
//Serial.println(F("Sending User"));
// Change to your base64 encoded user
client.println(F("User"));
if (!eRcv()) return 0;
//Serial.println(F("Sending Password"));
// change to your base64 encoded password
client.println(F("PassWord"));
if (!eRcv()) return 0;
// change to your email address (sender)
//Serial.println(F("Sending From"));
client.println("MAIL From: <user@isp.co>");
if (!eRcv()) return 0;
// change to recipient address
//Serial.println(F("Sending To"));
client.println("RCPT To: <rec@rec.com>");
if (!eRcv()) return 0;
//Serial.println(F("Sending DATA"));
client.println("DATA");
if (!eRcv()) return 0;
//Serial.println(F("Sending email"));
// change to recipient address
client.println("To: JR <rec@rec.com>");
// change to your address
client.println("From: PumpRoom <sender@isp.com>");
client.println("Subject: Pump Room Report");
//------------------------------------------------------------------------
client.write("MIME-Version: 1.0\r\n");
client.write("Content-Type: Multipart/mixed; boundary=frontier\r\n\r\n");
client.write("--frontier\r\n");
client.write("Content-Type: text/plain\r\n\r\n");
client.write("This is a csv file from Orientes!\r\n");
client.write("--frontier\r\n");
client.write("Content-Type: text/plain\r\n");
// client.write("Content-Type: image/jpeg\r\n");
client.write("Content-Disposition: attachment; filename=poolLog.csv\r\n");
// this is where you would send your file
int clientCount = 0;
myFile = SD.open("poolLog.csv");
int myint;
if(myFile)
{
while (myFile.available())
{
myint = myFile.read();
client.write(myint);
Serial.write(myint);
}
client.print("\r\n");
myFile.close();
}
else {
Serial.println(F("File open failed"));
}
// client.write("This is a test\r\n");
client.write("--frontier--\r\n");
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 nothing received for 10 seconds, timeout
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 nothing received for 10 seconds, timeout
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"));
}
Two Questions:
1- Which part of the code, past "Subject: xxxx" needs to change in order to send file1.csv, followed by file2.csv, followed by...? Reason for asking, smtp2go.com has a limited amount of emails I can send every month, and I don't want to pay for a subscription.
2- Has anything changed with potentially emailing ability, so I can use Gmail?
Cheers;