2017-03-07 6 views
4

J'ai reçu une erreur 530 5.7.0 du serveur gmail en essayant d'envoyer un email depuis Arduino et Ethernet shield.J'ai reçu une erreur 530 5.7.0 du serveur gmail en essayant d'envoyer un email depuis Arduino et Ethernet shield

Je souhaite envoyer un e-mail depuis mon tableau arduino uno. J'ai acheté un blindage Ethernet pour cela. J'ai trouvé un code pour envoyer un e-mail en utilisant le blindage Ethernet ci-dessous mais j'ai échoué. Le serveur Gmail a indiqué "530 5.7.0" code d'erreur mais je ne sais pas ce que cela signifie. Qu'est-ce que je me suis trompé?

/* 
    Email client sketch for IDE v1.0.1 and w5100/w5200 
    Posted December 2012 by SurferTim 
*/ 

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

// this must be unique 
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x59, 0x67 }; 
// change network settings to yours 
IPAddress ip(10, 6, 0, 248);  
IPAddress gateway(10, 6, 0, 1); 
IPAddress subnet(255, 255, 255, 0); 

// change server to your email server ip or domain 
// IPAddress server(1, 2, 3, 4); 
char server[] = "smtp.gmail.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. Press 'e' to send.")); 
} 

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,25) == 1) { 
    Serial.println(F("connected")); 
    } else { 
    Serial.println(F("connection failed")); 
    return 0; 
    } 

    if(!eRcv()) return 0; 
    Serial.println(F("Sending helo")); 

// 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: Arduino email test\r\n")); 

    client.println(F("This is from my Arduino!")); 

    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")); 
} 
+1

Il est pas difficile de google que le code d'erreur. –

+1

Je connais la signification du code d'erreur. Je veux juste savoir comment résoudre ce problème avec le code ci-dessus. Merci :-) –

Répondre

3

Il existe plusieurs façons d'envoyer des emails avec un système embarqué tel que arduino. Et votre croquis montre comment envoyer un courrier électronique directement au serveur de messagerie qui a un compte pour l'adresse de destination.

Comme vous le savez déjà, le code d'erreur indique "Doit d'abord exécuter une commande STARTTLS". Cela signifie que la connexion SSL est requise. Bien sûr, c'est une des restrictions de Google. Malheureusement, "Arduino Ethernet Shield" fait pas support SSL. Donc, vous pouvez vouloir vérifier un autre bouclier qui prend en charge SSL.

"PHPoC Shield for Arduino" peut être une alternative. Pour utiliser ce blindage, "Arduino Library for PHPoC" est requis. Cette bibliothèque fournit quelques exemples. Et "EmailClient" exemple peut être ce que vous cherchez. enter image description here

/* arduino email client - send email to server directly */ 

#include "SPI.h" 
#include "Phpoc.h" 

PhpocEmail email; 

void setup() { 
    Serial.begin(9600); 
    while(!Serial) 
    ; 

Phpoc.begin(PF_LOG_SPI | PF_LOG_NET | PF_LOG_APP); 
//Phpoc.begin(); 

Serial.println("Sending email to server directly"); 

// setup From/To/Subject 
email.setFrom("from_email_address", "from_user_name"); 
email.setTo("to_email_address", "to_user_name"); 
email.setSubject("Mail from PHPoC Shield for Arduino"); 

// write email message 
email.beginMessage(); 
email.println("Hello, world!"); 
email.println("I am PHPoC Shield for Arduino"); 
email.println("Good bye"); 
email.endMessage(); 

// send email 
if(email.send() > 0) 
    Serial.println("Email send ok"); 
else 
    Serial.println("Email send failed"); 
} 

void loop() { 
} 

Je cours cette esquisse pour votre référence. Bien sûr, j'ai changé certains paramètres tels que from_email_address, from_user_name, to_email_address et to_user_name. enter image description here

Mais il n'a pas réussi à envoyer l'e-mail avec le code d'erreur 421-4.7.0. Selon le message d'erreur, cet e-mail peut être rejeté en raison de la politique de spam sur le serveur de messagerie google. Quoi qu'il en soit, votre problème - a obtenu une erreur 530 5.7.0 du serveur gmail - peut être résolu avec ce bouclier PHPoC pour Arduino.

Si vous souhaitez toujours envoyer un e-mail à google, la référence ci-dessous vous sera utile.