This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] EK-TM4C1294XL:可靠的电子邮件 SMTP 发送方法

Guru**** 1794070 points
Other Parts Discussed in Thread: EK-TM4C1294XL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/572419/ek-tm4c1294xl-a-reliable-e-mail-smtp-delivering-method

器件型号:EK-TM4C1294XL

大家好。 现在、我想让我的 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;



  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、John、

    您可以在 GIT 上加载项目并将其链接到您的帖子。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢 Amit 迄今为止为大家提供的所有帮助。
    此代码是一个周末项目、与源代码有关
    刚刚 论坛上发布了。 我已经 在中使用此例程
     各种其他项目中的类上下文。
    再次感谢您、
    John
     
     
     
     
    ----