|
【开源】基于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软件设计
这一块的代码比较多,我贴出主要的代码部分,完整的请看源码工程。
- <font size="3" face="宋体">void uart5_init(u32 baud)
- {
- SCON3T = 0x80;
- SCON3R = 0x80;
- baud = (u32)((double)(FOSC/8.0)/baud);
- BODE3_DIV_H = (baud>>8)&0xff;
- BODE3_DIV_L = baud&0xff;
- ES3R = 0;
- ES3T = 0;
- }
- void u5_send_byte(u8 byte)
- {
- SBUF3_TX = byte;
- while(!(SCON3T&0x01));
- SCON3T &= 0xfe;
- }
- void u5_send_bytes(u8 *bytes,u16 len)
- {
- u16 i;
- for(i=0;i<len;i++)
- {
- SBUF3_TX = bytes;
- while(!(SCON3T&0x01));
- SCON3T &= 0xfe;
- }
- }
- void get_input(u8 * val,u8 len)
- {
- u8 i;
-
- for(i=0;i<len;i++)
- {
- if(val==0xff)
- {
- val = 0x00;
- val[i+1] = 0x00;
- return;
- }
- }
- }
- u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime,u8 clearBuffer)
- {
- u8 res=0;
- rx_sta=0;
-
- if(ack&&waittime&&cmd)
- {
- while(--waittime)
- {
- sys_delay_ms(10);
- if(rx_sta&0X8000)
- {
- if(esp8266_check_respond(ack))
- break;
- }
- }
- if(waittime==0)res=1;
- if(clearBuffer==1)rx_sta=0;
- }
- return res;
- }
- typedef struct{
- u8 cmd;
- u8 email[20];
- u8 name[20];
- u8 title[20];
- u8 msg[60];
- }EMAIL_INFO;
- EMAIL_INFO email_info;
- u8 respond[80];
- u8 wifi_name[30];
- u8 wifi_passwd[30];
- u8 server[30];
- u8 port[30];
- u8 username[30];
- u8 auth_code[30];
- u8 rx_sta;</font>
复制代码
- <font size="3" face="宋体">sys_read_vp(0x1000,(u8*)&btn_val,1);
- if(btn_val)
- {
- if(btn_val==1)
- {
- sys_read_vp(0x3000,email_info.name,10);
- sys_read_vp(0x3020,email_info.email,10);
- sys_read_vp(0x3040,email_info.title,10);
- sys_read_vp(0x3060,email_info.msg,30);
- get_input(email_info.name,20);
- get_input(email_info.email,20);
- get_input(email_info.title,20);
- get_input(email_info.msg,60);
- send_packet((u8*)&email_info,sizeof(EMAIL_INFO));
- if(rx_sta)
- send_mail(email_info.email,email_info.title,email_info.msg);
- }else if(btn_val==2)
- {
- sys_read_vp(0x3100,wifi_name,15);
- sys_read_vp(0x3120,wifi_passwd,15);
- get_input(wifi_name,30);
- get_input(wifi_passwd,30);
- }else if(btn_val==3)
- {
- sys_read_vp(0x3200,server,15);
- sys_read_vp(0x3220,port,15);
- sys_read_vp(0x3240,username,15);
- sys_read_vp(0x3260,auth_code,15);
- get_input(server,30);
- get_input(port,30);
- get_input(username,30);
- get_input(auth_code,30);
- }
-
- btn_val = 0;
- sys_write_vp(0x1000,(u8*)&btn_val,1);
- }
- sys_read_vp(0x2050,(u8*)&btn_val2,1);
- if(btn_val2!=old_val)
- {
- if(btn_val2==1)
- sys_write_vp(0x3060,"This is a email from T5L!\0\0",30);
- else if(btn_val2==2)
- sys_write_vp(0x3060,"<button>Click</button><br><br><input value='good'>\0\0",30);
- else if(btn_val2==3)
- sys_write_vp(0x3060,"<h3>Bold</h3><h1 style='color:red;'>Red</h1>\0\0",30);
-
- old_val = btn_val2;
- }</font>
复制代码
五、测试效果
迪文屏主界面效果如下:
1.纯文本类型的邮件如下
2.组态控件的邮件如下
3.多样式的邮件如下
视频演示效果:
备注说明:如需源码,请参考此链接:http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=8932&_dsign=d4fbd151
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|