開源 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
英文地址,請注明出處:http://en.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…