电脑开机自动发送邮件通知

前言

来自一位爸爸的需求,由于女儿在家会偷偷玩电脑,就想让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服务实现自动发送邮件通知,云栖社区,来源互联网

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,914评论 25 707
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,211评论 4 16
  • 这个世界上有两种人最幸福:一种是澹泊宁静的平凡人,一种是功成名就的杰出者。 如果你是平凡人,你可以通过修炼内心、减...
    五福_4295阅读 141评论 0 0
  • 以时间换空间是指?待解…… 笨鸟先飞,我花更多时间来学习、工作,取得与别人相同或更好的结果,就是一种时间换空间。 ...
    池浅笑安然阅读 2,033评论 0 1
  • 一:对于过去发生的事,找到最令你烦恼,最令你担心的人和事,让它们像放电影一样重新演一遍。你会发现内心立刻会紧缩,抓...
    陈文玲觉醒阅读 339评论 0 1