我在尝试从Arduino和Ethernet shield发送电子邮件时,从gmail服务器收到一个错误530 5.7.0
我在尝试从Arduino和Ethernet shield发送电子邮件时,从gmail服务器收到一个错误530 5.7.0 我想从我的arduino uno董事会发一封电子邮件。 我为它买了一个以太网屏蔽。 我在下面找到了使用以太网屏蔽发送电子邮件的代码,但失败了。 Gmail服务器说“5305.7.0”错误代码,但我不知道这是什么意思。 我做错了什么我在尝试从Arduino和Ethernet shield发送电子邮件时,从gmail服务器收到一个错误530 5.7.0,arduino,smtp,gmail,email-client,starttls,Arduino,Smtp,Gmail,Email Client,Starttls,我在尝试从Arduino和Ethernet shield发送电子邮件时,从gmail服务器收到一个错误530 5.7.0 我想从我的arduino uno董事会发一封电子邮件。 我为它买了一个以太网屏蔽。 我在下面找到了使用以太网屏蔽发送电子邮件的代码,但失败了。 Gmail服务器说“5305.7.0”错误代码,但我不知道这是什么意思。 我做错了什么 /* Email client sketch for IDE v1.0.1 and w5100/w5200 Posted Decemb
/*
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"));
}
/*
通过电子邮件发送IDEV1.0.1和w5100/w5200的客户端草图
2012年12月由SurferTim发布
*/
#包括
#包括
//这一定是独一无二的
字节mac[]={0x90,0xA2,0xDA,0x00,0x59,0x67};
//将网络设置更改为您的
ip地址ip(10,6,0248);
IP地址网关(10,6,0,1);
IP地址子网(255、255、255、0);
//将服务器更改为电子邮件服务器ip或域
//IP地址服务器(1、2、3、4);
char服务器[]=“smtp.gmail.com”;
以太网络客户端;
无效设置()
{
Serial.begin(9600);
pinMode(4,输出);
数字写入(4,高);
以太网开始(mac、ip、网关、网关、子网);
延迟(2000年);
Serial.println(F(“Ready.Press'e'发送”);
}
void循环()
{
字节英寸;
inChar=Serial.read();
如果(英寸=='e')
{
if(sendmail())Serial.println(F(“已发送电子邮件”);
else Serial.println(F(“电子邮件失败”);
}
}
字节sendmail()
{
字节thisByte=0;
字节码;
if(client.connect(server,25)==1){
串行打印(F(“连接”);
}否则{
Serial.println(F(“连接失败”);
返回0;
}
如果(!eRcv())返回0;
连续打印(F(“发送直升机”);
//更改为您的公共ip
客户。println(F(“helo 1.2.3.4”);
如果(!eRcv())返回0;
Serial.println(F(“发送自”);
//更改您的电子邮件地址(发件人)
client.println(F(“邮件发件人:”);
如果(!eRcv())返回0;
//更改收件人地址
Serial.println(F(“发送至”);
客户。println(F(“RCPT至:”);
如果(!eRcv())返回0;
Serial.println(F(“发送数据”));
客户。println(F(“数据”));
如果(!eRcv())返回0;
Serial.println(F(“发送电子邮件”);
//更改收件人地址
客户。println(F(“收件人:您”);
//改你的地址
client.println(F(“From:Me”);
client.println(F(“主题:Arduino电子邮件测试”);
println(F(“这是来自我的Arduino!”);
客户。打印号(F)(“.”);
如果(!eRcv())返回0;
Serial.println(F(“发送退出”);
客户。println(F(“退出”);
如果(!eRcv())返回0;
client.stop();
串行打印LN(F(“断开”);
返回1;
}
字节eRcv()
{
字节码;
字节这个字节;
int loopCount=0;
而(!client.available()){
延迟(1);
loopCount++;
//如果10秒钟内未收到任何信息,则超时
如果(循环计数>10000){
client.stop();
Serial.println(F(“\r\n超时”);
返回0;
}
}
respCode=client.peek();
while(client.available())
{
thisByte=client.read();
串行写入(thisByte);
}
如果(respCode>='4')
{
efail();
返回0;
}
返回1;
}
void efail()
{
字节thisByte=0;
int loopCount=0;
客户。println(F(“退出”);
而(!client.available()){
延迟(1);
loopCount++;
//如果10秒钟内未收到任何信息,则超时
如果(循环计数>10000){
client.stop();
Serial.println(F(“\r\n超时”);
返回;
}
}
while(client.available())
{
thisByte=client.read();
串行写入(thisByte);
}
client.stop();
串行打印LN(F(“断开”);
}
有一些方法可以通过嵌入式系统(如arduino)发送电子邮件。您的示意图显示了如何将电子邮件直接发送到邮件服务器,该服务器具有目标地址的帐户
正如您已经知道的,错误代码表示“必须首先发出STARTTLS命令”。
这意味着需要SSL连接。当然,这是谷歌的限制之一。不幸的是,“Arduino Ethernet Shield”不支持SSL。因此,您可能需要检查另一个支持SSL的屏蔽
“”可以是一个替代方案。要使用此屏蔽,需要“”。该库提供了一些示例。而“EmailClient”示例可以是您正在寻找的内容。
我画了这张草图供你参考。当然,我更改了一些参数,例如从电子邮件地址、用户名、电子邮件地址和用户名。
但它无法发送带有421-4.7.0错误代码的电子邮件。
根据错误消息,由于谷歌邮件服务器上的垃圾邮件策略,此电子邮件可能被拒绝。无论如何,你的问题——从gmail服务器上得到一个错误530 5.7.0——可以通过这个针对Arduino的PHPoC屏蔽来解决
如果你仍然想向谷歌发送电子邮件,下面的参考资料将对你有所帮助
/* 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() {
}