<<返回上一页

用W5500EVB发送邮件


关键词:SMTPr  W5500  WIZnet  W5500EVB  邮件传输


SMTP即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP在TCP协议25号端口监听连续请求。SMTP连接和发送过程:建立TCP 连接; 客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令;服务器端正希望以OK作为响应,表明准备接收;客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行;服务器端则表示是否愿意为收件人接收邮件; 协商结束,发送邮件,用命令DATA发送;以“.”号表示结束并将内容一起发出去,结束此次发送,用QUIT命令退出。这里用W5500与126邮箱通信为例来具体分析邮件的发送过程。在本示例代码中,发件人邮箱名为:wiznet2013@126.com,邮箱密码为:hello123。 收件人邮箱地址为:3196855541@qq.com,邮件内容为: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的具体测试步骤如下
  1. SMTP例程采用默认的IP信息,所以在w5500_conf.c文件中设置ip_from为IP_FROM_DEFINE。
  2. 对代码进行编译,之后将程序烧录到野火开发板。
  3. 连接好网线,USB串口线。打开串口调试工具,复位野火开发板,从输出结果可以得到图1设置信息。
  4. 首先解析到smtp.126.com邮件服务器的IP,然后发送邮件,如果发送成功,会得到mail send OK的信息。
  5. 登陆串口提示的账号,查看邮件的收件箱可以找到刚才发送的邮件。

图1:邮件成功发送打印信息


例程下载:【SMTP】
编译环境:keil V5.11
硬件要求:W5500EVB