开源 C# .net mvc 开发(六)发送邮件、定时以及CMD编程

 文章的目的为了记录.net mvc学习的经历。本职为嵌入式软件开发,公司安排开发文件系统,临时进行学习开发,系统上线3年未出没有大问题。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。 

 嵌入式 .net mvc 开发(一)WEB搭建-CSDN博客

嵌入式 .net mvc 开发(二)网站快速搭建-CSDN博客

嵌入式 .net mvc 开发(三)网站内外网访问-CSDN博客

嵌入式 .net mvc 开发(四)工程结构、页面提交显示-CSDN博客 ​

嵌入式 .net mvc 开发(五)常用代码快速开发-CSDN博客

 推荐链接:

开源 java android app 开发(一)开发环境的搭建-CSDN博客

开源 java android app 开发(二)工程文件结构-CSDN博客

开源 java android app 开发(三)GUI界面布局和常用组件-CSDN博客

开源 java android app 开发(四)GUI界面重要组件-CSDN博客

开源 java android app 开发(五)文件和数据库存储-CSDN博客

开源 java android app 开发(六)多媒体使用-CSDN博客

开源 java android app 开发(七)通讯之Tcp和Http-CSDN博客

开源 java android app 开发(八)通讯之Mqtt和Ble-CSDN博客

开源 java android app 开发(九)后台之线程和服务-CSDN博客

开源 java android app 开发(十)广播机制-CSDN博客

开源 java android app 开发(十一)调试、发布-CSDN博客

开源 java android app 开发(十二)封库.aar-CSDN博客

在上个章节里,介绍常用代码,来开发速度,减少大家查找的时间。

本章的主要内容为特殊且可能用到的代码。

具体内容如下:

1.服务器上CMD控制台控制第三方程序运行的办法。

2.服务器周期任务编写。

3.服务器中使用搜狐SMTP邮箱发送邮件的办法。

一、服务器上第三方程序的运行,在有些时候我们需要用到第三方的程序,比如创建记事本,使用编译器编译代码等。这个时候要想让这些程序运行起来,通常需要用到控制台,这里就采用.bat脚本调用CMD控制来控制第三方程序。

1.1  以下为.net mvc源代码,该函数实现了工程根目录下运行.bat脚本的功能。

