Hi, I use this code, and I have a problem.
here is Arduino code :
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {
0x1C, 0xA8, 0x55, 0x34, 0x5E, 0x1D }; //this adress i manually set in router
IPAddress ip( 192, 168, 1, 20 ); //and this
IPAddress gateway( 192, 168, 1, 1 ); //adress to my router
IPAddress subnet( 255, 255, 255, 0 ); //my subnetmask
// gmail.com email server
IPAddress server( 173, 196, 69, 27 ); //this info
int x=5000;
int y=20000;
EthernetClient client;
void setup()
{
Serial.begin(9600);
pinMode(4,OUTPUT);
digitalWrite(4,HIGH);
Ethernet.begin(mac, ip, gateway, gateway, subnet);
delay(x);
Serial.println("Ready. Press 'e' to send");
}
void loop()
{
byte inChar;
inChar = Serial.read();
if(inChar == 'e')
{
if(sendEmail()) Serial.println("Email sent");
else Serial.println("Email failed");
}
}
byte sendEmail()
{
byte thisByte = 0;
byte respCode;
if (client.connect(server,25)) {
Serial.println("connected");
}
else {
Serial.println("connection failed");
return 0;
}
if(!eRcv()) return 0;
// change this ip to your public ip
client.write("helo 9*.***.**.**\r\n"); //here I change to my public IP
if(!eRcv()) return 0;
// change this
client.write("MAIL From: <m****.s********@gmail.com>\r\n");
if(!eRcv()) return 0;
// change this
client.write("RCPT To: <milan.samardzic@gmail.com>\r\n");
if(!eRcv()) return 0;
client.write("DATA\r\n");
if(!eRcv()) return 0;
//change this
client.write("To: You <m****.s********@gmail.com>\r\n");
// change this
client.write("From: Me <m****.s********@gmail.com>\r\n");
client.write("Subject: Arduino email test\r\n");
client.write("This is from my Arduino!\r\n");
client.write(".\r\n");
if(!eRcv()) return 0;
client.write("QUIT\r\n");
if(!eRcv()) return 0;
client.stop();
Serial.println("disconnected");
return 1;
}
byte eRcv()
{
byte respCode;
byte thisByte;
while(!client.available()) delay(x);
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;
client.write("QUIT\r\n");
while(!client.available()) delay(1);
while(client.available())
{
thisByte = client.read();
Serial.write(thisByte);
}
client.stop();
Serial.println("disconnected");
}
Using nslookup I get this information about gmail.
" Non-authoritative answer: " is that problem?
> set query=any
> gmail.com
Server: UnKnown
Address: 192.168.1.1
Non-authoritative answer:
gmail.com text =
"v=spf1 redirect=_spf.google.com"
gmail.com MX preference = 5, mail exchanger = gmail-smtp-in.l.google.com
gmail.com MX preference = 10, mail exchanger = alt1.gmail-smtp-in.l.google
.com
gmail.com MX preference = 20, mail exchanger = alt2.gmail-smtp-in.l.google
.com
gmail.com MX preference = 30, mail exchanger = alt3.gmail-smtp-in.l.google
.com
gmail.com MX preference = 40, mail exchanger = alt4.gmail-smtp-in.l.google
.com
gmail.com internet address = 173.194.39.181
gmail.com internet address = 173.194.39.182
gmail.com nameserver = ns3.google.com
gmail.com nameserver = ns4.google.com
gmail.com nameserver = ns1.google.com
gmail.com nameserver = ns2.google.com
gmail.com nameserver = ns3.google.com
gmail.com nameserver = ns4.google.com
gmail.com nameserver = ns2.google.com
gmail.com nameserver = ns1.google.com
gmail-smtp-in.l.google.com internet address = 173.194.69.26
gmail-smtp-in.l.google.com AAAA IPv6 address = 2a00:1450:4008:c01::1a
alt1.gmail-smtp-in.l.google.com internet address = 74.125.25.27
alt1.gmail-smtp-in.l.google.com AAAA IPv6 address = 2a00:1450:4008:c01::1a
alt2.gmail-smtp-in.l.google.com internet address = 173.194.64.27
alt2.gmail-smtp-in.l.google.com AAAA IPv6 address = 2a00:1450:4008:c01::1b
alt3.gmail-smtp-in.l.google.com internet address = 74.125.193.26
And finally i get this on SerialPort
Ready. Press 'e' to send
//after press e
connection failed
Email failed
Some solution?
Thanks !