首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我试图从Arduino和以太网屏蔽发送电子邮件时,我从gmail服务器收到了一个530 5.7.0错误

当我试图从Arduino和以太网屏蔽发送电子邮件时,我从gmail服务器收到了一个530 5.7.0错误
EN

Stack Overflow用户
提问于 2017-03-07 09:17:26
回答 1查看 1.3K关注 0票数 4

在尝试从Arduino和以太网屏蔽发送电子邮件时,我从gmail服务器收到了一个5305.7.0错误。

我想从我的阿迪诺乌诺董事会发一封电子邮件。我为它买了一个以太网屏蔽。我在下面找到了一个使用以太网屏蔽发送电子邮件的代码,但失败了。Gmail服务器说"530 5.7.0“错误代码,但我不知道它意味着什么。我做错什么了?

代码语言:javascript
复制
/*
   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: <me@mydomain.com>"));

  if(!eRcv()) return 0;

// change to recipient address
  Serial.println(F("Sending To"));
  client.println(F("RCPT To: <receiver@gmail.com>"));

  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 <receiver@gmail.com>"));

// change to your address
  client.println(F("From: Me <me@mydomain.com>"));

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-09 05:31:20

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

正如您已经知道的,错误代码说“必须首先发出STARTTLS命令”。这意味着需要SSL连接。当然,这是谷歌的限制之一。不幸的是,"Arduino以太网屏蔽“使不支持。因此,您可能需要检查另一个支持SSL的屏蔽。

"用于Arduino的PHPoC盾牌“可以是另一种选择。要使用这个屏蔽,"用于PHPoC的Arduino库“是必需的。这个库提供了一些示例。"EmailClient“示例可以是您要寻找的内容。

代码语言:javascript
复制
/* 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。

但是它无法发送带有421-4.7.0错误代码的电子邮件。

根据错误消息,此电子邮件可能会因为谷歌邮件服务器上的垃圾邮件策略而被拒绝。无论如何,您的问题--从gmail服务器获得了一个5305.7.0错误--可以用这个PHPoC屏蔽来解决。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42644308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档