-
-
Save tnedev/11321023 to your computer and use it in GitHub Desktop.
/* | |
Tihomir Nedev | |
April 2014 | |
Change the values for the network setting. | |
Change the emails. NB! Some sorvers won't accept email for unedentified devices as Arduino. | |
Hardware: Arduino board + Ethernet shield | |
*/ | |
#include <SPI.h> | |
#include <Ethernet.h> | |
// Set the panic button pin | |
byte panicButton = 2; | |
boolean statusCheck=false; | |
// this must be unique | |
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x59, 0x67 }; | |
// change network settings to yours | |
IPAddress ip( 192, 168, 100, 19 ); | |
IPAddress gateway( 192, 168, 100, 1 ); | |
IPAddress subnet( 255, 255, 255, 0 ); | |
// change server to your email server ip or domain | |
// IPAddress server( 1, 2, 3, 4 ); | |
char server[] = "mail.example.com"; | |
EthernetClient client; | |
void setup() | |
{ | |
Serial.begin(9600); | |
pinMode(4,OUTPUT); | |
digitalWrite(4,HIGH); | |
Ethernet.begin(mac, ip, gateway, gateway, subnet); | |
delay(2000); | |
Serial.println(F("Ready.")); | |
pinMode(panicButton, INPUT); | |
} | |
void loop() | |
{ | |
if(digitalRead(panicButton)==HIGH && statusCheck==false) | |
{ | |
if(sendEmail()) Serial.println(F("Email sent")); | |
else Serial.println(F("Email failed")); | |
statusCheck = true; | |
} | |
else if (digitalRead(paniceButton)==LOW) | |
{ | |
statusCheck = false; | |
} | |
} | |
byte sendEmail() | |
{ | |
byte thisByte = 0; | |
byte respCode; | |
if(client.connect(server,25)) { | |
Serial.println(F("connected")); | |
} else { | |
Serial.println(F("connection failed")); | |
return 0; | |
} | |
if(!eRcv()) return 0; | |
// change to your public ip | |
client.println(F("helo 1.2.3.4")); | |
if(!eRcv()) return 0; | |
Serial.println(F("Sending From")); | |
// change to your email address (sender) | |
client.println(F("MAIL From: <[email protected]")); | |
if(!eRcv()) return 0; | |
// change to recipient address | |
Serial.println(F("Sending To")); | |
client.println(F("RCPT To: <[email protected]")); | |
if(!eRcv()) return 0; | |
Serial.println(F("Sending DATA")); | |
client.println(F("DATA")); | |
if(!eRcv()) return 0; | |
Serial.println(F("Sending email")); | |
// change to recipient address | |
client.println(F("To: You <[email protected]>")); | |
// change to your address | |
client.println(F("From: Me <[email protected]>")); | |
client.println(F("Subject: Panic Alarm!\r\n")); | |
client.println(F("The panic button was pressed!!!")); | |
client.println(F(".")); | |
if(!eRcv()) return 0; | |
Serial.println(F("Sending QUIT")); | |
client.println(F("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")); | |
} |
Hi guys, has any one tried to use this code to send an email using his/her gmail or yahoo account, and it has worked.
Am new here and really need to use this code for my new Project. Thanks.
Hi guys, I cant connect to the internet. I put
// change server to your email server ip or domain
// IPAddress server( 1, 2, 3, 4 );
char server[] = "Smtp.gmail.com"; because im sending from an gmail.com account
but Im not sre what to put in
// change to your public ip
client.println(F("192, 168, 2, 1"));
please if somebody can help me thanks.
m8a2 Write the arduino ip
nice proyect
Hi all,
I tried the sketch with a gmail account, and got the following in the Serial Monitor:
Ready.
connected
220 smtp.gmail.com ESMTP t30sm8108718wra.52 - gsmtp
250 smtp.gmail.com at your service
Sending From
530 5.7.0 Must issue a STARTTLS command first. t30sm8108718wra.52 - gsmtp
221 2.0.0 closing connection t30sm8108718wra.52 - gsmtp
disconnected
Email failed
The t30... code is different every time. But the bottom line is that GMAIL apparently requires an additional command: STARTTLS.
Meaning: The smtp server is saying it won't accept plain text connections.
How would I activate this every time when a switch would off?
This is such an awesome and memory-cheap way of sending email - I'm working it into an ethernet relay controller sketch I found elsewhere, works every time.
I have it talking to a local unauthenticated, IP limited postfix server that collects mail for the network. No issues at all.
Line 53 has a typo "paniceButton"