SMTP即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP在TCP协议25号端口监听连续请求。SMTP连接和发送过程:建立TCP 连接; 客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令;服务器端正希望以OK作为响应,表明准备接�;客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行;服务器端则表示是否愿意为收件人接收邮�; 协商结束,发送邮件,用命令DATA发�;以�.”号表示结束并将内容一起发出去,结束此次发送,用QUIT命令退出。这里用W5500�126邮箱通信为例来具体分析邮件的发送过程。在本示例代码中,发件人邮箱名为:w[email protected],邮箱密码为:hello123� 收件人邮箱地址为:[email protected],邮件内容为:Hello!WIZnet!。如果想用别的邮箱做测试的话,请修改代码中收件人和发件人的邮箱名和密码。具体过程很简单,先解�126邮箱的服务器域名smtp.126.com,成功以后就执行邮件发送函数,邮件发送成� 以后就跳出循环或者等待。让程序进入了一个死循环,这样程序将不再跳到主循环,避免重复发送相同的邮件,这样使得在W5500的运行模式下,按一下Reset键或者上电一次,只发送一封邮件�
STMP的邮件发送过程如下:while(1) { do_dns(); do_smtp(); if(Mail_Send_OK) while(1); } void do_smtp(void) //SMTP 主函� { uint8 ch=SOCK_SMTP; uint16 len; uint16 anyport=5000; uint8 Smtp_PORT=25; memset(RX_BUF,0,sizeof(RX_BUF)); switch(getSn_SR(ch)) { case SOCK_INIT: connect(ch, ConfigMsg.rip ,Smtp_PORT ); break; case SOCK_ESTABLISHED: if(getSn_IR(ch) & Sn_IR_CON) { setSn_IR(ch, Sn_IR_CON); } if ((len = getSn_RX_RSR(ch)) > 0) { while(!Mail_Send_OK) { memset(RX_BUF,0,sizeof(RX_BUF)); len = recv(ch, (uint8*)RX_BUF,len); send_mail(); } disconnect(ch); } break; case SOCK_CLOSE_WAIT: if ((len = getSn_RX_RSR(ch)) > 0) { while(!Mail_Send_OK) { len = recv(ch, (uint8*)RX_BUF, len); send_mail(); } } disconnect(ch); break; case SOCK_CLOSED: socket(ch, Sn_MR_TCP,anyport++, 0x00); break; default: break; } }STMP的具体测试步骤如