迪文科技论坛

 找回密码
 立即注册
搜索
查看: 420|回复: 1

【开源】基于T5L的smtp邮件发送器

[复制链接]

4

主题

6

回帖

461

积分

中级会员

Rank: 3Rank: 3

积分
461
发表于 2023-9-20 20:22:31 | 显示全部楼层 |阅读模式
本帖最后由 good 于 2023-9-20 22:12 编辑

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


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

整体的运行框图如下:


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


esp8266 wifi模块外观如下:


三.DGUS Tool界面设计

直接上图吧,看的更直观








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


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


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;



                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;
                }


五.测试效果

迪文屏主界面效果如下:


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


2.组态控件的邮件如下


3.多样式的邮件如下






视频演示效果:https://b23.tv/3ov67cJ




本帖子中包含更多资源

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

x
回复

使用道具 举报

0

主题

468

回帖

6946

积分

论坛元老

Rank: 8Rank: 8

积分
6946
发表于 2023-9-20 20:50:51 | 显示全部楼层
点赞点赞点赞
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 01:18 , Processed in 0.089284 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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