windows服务定时发送电子邮件

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Diagnostics;
  6 using System.Linq;
  7 using System.ServiceProcess;
  8 using System.Text;
  9 using System.Threading.Tasks;
 10 using System.IO;
 11 using MmxChina.StartExhibition.userInfos;
 12 using System.Threading;
 13 using Microsoft.Office.Interop.Excel;
 14 using System.Data.SqlClient;
 15 using System.Net.Mail;
 16 using System.Net.Mime;
 17 using System.Collections;
 18 
 19 
 20 
 21 namespace Mmxchina.StarExhibition.Service
 22 {
 23 
 24     public partial class Service1 : ServiceBase
 25     {
 26 
 27         public Service1()
 28         {
 29             InitializeComponent();
 30         }
 31 
 32         //启动服务
 33         protected override void OnStart(string[] args)
 34         {
 35             Thread thread = new Thread(new ThreadStart(print));
 36             thread.Start();
 37         }
 38 
 39         //停止服务
 40         protected override void OnStop()
 41         {
 42 
 43         }
 44 
 45         //服务业务开始
 46         private void print()
 47         {
 48             while (true)
 49             {
 50                 Thread.Sleep(1000);
 51                 if (DateTime.Now.ToLongTimeString() == "0:00:01")
 52                 {
 53                     ProcessExcels(1);
 54                 }
 55             }
 56         }
 57 
 58         /// <summary>
 59         /// 准备数据
 60         /// </summary>
 61         public void ProcessExcels(int doNums)
 62         {
 63             string logInfoPath = "c:\\" + DateTime.Now.GetDateTimeFormats(D)[0].ToString() + "星展日志信息.txt";
 64             //开始准备数据
 65             File.AppendAllText(logInfoPath, DateTime.Now.ToString("yyyyMMddHHmmss") + ":开始准备数据\r\n", Encoding.UTF8);
 66             SqlConnection conn = new SqlConnection("Data Source=112.124.56.152;Initial Catalog=DB_StartExhibition;User ID=wangman;pwd=wangman");
 67             conn.Open();
 68             SqlDataAdapter adapter = new SqlDataAdapter("select row_number() over (order by id desc) as 序号, userName 姓名, userTelPhone 电话, userCity 城市,case isConsumer when ‘1‘ then ‘是‘ when ‘0‘ then ‘否‘ end 是否是星展客户,userEmail 您的邮箱,createTime 上行时间 from userInfos  where createTime between  CONVERT(varchar (100),(getdate()-1),23) and CONVERT(varchar (100),getdate(),23)", conn);
 69             DataSet dataSet = new System.Data.DataSet();
 70             adapter.Fill(dataSet);
 71             conn.Close();
 72             if (dataSet.Tables[0].Rows.Count <= 0)
 73             {
 74                 CreateMessageWithAttachment(null, "星展昨天无用户数据", "星展昨天无用户信息", "891142430@qq.com", "王曼", "");
 75                 return;
 76             }
 77 
 78             Microsoft.Office.Interop.Excel.Application _excelApplicatin = null;
 79             Workbook _workBook = null;
 80             Worksheet _workSheet = null;
 81             Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//引用Excel对象 
 82             _excelApplicatin = new Microsoft.Office.Interop.Excel.Application();
 83             _excelApplicatin.Visible = false;
 84             _excelApplicatin.DisplayAlerts = false;
 85             _workBook = _excelApplicatin.Workbooks.Add(true);
 86             _workSheet = (Worksheet)_workBook.ActiveSheet;
 87             /*标题信息*/
 88             _workSheet.Name = "星展用户信息";
 89             _workSheet.get_Range("A1", "G1").Merge(_workSheet.get_Range("A1", "F1").MergeCells);
 90             _workSheet.get_Range("A1", "H1").HorizontalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;
 91             _workSheet.get_Range("A1", "H1").Font.Size = 18;
 92             _workSheet.get_Range("A1", "H1").RowHeight = 30;
 93             _workSheet.get_Range("A1", "H1").Font.Bold = true;
 94             _workSheet.Cells[1, 1] = DateTime.Now.AddDays(-1).GetDateTimeFormats(D)[0].ToString() + "星展用户信息";
 95             /*标题信息*/
 96             /*表头信息*/
 97             int colIndex = 0;
 98             int rowIndex = 2;
 99             foreach (DataColumn col in dataSet.Tables[0].Columns)
100             {
101                 colIndex++;
102                 _workSheet.Cells[rowIndex, colIndex] = col.ColumnName;
103             }
104             _workSheet.get_Range("A2", "G2").RowHeight = 20;
105             _workSheet.get_Range("A2", "G2").Font.Bold = true;
106             _workSheet.get_Range("A1", "I" + dataSet.Tables[0].Rows.Count + 3).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;
107             _workSheet.get_Range("A1", "I" + dataSet.Tables[0].Rows.Count + 3).NumberFormatLocal = "@";
108             /*表头信息*/
109 
110             foreach (DataRow row in dataSet.Tables[0].Rows)
111             {
112                 rowIndex++;
113                 colIndex = 0;
114                 foreach (DataColumn col in dataSet.Tables[0].Columns)
115                 {
116                     colIndex++;
117                     if (colIndex == 7)
118                         _workSheet.Cells[rowIndex, colIndex] = DateTime.Parse(row[col.ColumnName].ToString()).GetDateTimeFormats(f)[0].ToString();
119                     else
120                         _workSheet.Cells[rowIndex, colIndex] = row[col.ColumnName];
121                 }
122 
123             }
124 
125             _workSheet.get_Range("A2", "H1").EntireColumn.AutoFit();
126             _workBook.SaveAs("c:\\" + DateTime.Now.AddDays(-1).GetDateTimeFormats(D)[0].ToString() + "星展用户信息");
127             _workBook.Close();
128             _excelApplicatin.Quit();
129             File.AppendAllText(logInfoPath, DateTime.Now.ToString("yyyyMMddHHmmss") + ":数据准备完毕\r\n", Encoding.UTF8);
130             File.AppendAllText(logInfoPath, DateTime.Now.ToString("yyyyMMddHHmmss") + ":开始发送数据\r\n", Encoding.UTF8);
131             try
132             {
133                 string[,] mailBoxs = { { "王曼", "wangman@mmxchina.com.cn" }, { "陈高峰", "gaofeng@mmxchina.com.cn" } };
134                 for (int i = 0; i < mailBoxs.GetLength(0) - 1; i++)
135                 {
136                     File.AppendAllText(logInfoPath, DateTime.Now.ToString("yyyyMMddHHmmss") + ":正在给" + mailBoxs[i, 0] + "发送邮件\r\n", Encoding.UTF8);
137                     CreateMessageWithAttachment(new string[] { "c:\\" + DateTime.Now.AddDays(-1).ToLongDateString().ToString() + "星展用户信息.xlsx" }, "星展用户信息", "您好:昨天有" + dataSet.Tables[0].Rows.Count + "人登记信息,请打开附件查看详细系信息。   以上,谢谢!", mailBoxs[i, 1], "星展客户", "");
138                 }
139 
140                 File.AppendAllText(logInfoPath, DateTime.Now.ToString("yyyyMMddHHmmss") + ":数据发送成功\r\n", Encoding.UTF8);
141             }
142             catch (Exception err)
143             {
144                 File.AppendAllText(logInfoPath, DateTime.Now.ToString("yyyyMMddHHmmss") + ":数据发送失败.   失败原因:" + err.Message + "\r\n", Encoding.UTF8);
145                 Thread.Sleep(5000);
146                 if (doNums <= 3)
147                     ProcessExcels(++doNums);
148                 if (doNums == 4)
149                 {
150                     File.AppendAllText(logInfoPath, DateTime.Now.ToString("yyyyMMddHHmmss") + ":已尝试发送三次邮件,仍无法送达对方服务器...\r\n", Encoding.UTF8);
151                     CreateMessageWithAttachment(null, "星展用户信息未送达服务器", null, "gaofeng@mmxchina.com.cn", "陈高峰", "");
152                 }
153             }
154 
155         }
156 
157         /// <summary>
158         /// 发送邮件
159         /// </summary>
160         /// <param name="filePaths">文件路径数组可附件多个文件</param>
161         /// <param name="title">标题</param>
162         /// <param name="content">邮件躯体【当指定邮件内容为html格式时此值可为null】</param>
163         /// <param name="toUser">接收邮件地址</param>
164         /// <param name="toUserName">接收人姓名</param>
165         /// <param name="htmlPath">html格式的邮件</param>
166         /// 参考地址
167         /// http://www.cnblogs.com/cykevin/archive/2011/04/12/2013542.html
168         /// http://www.cnblogs.com/panthervic/archive/2012/08/08/2629068.html
169         public static void CreateMessageWithAttachment(string[] filePaths, string title, string content, string toUser, string toUserName, string htmlPath = "")
170         {
171             // 1, Create a message and set up the recipients.创建一个邮件,设置发送人,收信人以及主题,正文 
172             //电子邮件信息类
173             System.Net.Mail.MailAddress fromAddress = new System.Net.Mail.MailAddress("man_it@163.com", "北京无线互联广告有限公司");//发件人Email,在邮箱是这样显示的,[发件人:小明<panthervic@163.com>;]
174             System.Net.Mail.MailAddress toAddress = new System.Net.Mail.MailAddress(toUser, toUserName);//收件人Email,在邮箱是这样显示的, [收件人:小红<43327681@163.com>;]
175             System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage(fromAddress, toAddress);//创建一个电子邮件类
176             mailMessage.Subject = title;
177 
178             if (htmlPath != "")
179             {
180                 string contentFilePath = (htmlPath);//邮件的内容可以是一个html文本.
181                 System.IO.StreamReader read = new System.IO.StreamReader(contentFilePath, System.Text.Encoding.GetEncoding("GB2312"));
182                 string mailBody = read.ReadToEnd();
183                 read.Close();
184                 mailMessage.Body = mailBody;//可为html格式文本
185                 mailMessage.IsBodyHtml = true;//邮件内容是否为html格式
186             }
187             else
188             {
189                 mailMessage.Body = content;//可为html格式文本
190             }
191 
192             //mailMessage.Body = "邮件的内容";//可为html格式文本
193             mailMessage.SubjectEncoding = System.Text.Encoding.UTF8;//邮件主题编码
194             mailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");//邮件内容编码
195             mailMessage.Priority = System.Net.Mail.MailPriority.High;//邮件的优先级,有三个值:高(在邮件主题前有一个红色感叹号,表示紧急),低(在邮件主题前有一个蓝色向下箭头,表示缓慢),正常(无显示).
196 
197             // 2,Create  the file attachment for this e-mail message.创建邮件附件 
198             if (filePaths != null)
199                 foreach (string filePath in filePaths)
200                 {
201                     Attachment data = new Attachment(filePath, MediaTypeNames.Application.Octet);
202                     mailMessage.Attachments.Add(data);// 添加附件 
203                 }
204 
205             // 5,创建发送端,配置发送端Send the message. 
206             SmtpClient client = new SmtpClient("smtp.163.com");
207             client.UseDefaultCredentials = false;
208             // Add credentials if the SMTP server requires them. 
209             client.Credentials = new System.Net.NetworkCredential("man_it@163.com", "aaaa");
210             // 6,发送
211             try
212             {
213                 client.Send(mailMessage);// 发送 
214             }
215             catch
216             {
217                 mailMessage.Dispose();
218                 client.Dispose();
219                 throw new Exception("邮件服务器异常.信息未发出!");
220             }
221 
222         }
223 
224 
225     }
226 }

 

windows服务定时发送电子邮件

上一篇:window.open()方法(弹出层)


下一篇:Windows on Device 项目实践 1 - PWM调光