编写一个Windows服务程序,定时从数据库中拿出记录发送邮件

C#2008实现Windows服务定时自动发送邮件完整源码项目 对于非技术人员操作的场景,推荐使用专业打包工具生成.msi安装包。为了保证高频查询场景下的响应速度,必须对关键字段建立适当索引。以EmailQueue为例,最常见操作是查找的任务,因此应在Status字段上创建非聚集索引。-- 为待处理状态创建非聚集索引此复合索引不仅覆盖查询条件(Status),还包含常用返回字段(Id、CreatedTime、Priority),实现“覆盖索引”效果,减少书签查找(Key Lookup)带来的I/O开销。 阅读详情

前言:编写一个Windows服务程序,定时从数据库中拿出记录发送邮件。

测试环境:Visual Studio 2005 SP1、Windows Server 2003 SP2

一、新建项目

打开VS2005,新建一个“Windows 服务”项目。

二、添加Timer

展开“工具箱”,在“组件”标签下找到“Timer”双击,这时就添加了一个Timer组件,修改“Name”属性为“timEmail”、“Enabled”为“false”、“Interval”为“60000”。

接下来要做一些修补工作,不知是VS2005的BUG还是我没找着地方,在VS2003下是不存在该问题的:刚从“组件”下添加的“Timer”按理说应该来自“System.Timers命名空间”,也只有“System.Timers.Timer”才能在Windows服务程序中正常工作,但是现在这个Timer却是属于“System.Windows.Forms.Timer”的。所以得稍作修改,打开“.Designer.cs”文件,修改如下:

#region 组件设计器生成的代码
//........以上略
/// <summary> 
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
            
this.components = new System.ComponentModel.Container();
            
//this.timEmail = new System.Windows.Forms.Timer(this.components);原
            this.timEmail = new System.Timers.Timer();//改
            this.timEmail.Interval = 60000;
            
this.ServiceName = "Service1";
}
#endregion
//private System.Windows.Forms.Timer timEmail;原
private System.Timers.Timer timEmail;//改

 三、添加配置文件

服务每次调用配置文件,获取一些基本参数,这样一些变更就可直接修改配置文件而不必修改代码。新建ServiceConfig.xml存放于项目“Bin/Debug/”下:

<?xml version="1.0" encoding="utf-8" ?> 
<serviceConfig>
    
<serviceItem 
        
name="sendEmail" 
        enable
="true" 
        elapsed
="60000" 
        connectionString
="your database connection..." 
        smtp
="smtp address" 
        account
="your email account..." 
        password
="your password..." >
    
</serviceItem>
</serviceConfig>

四、以下是实现代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Xml;//操作配置文件
using System.IO;//写日志
using System.Threading;//使用线程

