大家好。 现在、我想让我的 TM4C12nnYYY Launchpad 和基于 ARM 的自构建模块能够可靠地向特定地址发送电子邮件、
除了 我用于数据传输的任何其他类型的 TCP/UDP 套接字连接之外、我还可以使用一个备份/隐藏通道来接收模块状态和/或的定期更新
任何时候、任何地方、我都应该注意到的例外情况。 因此、我更新了我以前对 SMTP 协议的了解、在一天之内、我可以将模块用于
作为非常精确的电子邮件代理/通知程序、对于监控和控制的事件和数据、行为与我应该知道的任何其他异常一样。 (突然的外部引导或看门狗引导)
因此、我对以下源进行了编码、任何人都可以免费使用这些源。 唯一需要使用的是他/她的电子邮件服务器系统的真实地址(smtp.gmail.com、smtp.myserver.com、e.c.T)
在此示例中使用的 TCP 客户端的名称是 emailIMEI,并在 setup()例程中创建为 EthernetClient emailIMEI;我使用许多不同的例程来执行几乎相同的操作
但我想充分了解调试会话期间发生的情况。 (很明显、此源代码可用于任何嵌入式项目、任何处理器或上
LaunchPad。 即使在 Linux、Raspberry Pi、Windows-C#和/或 C/C++平台上进行了少量修改、 此源也不使用任何库、也不会实现基于 SMTP 套接字的通信
协议(telnet @端口25或2525)仅使用本机 SMTP 协议的命令。 欢迎对代码改进的任何建议。 很快、POP3客户端也将准备好进行测试。
希望这一消息来源将对本论坛内外的许多人有用。 祝你一切顺利、John Piliounis
int emailSMTP_Sender ()
{
uint8_t input_buffer[512];
字节 OUT_BUFFER [512];
string localSUBJECT ="我是主题行的内容 bla-bla-bla-bla";
字符 l;
int q = 0;
字符串 inbound ="";
string SMTP_CONNECT_1="EHLO mail.mySMTPserver.com\r\n";
string SMTP_CONNECT_2="发件人: body=8BITMIME\r\n";//任何地址
字符串 SMTP_CONNECT_3 ="RCPT 收至: \r\n";//这需要是您发送 EHLO 消息的 SMTP 服务器上的实际电子邮件地址
string SMTP_CONNECT_4="data\r\n";
string emailFrom_IoT ="发件人: \r\n";//任何地址
字符串 emailTo_IoT ="收件人: \r\n";//任何地址
字符串 emailSubject_IoT ="Subject:><"+ localSUBJECT +"></r\nDate:\r\n\r\n";//日期:不需要存在,因为接收者的服务器将添加本地 DT 戳
string body_message ="这是来自 EK-TM4C1294XL 模块的自动物联网电子邮件。\r\n\r\n 请检查您需要检查的内容。\r\n\r\n 至少两个。 (点)
//在正文的每一句的末尾,所以一个可以转出另一个。
string SMTP_CONNECT_5="\r\n\r\n";//此命令会将您的讯息发送到邮件服务器的 SMTP 队列并结束条目,等待新会话或退出
string SMTP_CONNECT_6="退出\r\n";
字符串 emailcontent ="";
emailcontent = emailFrom_IoT + emailTo_IoT + emailSubject_IoT + body_message;
serial.println (emailcontent);
while (1)
{
mywatchdogfeed();
emailIMEI.connect (“smtp.gmail.com”、25、360000);//使用您实际上可以用于电子邮件服务的任何其他电子邮件 SMTP 服务器
if ( emailIMEI.connected())
{
serial.println ("已连接到 Gmail 邮件服务器");
serial.println(");
memset (input_buffer、0、sizeof (input_buffer));
memset (out_buffer、0、sizeof (out_buffer));
q = SMTP_CONNECT_1.length ();
入站="";
for (int i = 0;i < q;i++)
{
L =(char) smtp_connection_1.charAt(i);
OUT_BUFFER[i]= l;
}
emailIMEI.write (out_buffer、q);
emailIMEI.flush();
延迟(200);
emailIMEI.read (input_buffer、512);
for (int i = 0;i <= 512;i++)
{
inbound += char (input_buffer[i]);
if (input_buffer[i]='\0')
{
中断;
}
}
serial.println (入站);
serial.println(");
如果(inbound .length()=0)
{
serial.println ("EHLO 消息没有从服务器获得响应。");
中断;
}
/////////////////////////////////////////////////////
memset (input_buffer、0、sizeof (input_buffer));
memset (out_buffer、0、sizeof (out_buffer));
q = SMTP_CONNECT_2.length ();
入站="";
for (int i = 0;i < q;i++)
{
L =(char) smtp_connection_2.charAt(i);
OUT_BUFFER[i]= l;
}
emailIMEI.write (out_buffer、q);
emailIMEI.flush();
延迟(200);
emailIMEI.read (input_buffer、512);
for (int i = 0;i <= 512;i++)
{
inbound += char (input_buffer[i]);
if (input_buffer[i]='\0')
{
中断;
}
}
serial.println (入站);
serial.println(");
如果(inbound .length()=0)
{
serial.println ("发件人:消息未从服务器获得响应。");
中断;
}
/////////////////////////////////////////////////////
memset (input_buffer、0、sizeof (input_buffer));
memset (out_buffer、0、sizeof (out_buffer));
q = SMTP_CONNECT_3.length ();
入站="";
for (int i = 0;i < q;i++)
{
L =(char) smtp_connection_3.charAt(i);
OUT_BUFFER[i]= l;
}
emailIMEI.write (out_buffer、q);
emailIMEI.flush();
延迟(200);
emailIMEI.read (input_buffer、512);
for (int i = 0;i <= 512;i++)
{
inbound += char (input_buffer[i]);
if (input_buffer[i]='\0')
{
中断;
}
}
serial.println (入站);
serial.println(");
如果(inbound .length()=0)
{
serial.println ("RCPT 收件人:消息未从服务器获得响应。");
中断;
}
/////////////////////////////////////////////////////
memset (input_buffer、0、sizeof (input_buffer));
memset (out_buffer、0、sizeof (out_buffer));
q = SMTP_CONNECT_4.length ();
入站="";
for (int i = 0;i < q;i++)
{
L =(char) smtp_connection_4.charAt(i);
OUT_BUFFER[i]= l;
}
emailIMEI.write (out_buffer、q);
emailIMEI.flush();
延迟(200);
emailIMEI.read (input_buffer、512);
for (int i = 0;i <= 512;i++)
{
inbound += char (input_buffer[i]);
if (input_buffer[i]='\0')
{
中断;
}
}
serial.println (入站);
serial.println(");
如果(inbound .length()=0)
{
serial.println ("data:消息没有从服务器获得响应。");
中断;
}
/////////////////////////////////////////////////////
memset (input_buffer、0、sizeof (input_buffer));
memset (out_buffer、0、sizeof (out_buffer));
q = emailcontent.length();
入站="";
for (int i = 0;i < q;i++)
{
L =(char) emailcontent.charAt(i);
OUT_BUFFER[i]= l;
}
emailIMEI.write (out_buffer、q);
emailIMEI.flush();
延迟(200);
emailIMEI.read (input_buffer、512);
for (int i = 0;i <= 512;i++)
{
inbound += char (input_buffer[i]);
if (input_buffer[i]='\0')
{
中断;
}
}
serial.println (入站);
serial.println(");
如果(inbound .length()=0)
{
serial.println("");
中断;
}
/////////////////////////////////////////////////////
memset (input_buffer、0、sizeof (input_buffer));
memset (out_buffer、0、sizeof (out_buffer));
q = SMTP_CONNECT_5.length ();
入站="";
for (int i = 0;i < q;i++)
{
L =(char) smtp_connection_5.charAt(i);
OUT_BUFFER[i]= l;
}
emailIMEI.write (out_buffer、q);
emailIMEI.flush();
延迟(200);
emailIMEI.read (input_buffer、512);
for (int i = 0;i <= 512;i++)
{
inbound += char (input_buffer[i]);
if (input_buffer[i]='\0')
{
中断;
}
}
serial.println (入站);
serial.println(");
如果(inbound .length()=0)
{
serial.println ("关闭命令未从服务器获得响应。");
中断;
}
/////////////////////////////////////////////////////
memset (input_buffer、0、sizeof (input_buffer));
memset (out_buffer、0、sizeof (out_buffer));
q = SMTP_CONNECT_6.length ();
入站="";
for (int i = 0;i < q;i++)
{
L =(char) smtp_connection_6.charAt(i);
OUT_BUFFER[i]= l;
}
emailIMEI.write (out_buffer、q);
emailIMEI.flush();
emailIMEI.read (input_buffer、512);
for (int i = 0;i <= 512;i++)
{
inbound += char (input_buffer[i]);
if (input_buffer[i]='\0')
{
中断;
}
}
serial.println (入站);
serial.println(");
如果(inbound .length()=0)
{
serial.println ("quit Command did not get a respond from server.");
中断;
}
}
其他
{
serial.println ("无法连接到 Gmail 邮件服务器");
serial.println(");
中断;
}
emailIMEI.stop();
serial.println ("客户端 emailIMEI 已关闭");
serial.println(");
返回1;
}
}