前言
来自一位爸爸的需求,由于女儿在家会偷偷玩电脑,就想让hojun帮忙做个电脑开机就马上短信通知他的小程序。短信要钱,邮件免费,当然是选择邮件咯~
当时就在网络上收索了一波,其中一种解决方案是使用一个小软件加windows的bat批处理命令实现开机自动发送邮件的功能。尝试下载这个软件结果直接被360检测成了病毒,直接给清理掉了。
还有一种实现是通过windows的服务来实现的,略微看了一下。由于windows服务还真没接触过,就决定,花一个晚上的时间动手实现一下这个功能。
第一步 开发环境介绍
windows电脑
VisualStudio(博主用的2015)
.Net framework4.0
可以在 C:\Windows\Microsoft.NET\Framework\ 目录看下如下图:(可以发现1-4都有)
image
第二步 开发windows服务
打开vs2015点击新建项目
image
在Visual C#>Windows>经典桌面 下面,这里选择.NET Framework4(因为之前目录下有,我们这里选择有的),再选择Windows服务。名称使用默认的,位置自己选择。点击确定->
image
新建后如下图,我们在这个页面 右键>添加安装程序
image
会跳到这个页面,我们可以在控件上面 右键>属性,也可以点击右侧解决方案资源管理器的属性栏更改其属性。
image
这个给它的Account改为LocalSystem
image
这里添加描述、名称,以及启动方式改为Auto开机自动
image
安装配置好后,回到之前页面,点击蓝色字体跳转到代码视图
image
默认给我们三个方法,一个构造方法、开始以及停止
image
开始coding前,我们还要设置下我们的邮箱
第三步 准备邮箱授权码
这里以QQ邮箱为例,点击设置>账户>
image
点击开启POP3/SMTP服务,会叫你发送短信验证
image
验证完后得到授权码
image
第四步 coding生成
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Net.NetworkInformation;
using System.ServiceProcess;
using System.Text;
using System.Threading;
namespace AutoSendEmail
{
public partial class Service1 : ServiceBase
{
System.Timers.Timer createOrderTimer;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
createOrderTimer = new System.Timers.Timer();
createOrderTimer.Elapsed += new System.Timers.ElapsedEventHandler(Page_Load);
createOrderTimer.Interval = 20000;
createOrderTimer.Enabled = true;
createOrderTimer.AutoReset = true;
createOrderTimer.Start();
}
protected override void OnStop()
{
}
protected void Page_Load(object sender, System.Timers.ElapsedEventArgs args)
{
Ping ping = new Ping();
PingReply pr = ping.Send("baidu.com");
if (pr.Status == IPStatus.Success)
{
//实例化一个发送邮件类。
MailMessage mailMessage = new MailMessage();
//发件人邮箱地址,方法重载不同,可以根据需求自行选择。
mailMessage.From = new MailAddress("1234567890@qq.com");
//收件人邮箱地址。
mailMessage.To.Add(new MailAddress("0987654321@qq.com"));
//邮件标题。
mailMessage.Subject = "电脑状态";
//邮件内容。
mailMessage.Body = "开机";
//实例化一个SmtpClient类。
SmtpClient client = new SmtpClient();
//在这里我使用的是qq邮箱,所以是smtp.qq.com,如果你使用的是126邮箱,那么就是smtp.126.com。
client.Host = "smtp.qq.com";
//使用安全加密连接。
client.EnableSsl = true;
//不和请求一块发送。
client.UseDefaultCredentials = false;
//验证发件人身份(发件人的邮箱,邮箱里的生成授权码);
client.Credentials = new NetworkCredential("1234567890@qq.com", "xxxxxxxxxxxx");
//发送
client.Send(mailMessage);
//Context.Response.Write("发送成功");
StopWindowsService("AutoSendEmail");
}
}
/// <summary>
/// 开启服务
/// </summary>
/// <param name="windowsServiceName">服务名称</param>
static void StartWindowsService(string windowsServiceName)
{
using (System.ServiceProcess.ServiceController control = new System.ServiceProcess.ServiceController(windowsServiceName))
{
if (control.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
{
Console.WriteLine("服务启动......");
control.Start();
Console.WriteLine("服务已经启动......");
}
else if (control.Status == System.ServiceProcess.ServiceControllerStatus.Running)
{
Console.WriteLine("服务已经启动......");
}
}
}
/// <summary>
/// 停止服务
/// </summary>
/// <param name="windowsServiceName">服务名称</param>
static void StopWindowsService(string windowsServiceName)
{
using (System.ServiceProcess.ServiceController control = new System.ServiceProcess.ServiceController(windowsServiceName))
{
if (control.Status == System.ServiceProcess.ServiceControllerStatus.Running)
{
Console.WriteLine("服务停止......");
control.Stop();
Console.WriteLine("服务已经停止......");
}
else if (control.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
{
Console.WriteLine("服务已经停止......");
}
}
}
}
}
代码完成后 右键>生成
image
在输出窗口拷贝生成目录
image
在电脑中打开如下:
image
在这个目录下新建两个txt文档,内容如下:
安装.txt
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319\
InstallUtil.exe
InstallUtil E:\C#Workspace\lab\WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe
pause
卸载.txt
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319\
InstallUtil.exe
InstallUtil.exe /u E:\C#Workspace\lab\WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe
pause
然后将其扩展名改为bat
image
右键>以管理员身份运行
image
出现如下提示表示安装成功
image
回到桌面,开始右键>打开控制面板
image
搜索服务,并打开
image
按名称排序,找到我们的AutoSendEmail服务
image
右键启动
image
手机上收到邮件如下
image
卸载的话也是右键>以管理员身份运行
image
致谢
杂记2:VS2013创建Windows服务实现自动发送邮件,作者:wuxiaochao
C#实现发送给QQ邮件,作者:谢尊旭
Windows服务实现自动发送邮件通知,云栖社区,来源互联网
网友评论