迪文科技论坛

 找回密码
 立即注册
搜索
查看: 182|回复: 2

【2023.9.20获奖项目】基于T5L的smtp邮件发送器

[复制链接]

567

主题

167

回帖

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11954
发表于 2024-1-11 17:25:07 | 显示全部楼层 |阅读模式
【开源】基于T5L的smtp邮件发送器

一、前言
开源一个非常实用的项目,大家可能会有这样的一个需求,就是有一些设备当运行出现错误或者报警时,我们希望设备能立即通过邮件的方式把错误日志立即发送给管理员,让管理员做出处理措施,这也是本项目开源的需求所在。

二、原理
我们知道T5L迪文屏要想上网,就必须得借助wifi模块、GPRS模块、4G模块等,而我们这里选择了wifi模块。迪文公司有自己配套的wifi-10模块,而我们使用的是上海乐鑫公司推出的esp8266 wifi模块,此模块成本非常可观,学习资料也是非常的多,我们把esp8266 wifi模块连接到T5L迪文屏的串口5,然后wifi模块去访问smtp服务器,然后再由smtp服务器把我们的邮件转发给真正的用户,而smtp服务器我们可以自己搭建,当然了也可以直接使用免费现成的,这里我们就使用免费的,现在市面上免费的主流smtp服务器有163的,还有腾讯的QQ邮箱,这里我们选择了163的smtp服务器。

1.整体的运行框图如下:


2.如何去使用免费的163 smtp服务器呢,需要做如下操作:
(1)必须得有一个163的邮箱;
(2)然后用此邮箱的账号和密码登录到163的管理后台,链接地址为:https://mail.163.com/
(3)然后点击“设置”->“POP3/SMTP/IMAP”,开启“IMAP/SMTP服务”,开启成功后会获得一个授权码即为成功了,如下图所示:




3.esp8266 wifi模块外观如下



三、DGUS Tool界面设计

界面展示:
可以在主界面上通过键盘输入收件人邮箱、 邮件标题、邮件内容等信息。
值得关注的是我们的邮件内容是支持多种类型的,分别为:
  • 纯文本   
  • 组态控件(比如发送一个按钮,一个输入框,还有一张图片等等)   
  • 多样式(比如设置不同的文本颜色,加粗,下划线等等)





四、C51软件设计
这一块的代码比较多,我贴出主要的代码部分,完整的请看源码工程。

  1. <font size="3" face="宋体">void uart5_init(u32 baud)
  2. {
  3.         SCON3T = 0x80;
  4.         SCON3R = 0x80;
  5.         baud = (u32)((double)(FOSC/8.0)/baud);
  6.         BODE3_DIV_H = (baud>>8)&0xff;
  7.         BODE3_DIV_L = baud&0xff;
  8.         ES3R = 0;
  9.         ES3T = 0;
  10. }


  11. void u5_send_byte(u8 byte)
  12. {
  13.         SBUF3_TX = byte;
  14.         while(!(SCON3T&0x01));
  15.         SCON3T &= 0xfe;
  16. }


  17. void u5_send_bytes(u8 *bytes,u16 len)
  18. {
  19.         u16 i;

  20.         for(i=0;i<len;i++)
  21.         {
  22.                 SBUF3_TX = bytes;
  23.                 while(!(SCON3T&0x01));
  24.                 SCON3T &= 0xfe;
  25.         }
  26. }

  27. void get_input(u8 * val,u8 len)
  28. {
  29.         u8 i;
  30.         
  31.         for(i=0;i<len;i++)
  32.         {
  33.                 if(val==0xff)
  34.                 {
  35.                         val = 0x00;
  36.                         val[i+1] = 0x00;
  37.                         return;
  38.                 }
  39.         }
  40. }


  41. u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime,u8 clearBuffer)
  42. {
  43.         u8 res=0;
  44.         rx_sta=0;
  45.         
  46.         if(ack&&waittime&&cmd)        
  47.         {
  48.                 while(--waittime)        
  49.                 {
  50.                         sys_delay_ms(10);
  51.                         if(rx_sta&0X8000)
  52.                         {
  53.                                 if(esp8266_check_respond(ack))
  54.                                   break;
  55.                         }
  56.                 }
  57.                 if(waittime==0)res=1;
  58.                 if(clearBuffer==1)rx_sta=0;
  59.         }
  60.         return res;
  61. }


  62. typedef struct{
  63.         u8 cmd;
  64.         u8 email[20];
  65.         u8 name[20];
  66.         u8 title[20];
  67.         u8 msg[60];
  68. }EMAIL_INFO;

  69. EMAIL_INFO email_info;

  70. u8 respond[80];
  71. u8 wifi_name[30];
  72. u8 wifi_passwd[30];
  73. u8 server[30];
  74. u8 port[30];
  75. u8 username[30];
  76. u8 auth_code[30];
  77. u8 rx_sta;</font>