namespace ClientWindowsService
{
    
public partial class ClientService : ServiceBase
    {
        
public ClientService()
        {
            InitializeComponent();
        }

        
protected override void OnStart(string[] args)
        {
            
//服务启动
      this.timEmail.Enabled = true;
            
this.tSendEmail();
        }

        
protected override void OnStop()
        {
            
//服务停止
      this.timEmail.Enabled = false;
        }

        
private void timEmail_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            
//定时器
      this.tSendEmail();
        }

        
//开启新进程发送邮件
    private void tSendEmail()
        {
            Thread t 
= new Thread(new ThreadStart(sendEmail));
            t.Start();
        }

        
//发送邮件函数
    private void sendEmail()
        {
            XmlDocument doc 
= new XmlDocument();
            
//添加System.Windows.Forms引用,获取执行目录
      string configFile = System.Windows.Forms.Application.StartupPath.ToString() + "/ServiceConfig.xml";
            doc.Load(@configFile);
            XmlElement root 
= doc.DocumentElement;
            
foreach (XmlNode node in root)
            {
                
//如果配置文件中开启服务
        if (node.Attributes["name"].Value == "sendEmail" && node.Attributes["enable"].Value == "true")
                {
                    
try
                    {
                        
//读取数据库,发送邮件操作,略
                    }
                    
catch (Exception error)
                    {
                        
//写错误日志
            using (StreamWriter sw = new StreamWriter(System.Windows.Forms.Application.StartupPath.ToString() + @"" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", true, System.Text.Encoding.UTF8))
                        {
                            sw.WriteLine(DateTime.Now.ToString() 
+ ":");
                            sw.WriteLine(error.ToString());
                            sw.WriteLine(
"---------------------------------------------");
                            sw.Close();
                        }
                    }
                }
            }
//end foreach
        }

    }
//end class
}//end namespace

五、布署服务

在设计模式下右键-->添加安装程序-->设置serviceProcessInstaller1的Account为LocalSystem

设置serviceInstaller1的StartType为Automatic

编译

在命令模式下执行:%systemroot%/microsoft.net/framework/v2.0.50727/installUtil.exe D:/项目目录/bin/Debug/可执行文件名.exe

 
windowsService--实现文本的定时写数据操作 windowsService--实现文本的定时写数据操作,服务的开启与结束记录,定时写任务。 立即下载

相关推荐

OpenMV识别颜色源码

【代码】OpenMV识别颜色源码。

dxt258013的博客 403

实现定时发送邮件功能 数据是从数据库中获取到的

我现在刚进一家公司实习,最近要我做一个定时发送邮件的功能,我从网上参考了一些,自己也实现了从数据库获取数据,实现了定时发送邮件的功能,代码如下: 一、首先写一个servlet的监听器 package net.bjgf.util; import java.util.Timer; import javax.servlet.ServletContextEvent; import javax.serv

xueshuangshuang123的专栏 1万+

Fedora 41上安装钉钉7.6.25,我踩过的那些依赖坑和最终解决方案

本文详细记录了在Fedora 41上安装钉钉7.6.25版本的全过程,包括解决依赖问题、转换deb包为rpm格式、处理libm.so.6错误等关键步骤。通过分享这些实用技巧和最终解决方案,帮助Linux用户顺利在Fedora系统上运行钉钉客户端,提升工作效率。

weixin_30485379的博客 206

实习日志--定时从数据库查询数据发送邮件

大四实习期写的第一个小功能:要求是能定时查询数据发送到指定邮箱,使用JDBC连接Oracle数据库 ————————————————我是一条分界线————————————————————— 创建MailAuthenticator类 用来保存发件人账号和密码 package cn.email; import javax.mail.Authenticator; import javax.mail.P...

MarkLuoBo的博客 4610

DETR系列文章之–Co-DETR

Co-DETR,并行训练多个辅助头,以一对多的标签分配方式进行监督从辅助头中提取正样本坐标,为解码器中的正样本的训练效率进行额外的定制化正样本query.一对一标签分配:每个GT框分配给一个特定的query(DETR),较少的正query导致低效训练,从编码器生成的潜在表示和解码器中的注意力学习分析这一问题。一对多标签分配:每个GT框分配给检测器输出的多个proposal/anchor,依赖NMS或者anchor生成(ATSS,RetinaNet,FCOS,PAA)。

weixin_43731232的博客 2107

matianl:SAP 最详细的权限管理解析

上文所说的系统自带权限对象与权限字段仅能满足有限的需要,其权限审核的逻辑也是系统硬编码了的,我们能做的只是是否启用某项权限对象的检查(使用SU22)。如果需要自定义,通过SU20、SU21定义即可。

matinal 當冬夜漸暖 。公众号:matinal 2155

oracle定时推送消息,根据数据库所查数据进行邮件定时发送.md

# 根据数据库所查数据进行邮件定时发送#### [项目地址](https://gitee.com/AirOranges/email-crontab):https://gitee.com/AirOranges/email-crontab#### 功能需求定期从数据库中获取数据,并将所获取数据以邮件形式发送给需求者。#### 介绍定时发送邮件程序,使用多数据库源,可从mysql,oracle 中 读取...

weixin_33431149的博客 873

2024“华为杯”中国研究生数学建模竞赛(A题)深度剖析_数学建模完整过程+详细思路+代码全解析

目标是优化风力涡轮机的功率调度,使其在给定的实时风速数据下,最小化涡轮机关键组件(如塔架和主轴)的疲劳损伤。问题的挑战在于,考虑通信延迟和测量噪声的同时,要确保功率输出与风速变化的响应快速且准确。

2401_82549447的博客 6628

Windows服务定时发送邮件

//定义组件 private System.Timers.Timer time; public int nowhour; public int minutes; public string sendTime; public Thread th; public string isOpen;//是否启用定时发送 public string strToEUser; public...

zq9955的博客 1147

使用MATLAB求解二维顶盖驱动流问题的详细代码和说明

本文介绍了使用MATLAB求解二维顶盖驱动流问题的涡量-流函数方法。代码采用129×129网格,雷诺数Re=1000,通过迭代求解Navier-Stokes方程,包含流函数方程和涡量输运方程的离散求解。程序实现了边界条件处理、收敛性检查,并提供丰富后处理功能:流线图、涡量分布图、中心线速度曲线、矢量图和三维涡量可视化。计算结果可与Ghia等(1982)的经典数据进行验证。该代码完整展示了CFD问题的数值求解流程,包括参数设置、主循环计算和多种结果呈现方式,适用于流体力学教学和科研验证。

AI的内部世界的博客 225

iStoreOS等软路由插件卸载的残留?分享一款软路由高级卸载工具,自定义卸载,轻松解决卸载残留问题

iStoreOS用户看过来!👀 还在被插件包残留困扰吗?本文分享一款“高级卸载”的插件,助你深度清理iStoreOS系统,彻底解决软件卸载不净的痛点,告别频繁恢复出厂设置的烦恼!🚀

XiaoqiangClub的博客 1541

C#创建windows服务并定时执行

一、创建window服务 1、新建项目--&gt;选择Windows服务。默认生成文件包括Program.cs,Service1.cs 2、在Service1.cs添加如下代码:        System.Timers.Timer timer1;  //计时器         public Service1()         {             InitializeComp...

weixin_33910385的博客 401

计算机视觉与深度学习 | 2024年至2025年图像匹配算法总结(原理,公式,代码,开源链接)

以上总结覆盖了当前主流和前沿技术,实际选择需结合具体场景(速度/精度/资源限制)评估。

尘世冰封的专栏 1588

编写一个C#Windows服务程序,定时从数据库中拿出记录发送邮件。

C#Windows服务程序开发实例:   测试环境:Visual Studio 2005 SP1、Windows Server 2003 SP2   C#Windows服务程序开发实例一、新建项目   打开VS2005,新建一个“Windows 服务”项目。   C#Windows服务程序开发实例二、添加Timer   展开“工具箱”,在“组件”标签下找到“Timer”双击,这时就添加了

nieweiking的博客 9693

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

windows service(windows 服务程序应用于自动发送邮件)

