Pessoal,

Não encontrei nenhum topico ensinando como enviar e-mails de alerta atraves do Ethernet Shield.

Tentei alguns codigos que baixei de outros sites, mas nao consegui (tentei com o smtp do gmail). Alguem poderia ajudar?

Alguem tem algum codigo testado para me auxiliar?

Exibições: 8645

Responder esta

Respostas a este tópico

#include <SPI.h>
#include <Ethernet.h>
#include <EthernetClient.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 177);
byte server[] = { 200, 147, 99, 132 }; // Colocar o ip do servidor SMTP
//REFERENCIA
//http://pt.kioskea.net/faq/844-configuracoes-dos-servidores-pop-imap...

EthernetClient client;

void setup()
{
Ethernet.begin(mac, ip);
Serial.begin(9600);
delay(1000);
}

void loop()
{
delay(500);
Serial.println("conectando...");
if (client.connect(server, 587)) // Porta de conexao do servidor do email.
{
Serial.println("conectado!");
Serial.println("enviando email...");
client.println("HELO localhost");
recebe();
delay(100);
client.println("AUTH LOGIN");
recebe();
delay(100);
client.println("xxxxxxxxxx"); // email em base de 64
recebe();
delay(100);
client.println("xxxxxxxx"); // Senha do email em base de 64
recebe();
delay(100);
client.println("mail from: <xxxxxxxx>"); //Email remetente
recebe();
delay(100);
client.println("rcpt to: <xxxxxxx>"); // Email destinatário
recebe();
delay(100);
client.println("data");
recebe();
delay(100);
client.println("Subject: Teste de Email!"); // Assunto
recebe();
delay(100);
client.println("Testando email com arduino"); // Corpo
recebe();
delay(100);
client.println("."); // Indica fim do email.
recebe();
delay(100);
client.println();
recebe();
delay(100);
Serial.println("email enviado!");
}
}

void recebe()
{
while (client.available())
{
char c = client.read();
Serial.print(c);
}
}

Obrigado amigo!

Com esse programa foi o jeito que cheguei mais proximo de enviar um email!

Porém ele retornou alguns erros que nao soube indentificar. Enviei um texto pra serial, a cada passo do programa, pra poder identificar onde está o problema:

conectado!
enviando email...

envia HELO localhost
envia AUTH LOGIN
envia email em base 64
envia senha em base 64
envia e-mail remetente
220 mx.google.com ESMTP b17sm4968911qah.35 - gsmtp
250 mx.google.com at your service
530 5.7.0 Must issue a STARTTLS command first. b17sm4968911qah.35 - gsmtp
502 5.5.1 Unrecognized command. b17sm4968911qah.35 - gsmtp
502 5.5.1 Unrecognized command. b17sm4968911qah.35 - gsmtp
530 5.7.0 Must issue a STARTTLS command first. b17sm4968911qah.35 - gsmtp
envia e-mail destinatario
envia data
envia assunto
envia corpo
530 5.7.0 Must issue a STARTTLS command first. b17sm4968911qah.35 - gsmtp
530 5.7.0 Must issue a STARTTLS command first. b17sm4968911qah.35 - gsmtp
envia .
502 5.5.1 Unrecognized command. b17sm4968911qah.35 - gsmtp
502 5.5.1 Unrecognized command. b17sm4968911qah.35 - gsmtp
envia linha em branco
email enviado!

vc colocou seu email e senha  na base de 64?

Dae galera! Topico resolvido, com a ajuda do José Miguel.

Não estava funcionando porqueo SMTP do Gmail e do Hotmail não funcionam no Arduino. Criei um e-mail no BOL e usei o mesmo IP que o José passou. Deu certo!

Segue meu codigo abaixo, funcionando 100%. Fiz algumas alteraçoes para fins de teste. Coloquei pra ele ler a serial e enviar apenas ao receber o comando "e".

//Programa feito com base no topigo do LAGBDEGARAGEM
//http://labdegaragem.com/forum/topics/enviar-e-mail-de-alerta-com-et...

#include <SPI.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#define time 1000

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);
byte server[] = { 200, 147, 99, 132 }; // Colocar o ip do servidor SMTP

EthernetClient client;

void setup()
{
Ethernet.begin(mac, ip);
Serial.begin(9600);
delay(time);
Serial.println("Pronto. Envie 'e' para enviar o e-mail.");
}

void loop()
{
byte EntradaSerial;
EntradaSerial = Serial.read();
if(EntradaSerial == 'e')
{
envia();
}
}

void envia()
{
delay(time);
Serial.println("conectando...");
if (client.connect(server, 587)) // Porta de conexao do servidor do email.
{
Serial.println("conectado!");
Serial.println("enviando email...");
Serial.println();
client.println("EHLO localhost");
recebe();
delay(time);
client.println("AUTH LOGIN");
recebe();
delay(time);
client.println("xxxxxxxxxx"); // Email de login em base de 64: http://base64-encoder-online.waraxe.us/
recebe();
delay(time);
client.println("yyyyyyyyy"); // Senha do email em base de 64: http://base64-encoder-online.waraxe.us/
recebe();
delay(time);
client.println("mail from: <arduinosobral@bol.com.br>"); //Email remetente
recebe();
delay(time);
client.println("rcpt to: <mr.sobral@hotmail.com>"); // Email destinatário
recebe();
delay(time);
client.println("data");
recebe();
delay(time);
client.println("Subject: Teste BYTE IP de Email!"); // Assunto
recebe();
delay(time);
client.println("Testando email com arduino 2"); // Corpo
recebe();
delay(time);
client.println("."); // Indica fim do email.
recebe();
delay(time);
client.println();
recebe();
delay(time);
Serial.println("email enviado!");
delay(time);
if (client.connected()) // Desconecta pra deixar pronto para novo envio.
{
Serial.println();
Serial.println("desconectando...");
client.stop();
Serial.println();
Serial.println();
}
}
else
{
Serial.println("connection failed");
}
Serial.println("Ready. Press 'e' to connect.");
}