复制代码

  1. <font size="3" face="宋体">sys_read_vp(0x1000,(u8*)&btn_val,1);
  2.                 if(btn_val)
  3.                 {
  4.                         if(btn_val==1)
  5.                         {
  6.                                 sys_read_vp(0x3000,email_info.name,10);
  7.                                 sys_read_vp(0x3020,email_info.email,10);
  8.                                 sys_read_vp(0x3040,email_info.title,10);
  9.                                 sys_read_vp(0x3060,email_info.msg,30);
  10.                                 get_input(email_info.name,20);
  11.                                 get_input(email_info.email,20);
  12.                                 get_input(email_info.title,20);
  13.                                 get_input(email_info.msg,60);
  14.                                 send_packet((u8*)&email_info,sizeof(EMAIL_INFO));
  15.                                 if(rx_sta)
  16.                                         send_mail(email_info.email,email_info.title,email_info.msg);
  17.                         }else if(btn_val==2)
  18.                         {
  19.                                 sys_read_vp(0x3100,wifi_name,15);
  20.                                 sys_read_vp(0x3120,wifi_passwd,15);
  21.                                 get_input(wifi_name,30);
  22.                                 get_input(wifi_passwd,30);
  23.                         }else if(btn_val==3)
  24.                         {
  25.                                 sys_read_vp(0x3200,server,15);
  26.                                 sys_read_vp(0x3220,port,15);
  27.                                 sys_read_vp(0x3240,username,15);
  28.                                 sys_read_vp(0x3260,auth_code,15);        
  29.                                 get_input(server,30);
  30.                                 get_input(port,30);
  31.                                 get_input(username,30);
  32.                                 get_input(auth_code,30);                                
  33.                         }
  34.                         
  35.                         btn_val = 0;
  36.                         sys_write_vp(0x1000,(u8*)&btn_val,1);
  37.                 }
  38.                 sys_read_vp(0x2050,(u8*)&btn_val2,1);
  39.                 if(btn_val2!=old_val)
  40.                 {
  41.                         if(btn_val2==1)
  42.                                 sys_write_vp(0x3060,"This is a email from T5L!\0\0",30);
  43.                         else if(btn_val2==2)
  44.                                 sys_write_vp(0x3060,"<button>Click</button><br><br><input value='good'>\0\0",30);
  45.                         else if(btn_val2==3)
  46.                                 sys_write_vp(0x3060,"<h3>Bold</h3><h1 style='color:red;'>Red</h1>\0\0",30);
  47.                         
  48.                         old_val = btn_val2;
  49.                 }</font>
复制代码

五、测试效果
迪文屏主界面效果如下:



1.纯文本类型的邮件如下


2.组态控件的邮件如下




3.多样式的邮件如下







视频演示效果:





备注说明:如需源码,请参考此链接:http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=8932&_dsign=d4fbd151






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

1

回帖

37

积分

新手上路

Rank: 1

积分
37
发表于 2024-4-18 17:01:38 | 显示全部楼层
回复

使用道具 举报

0

主题

485

回帖

5172

积分

论坛元老

Rank: 8Rank: 8

积分
5172
发表于 2024-4-18 17:25:00 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-21 22:54 , Processed in 0.076514 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表