 所谓Windows后台服务,即后台自动运行的程序,一般随操作系统启动而启动,在我的电脑 服务后应用程序 服务里面能看到当前电脑的服务.一般而言,程序上用VC、C++写Windows服务,但是我对这些语言不是很熟,一般编程用C#较多,所以就用C#语言写了一个Windows服务.什么是Windows服务?    Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合

liuhuan2099的专栏 5949

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Windows服务程序,定时从数据库中拿出记录发送邮件

前言:编写一个Windows服务程序,定时从数据库中拿出记录发送邮件。 测试环境:Visual Studio 2005 SP1、Windows Server 2003 SP2 一、新建项目 打开VS2005,新建一个“Windows 服务”项目。 二、添加Timer 展开“工具箱”,在“组件”标签下找到“Timer”双击,这时就添加了一个Timer组件,修改“Name

潘晓宇(panxiaoyu)的专栏 861

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

定时运行python脚本并发送邮件_python实现定时发送邮件到指定邮箱

本文实例为大家分享了python实现定时发送邮件到指定邮箱的具体代码,供大家参考,具体内容如下整个链路:传感器采集端采集数据,边缘端上传数据库,从数据库拿到数据。产品端有个自动出报告的需求,并且希望自动出的报告可以定时通过邮件发到指定邮箱中。自动发邮件中也有较多坑,本文特此记录自动发邮件中的坑。使用:Python3.7,win10系统,163邮箱作为发邮件方,QQ邮箱作为收邮件方。**第一步:**...

weixin_35908791的博客 1363

Python定时发送邮件到指定邮箱中

整个链路:传感器采集端采集数据,边缘端上传数据库,从数据库拿到数据。 产品端有个自动出报告的需求,并且希望自动出的报告可以定时通过邮件发到指定邮箱中。 自动发邮件中也有较多坑,本文特此记录自动发邮件中的坑。 使用:Python3.7,win10系统,163邮箱作为发邮件方,QQ邮箱作为收邮件方。 **第一步:**申请两个账号分别作为发送和接收的账号,本文用的是一个163邮箱,一个是qq邮箱。 第一个坑需要注意了,上图是qq邮箱中的邮箱设置,需要在账户中开启POP3/SMTP服务(一定要开启,不然即使Pyt

Fang_Tian_Hua_Ji的博客 985

C# 建一个Windows 服务 定时发邮件

1.打开VS建一个Windows 服务 2.下一步,填好项目名称和项目保存的地址 3.创建之后,右击、选择添加安装程序 4.添加安装程序之后会出现‘serviceInstaller1’=>在此控件上右键=>选择属性=>更改服务名、服务描述、服务显示名。 5.写代码 using System; using System.Collections.Ge...

daijianzhou的专栏 821

Kettle配置自动发送邮件并在数据库中记录运行日志

①通过在WINDOWS下的任务计划程序,在D:\kettle下创建一个bat文件,在D:\kettle\dispatchPRODTCT\mail\创建一个JOB调用KTR文件来实现定时发送邮件的任务。 ②每一次执行操作记录日志:data_etl.t_mail_task 步骤说明 1.1,配置数据库连接,创建一个转换 1.2双击表输入,注意:表连接里不能出现truncat

Angelina7的博客 8530

定时发送邮件

<br />定时发送邮件 方法一 windows服务<br /> <br />前言:项目中遇到定时发送邮件或者信息时,想 调用windows的计划任务,查阅了asp.net资料发现没有,<br />于是上网一搜找到一些方法与大家共享<br />编写一个Windows服务程序,定时从数据库中拿出记录发送邮件。<br />测试环境:Visual Studio 2005 SP1、Windows Server 2003 SP2<br />一、新建项目<br />打开VS2005,新建一个“Windows 服务”项目

东亮博客 5098

win服务器自动发邮件,asp.net基于windows服务实现定时发送邮件的方法

本文实例讲述了asp.net基于windows服务实现定时发送邮件的方法。分享给大家供大家参考,具体如下://定义组件private System.Timers.Timer time;public int nowhour;public int minutes;public string sendTime;public Thread th;public string isOpen;//是否启用定时发...

weixin_30825389的博客 850

powershell 发送邮件

01 前言 最近在搞搞服务器,用的是Windows系统,配合脚本应该有的玩玩,比如间隔多久查一些东西发到指定邮箱,嘿嘿。下面做简单记录。 02 正文 代码贴上 <# # 邮件发送 # 使用smtp协议 # 默认为正文为html格式 # by hokis # 2019-03-27 #> function Send-Email-BySMTP { [CmdletBindi...

HoKis 2934
上一篇: 转帖:C#操作Excel
下一篇: C# 字符串格式化大全
[大楚]
博客等级 码龄25年 13粉丝 7原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值