public bool batRun(string path){// 指定批处理文件路径//string batFilePath = Server.MapPath("~/Scripts/build_keil.bat");;string batFilePath = Server.MapPath("~/File/" + path);// 创建进程启动信息ProcessStartInfo psi = new ProcessStartInfo{FileName = batFilePath,WorkingDirectory = Path.GetDirectoryName(batFilePath),UseShellExecute = false,CreateNoWindow = true,RedirectStandardOutput = true,RedirectStandardError = true};// 启动进程try{using (Process process = Process.Start(psi)){// 读取输出(可选)string output = process.StandardOutput.ReadToEnd();string errors = process.StandardError.ReadToEnd();process.WaitForExit();ViewBag.Message = "批处理执行完成。输出: " + output;if (!string.IsNullOrEmpty(errors)){ViewBag.Error = "错误: " + errors;}else{return true;}}}catch (Exception ex){ViewBag.Error = "执行批处理时出错: " + ex.Message;}return false;}

1.2  以下代码为build_keil.bat代码,通过该代码调用了程序编译器keil,编译指定工程。

@echo off
chcp 65001 > nul
cd /d "%~dp0"set UV_PATH="C:\Keil_v5\UV4\UV4.exe"
set PROJECT="C:\Users\Administrator\Desktop\CompileSys\CompileSys\File\Prj\Bldc_Hall\Project\keil\project.uvprojx"
set LOG_FILE="build_log.txt"echo 正在编译 Keil 工程...
%UV_PATH% -b %PROJECT% -j0 -o %LOG_FILE%if %errorlevel% equ 0 (echo 编译成功!
) else (echo 编译失败,请检查 %LOG_FILE%
)timeout /t 2  

二、定时处理代码,在服务器中通常是客户提交,才会触发服务器返回。但是经常服务器需要进行周期性的任务。

2.1  定义了一个名为 AutoTaskAttribute 的自定义属性类,用于实现基于反射的定时任务调度系统。

2.2  AutoTaskAttribute.cs的具体代码

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using System.Web;namespace SaleSystem_20221225.MyClass
{/// <summary>/// Author:BigLiang(lmw)/// Date:2016-12-29/// </summary>[AttributeUsage(AttributeTargets.Class)]//表示此Attribute仅可以施加到类元素上public class AutoTaskAttribute : Attribute{/// <summary>/// 入口程序/// </summary>public string EnterMethod { get; set; }/// <summary>/// 执行间隔秒数(未设置或0 则只执行一次)/// </summary>public int IntervalSeconds { get; set; }/// <summary>/// 开始执行日期/// </summary>public string StartTime { get; set; }//保留对Timer 的引用,避免回收private static Dictionary<AutoTaskAttribute, System.Threading.Timer> timers = new Dictionary<AutoTaskAttribute, System.Threading.Timer>();/// <summary>/// Global.asax.cs 中调用/// </summary>public static void RegisterTask(){//异步执行该方法new Task(() => StartAutoTask()).Start();}/// <summary>/// 启动定时任务/// </summary>private static void StartAutoTask(){var types = Assembly.GetExecutingAssembly().ExportedTypes.Where(t => Attribute.IsDefined(t, typeof(AutoTaskAttribute))).ToList();foreach (var t in types){try{var att = (AutoTaskAttribute)Attribute.GetCustomAttribute(t, typeof(AutoTaskAttribute));if (att != null){if (string.IsNullOrWhiteSpace(att.EnterMethod)){throw new Exception("未指定任务入口!EnterMethod");}var ins = Activator.CreateInstance(t);var method = t.GetMethod(att.EnterMethod);if (att.IntervalSeconds > 0){int duetime = 0; //计算延时时间if (string.IsNullOrWhiteSpace(att.StartTime)){duetime = 1000;}else{var datetime = DateTime.Parse(att.StartTime);if (DateTime.Now <= datetime){duetime = (int)(datetime - DateTime.Now).TotalSeconds * 1000;}else{duetime = att.IntervalSeconds * 1000 - ((int)(DateTime.Now - datetime).TotalMilliseconds) % (att.IntervalSeconds * 1000);}}timers.Add(att, new System.Threading.Timer((o) =>{method.Invoke(ins, null);}, ins, duetime, att.IntervalSeconds * 1000));}else{method.Invoke(ins, null);}}}catch (Exception ex){//LogHelper.Error(t.FullName + " 任务启动失败", ex);Debug.WriteLine(t.FullName + " 任务启动失败", ex);}}}}
}

2.3  AutoTaskAttribute的使用办法,工程中的控制器代码都是针对页面提交的处理,只有在Global.asax是从服务器启动以后一直运行,所以应该在Global.asax进行使用。

定义"StartTask"函数,定时3600s,1小时

定义StartTask函数处理程序

三、服务器中使用搜狐SMTP邮箱发送邮件的办法。

public string sendEmail(string StrDate){/*try{*///发送者邮箱账户string sendEmail = "XXX@sohu.com";//发送者邮箱账户授权码string code = "XXXX";//独立密码//发件人地址MailAddress from = new MailAddress(sendEmail);MailMessage message = new MailMessage();//收件人地址message.To.Add("XXX@163.com");message.To.Add("XXX@163.com");message.To.Add("XXX@s163.com");//标题message.Subject = DateTime.Now.ToString("yyyy-MM-dd") + "送货单";message.SubjectEncoding = Encoding.UTF8;message.From = from;//邮件内容message.Body = "附件为当天送货单";message.IsBodyHtml = true;message.BodyEncoding = Encoding.UTF8;string strFile = StrDate + ".xlsx";message.Attachments.Add(new Attachment(@"G:\SaleS\" + strFile ));//获取或设置此电子邮件的发送通知。message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;SmtpClient client = new SmtpClient();client.EnableSsl = true;client.Host = "smtp.sohu.com";//smtp服务器client.Port = 25;//smtp端口//发送者邮箱账户和授权码client.Credentials = new NetworkCredential(sendEmail, code);client.Send(message);return "发送成功";/*    }catch (Exception e){return e.ToString();}*/}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89643.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV图像边缘检测

一、边缘检测基础概念 边缘检测是图像处理中最基本也是最重要的操作之一&#xff0c;它能识别图像中亮度或颜色急剧变化的区域&#xff0c;这些区域通常对应物体的边界。OpenCV提供了多种边缘检测方法&#xff0c;从传统的算子到基于深度学习的现代方法。 1.1 为什么需要边缘…

(Arxiv-2024)自回归模型优于扩散:Llama用于可扩展的图像生成

自回归模型优于扩散&#xff1a;Llama用于可扩展的图像生成 paper是香港大学发布在Arxiv2024的工作 paper title:Autoregressive Model Beats Diffusion: Llama for Scalable Image Generation Code:链接 Abstract 我们介绍了LlamaGen&#xff0c;一种新的图像生成模型系列&am…

高频SQL50题 第九天 | 1164. 指定日期的产品价格、1204. 最后一个能进入巴士的人、1907. 按分类统计薪水

1164. 指定日期的产品价格 题目链接&#xff1a;https://leetcode.cn/problems/product-price-at-a-given-date/description/?envTypestudy-plan-v2&envIdsql-free-50 状态&#xff1a;已完成 考点&#xff1a; group by select语句中使用聚合函数max()&#xff1a;获取…

Java内存模型(JMM)深度解析

1. 引言 在当今多核处理器和并发编程盛行的时代&#xff0c;Java工程师们在构建高性能、高可用系统时&#xff0c;常常会面临复杂的线程安全挑战。数据不一致、竞态条件、死锁等问题&#xff0c;不仅难以调试&#xff0c;更可能导致系统行为异常。这些问题的根源&#xff0c;往…

参数仅 12B! FLUX.1-Kontext-dev 实现高效文本驱动图像编辑,性能媲美 GPT-4o

FLUX.1-Kontext-dev 是由 Black Forest Labs 团队于 2025 年 6 月 26 日联合发布的生成与编辑图像的流匹配&#xff08;flow matching&#xff09;模型。FLUX.1 Kontext 的图像编辑是广泛意义上的图像编辑&#xff0c;不仅支持图像局部编辑&#xff08;对图像中的特定元素进行针…

Robot---能打羽毛球的机器人

1 前言 Robot系列主要介绍一些比较有意思的机器人&#xff0c;前面的博客文章中也给读者朋友们展示了一些&#xff1a; 《人形机器人---越来越像人了》 《自动驾驶---两轮自行车的自主导航》 《自动驾驶---会打架的“球形机器人”》 《Robot---SPLITTER行星探测机器人》 《Robo…

浏览器默认非安全端口列表

浏览器默认非安全端口列表: https://chromium.googlesource.com/chromium/src.git//refs/heads/master/net/base/port_util.cc 0, // Not in Fetch Spec.1, // tcpmux7, // echo9, // discard11, // systat13, // daytime15, // netstat17, …

在线租房平台源码+springboot+vue3(前后端分离)

大家好&#xff0c;今天给大家带来一个非常完善的 在线租房平台。大家可用学习下系统的设计和源码风格。 视频演示 在线租房平台源码springbootvue3 图片演示 技术栈 后端 技术框架&#xff1a;JDK8SpringBoot Mybatis-Plus 数据库&#xff1a;Mysql8 前端 核心框架 - Vue…

android核心技术摘要

Android APP 默认赋予权限apk签名 apk签名&#xff1a;https://blog.csdn.net/u014763302/article/details/149055647apksign使用反法&#xff1a;[https://www.cnblogs.com/fengxing999/p/11978037.html]从Android源码生成系统签名文件&#xff1a;https://blog.csdn.net/wenz…

离线迁移 Conda 环境到 Windows 服务器:用 conda-pack 摆脱硬路径限制

背景&#xff1a; 在进行深度学习算法的环境部署时&#xff0c;由于生产服务器被彻底隔离外网&#xff0c;只能把conda中env文件夹中的虚拟环境文件夹从开发机直接拷到离线 Windows 服务器。 其中一运行labelimg就报错&#xff1a; Fatal error in launcher: Unable to creat…

vue3+原生javascript 手写日期时间选择框 滚动选择可输入

需求&#xff1a; web端 想要跟手机端一样选择年月日时分&#xff0c;通过滚动选择 实现效果图&#xff1a; 理念&#xff1a; 1.年月日时分 分别为单个输入框&#xff0c;用来做输入修改 2.div把输入框拼接起来&#xff0c;显示出一个日期框的样子 3.年月日时分 下拉给默…

Jetson边缘计算主板:Ubuntu 环境配置 CUDA 与 cudNN 推理环境 + OpenCV 与 C++ 进行目标分类

最近由于业务需求&#xff0c;接触到了Jetson边缘AI计算主板&#xff0c;博主使用的是Jetson Orin NX 16GB这个版本&#xff0c;可以看到其算力达到了100TOPS&#xff0c;这是一个非常恐怖的算力了&#xff0c;接下来便是博主对其的环境配置过程&#xff0c;博主要在该主板上运…

CLIP模型实现中的其他细节

之前已经完整的拆解了CLIP中所用到的ResNet、ViT和Transformer三个模型&#xff08;CLIP拆解-CSDN博客&#xff09;&#xff0c;这篇将讲解model.py实现中的其他细节。 1.关于ResNet模型中vision_head的设置 ResNet: vision_heads vision_width * 32 // 64 ViT: vision_h…

国科大深度学习作业1-手写数字识别实验

背景介绍&#xff1a;单位实习&#xff0c;趁机摸鱼&#xff0c;由于电脑只安装了VSCode&#xff0c;所以算是从环境搭建写起。 目录 一、环境搭建 1. 安装Anaconda 2. 创建Python环境 3. 安装PyTorch 4. 安装其他必要库 二、在 VSCode 中配置环境 1. 安装Pytho…

基于Spring Boot的绿园社区团购系统的设计与实现

第1章 摘 要 本设计与实现的基于Spring Boot的绿园社区团购系统&#xff0c;旨在为社区居民提供一套高效、便捷的团购购物解决方案。随着电子商务的发展和社区居民对便捷购物需求的增加&#xff0c;传统的团购模式已无法满足用户的个性化需求。本系统通过整合现代化技术&…

【51单片机四位数码管从0循环显示到99,每0.5秒增加一个数字,打击键计数】2022-6-11

缘由 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64,15,56}; //共阴0~F消隐减号 unsigned char Js0, miao0;//中断计时 秒 分 时 毫秒 unsigned int shu0; //bit Mb0;//…

如何通过python脚本向redis和mongoDB传点位数据

向MongoDB传数据 from pymongo import MongoClient #导入库对应的库localhost "172.16.0.203" #数据库IP地址 baseName "GreenNagoya" client MongoClient(localhost, 27017, username"admin", password"zdiai123") #数…

昆仑通泰触摸屏Modbus TCP服务器工程 || TCP客户端工程

目录 一、Modbus TCP服务端 1.设备地址 2.实操及数据 二、Modbus TCP客户端 1.结果及协议解析 一、Modbus TCP服务端 1.设备地址 --单元标识符 DI输入/4个离散输入 DO输出/单个线圈输出 输入寄存器 读输入寄存器操作&#xff0c;写输入寄存器操作 保持寄存器 …

PyTorch 安装使用教程

一、PyTorch 简介 PyTorch 是由 Facebook AI Research 团队开发的开源深度学习框架。它以动态图机制、灵活性强、易于调试而著称&#xff0c;广泛应用于自然语言处理、计算机视觉和学术研究。 二、安装 PyTorch 2.1 通过官网选择安装命令&#xff08;推荐&#xff09; 访问官…

开源功能开关(feature flags) 和管理平台之unleash

文章目录 背景Flagsmith 和 Unleash什么是unleash架构Unleash Edge 安装和使用Unleash SDKs开放API Tokens访问**Server-side SDK (CLIENT)****查询所有 Feature Toggles****查询特定 Toggle** API token typesClient tokensFrontend tokensPersonal access tokensService acco…