2017-03-07 87 views
4

我尝试从Arduino和以太网盾发送电子邮件时从gmail服务器收到错误530 5.7.0。我尝试从Arduino和以太网盾发送电子邮件时遇到了错误530 5.7.0

我想从我的arduino uno板发送电子邮件。 我买了一个以太网盾。 我发现一个代码发送一个电子邮件使用以太网盾下面,但我失败了。 Gmail服务器表示“530 5.7.0”的错误代码,但我不知道这意味着什么。 我错了什么?

/* 
    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

不难给Google错误代码。 –

+1

我知道错误代码的含义。 我只是想知道如何通过上面的代码来解决这个问题。 感谢:-) –

回答

3

有一些方法可以发送电子邮件与嵌入式系统,如arduino。您的草图显示了如何直接发送邮件到邮件服务器,邮件服务器上有一个目的地址的帐户。

正如您已经知道错误代码所说的“必须首先发出STARTTLS命令”。 这意味着SSL连接是必需的。当然,这是Google的一项限制。不幸的是,“Arduino以太网盾”确实不支持SSL的不支持。所以你可能想检查另一个支持SSL的盾牌。

PHPoC Shield for Arduino”可以是替代方案。要使用此屏蔽,“Arduino Library for PHPoC”是必需的。这个库提供了一些例子。和“EmailClient”的例子可以是你在找什么。 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() { 
} 

我运行这个草图,供大家参考。当然,我更改了一些参数,例如from_email_address,from_user_name,to_email_address和to_user_name。 enter image description here

但它没有发送421-4.7.0错误代码的电子邮件。 enter image description here

根据错误信息,此邮件可能因为谷歌邮件服务器上的垃圾邮件政策而被拒绝。无论如何,你的问题 - 从gmail服务器得到错误530 5.7.0 - 可以通过这个针对Arduino的PHPoC Shield解决。

如果您还想发送电子邮件到谷歌,下面的参考将对您有所帮助。