void recebe()
{
while (client.available())
{
char c = client.read();
Serial.print(c);
}
}

 

Fala galera,

Fiz exatamente o q vcs disseram acima, funcionou perfeitamente o envio de e-mail quando estou com o Ethernet Shield conectado ao meu roteador banda larga (NET). Porém, quando eu uso o Ethernet Shield conectado ao meu roteador roteador 3G/4G (TP-LINK modelo TL-MR3020) não funciona o envio, aparece "conectando..." e logo em seguida "connection failed". Já tentei com modem 3G da Claro, da Vivo e também roteei a internet 4G do meu cel Vivo, todos sem sucesso. Será que há algum impedimento quando a internet não é banda larga? 

No aguardo, agradeço.

Jose, n sei oq q deu, mas estive fazendo uns testes e alterações no meu projeto e agora o envio de email não funciona mais! =/

Tentei voltar no original e apresenta o mesmo erro. Alguma sugestão? Segue abaixo:

conectando...
conectado!
enviando email...

220 a4-smart1.bol.com.br ESMTP
250-a4-smart1.bol.com.br
250-PIPELINING
250-SIZE 34865152
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
334 VXNlcm5hbWU6
334 UGFzc3dvcmQ6
235 2.7.0 Authentication successful
250 2.1.0 Ok
450 4.7.1 <mr.sobral@hotmail.com>: Recipient address rejected: SMTP-02
554 5.5.1 Error: no valid recipients
221 2.7.0 Error: I can break rules, too. Goodbye.
email enviado!

será que esse smtp do bol que vc está usando para remeter a mensagem não está listada em alguma blacklist devido a uso abusivo por parte de spammers e, dessa forma, o destinatário hotmail está recusando o recebimento do email?

vc não teria outro servidor smtp para remeter o email-teste?

ou outro destinatário para receber o email?

Deu certo mano... era realmente isso. Eles bloquearam meu ip publico, devido a envio de e-mails excessivos. 

Demorei pra descobrir isso... tinha ate criado outro e-mail pra testar e nao funcionou.

Fiz uns xunxos aqui na minha internet da NET pra ela pegar outro IP publico, e depois disso resolveu!

Valeu! Abraço!

precisava de um sistema que enviasse email, testei com o código e ele da um erro já na hora de conectar, tem alguma ideia do que pode ser?

conectando...

connection failed

Ready. Press 'e' to connect.

boa noite, pessoal.

Espero contribuir com o problema do email.

Há um pequeno erro no código acima, relativo ao comando de apresentação: "EHLO localhost" e não "HELO localhost".

No mais, pequenas modificações - tenho biblioteca ethenetsupw5100 - não precisa incluir a ethernetclient.

o có digo ficou assim:

#include <SPI.h>
#include <Ethernet.h>
//#include <EthernetClient.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 177);
byte server[] = { 200, 147, 99, 132 }; // Colocar o ip do servidor SMTP
//REFERENCIA
//http://pt.kioskea.net/faq/844-configuracoes-dos-servidores-pop-imap...

EthernetClient client;

void setup()
{
Ethernet.begin(mac, ip);
Serial.begin(9600);
delay(1000);
}

void loop()
{
delay(500);
Serial.println("conectando...");
if (client.connect(server, 587)) // Porta de conexao do servidor do email.
{
Serial.println("conectado!");
Serial.println("enviando email...");
client.println("EHLO localhost");
recebe();
delay(100);
client.println("AUTH LOGIN");
recebe();
delay(100);
client.println("xxxxxxxxxxxxxxxxxxxxxxx"); // email em base de 64

//https://www.base64decode.org/
recebe();
delay(100);
client.println("xxxxxxxxxxxxxxxxxxxxx"); // Senha do email em base de 64
recebe();
delay(100);
client.println("mail from: <xxxxxxxxxxx>"); //Email remetente
recebe();
delay(100);
client.println("rcpt to: <xxxxxxxxxxxxx>"); // Email destinatário
recebe();
delay(100);
client.println("data");
recebe();
delay(100);
client.println("Subject: Teste de Email!"); // Assunto
recebe();
delay(100);
client.println("Testando email com arduino"); // Corpo
recebe();
delay(100);
client.println("."); // Indica fim do email.
recebe();
delay(100);
client.println();
recebe();
delay(100);
Serial.println("email enviado!");
}
}

void recebe()
{
while (client.available())
{
char c = client.read();
Serial.print(c);
}
}

quase sem modificações.... pode colocar o gmail como destinatário, que funciona também.

espero ter ajudado e obrigado a todos, em específico a quem publicou.

bom dia!, alguém pode me ajudar o meu está dando isso:

Acho q você teve o mesmo problema.

Valeu! Abraço!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço