Herkesin bir dönem uğraştığı, Windows Servis ile bende uğraştım. Firma için yapmam gereken Windows Servis, 30 dk da bir alt yöneticiye, 40 dk da bir de üst yöneticiye mail atıyor. Bu mail’i atma nedeni, bu projede Teknik Servis’e gelen taleplerin 30 dk içersinde karşılanmaması durumunda müdahale etmektir.Aşağıdaki kodu Visual Studio’da gerekli yerleri değiştirerek rahatça çalıştırabilirsiniz. Veritabanı adı kısmı ve mail gönderecek olan server adresini değiştirmeniz durumunda bir sorun çıkmayacaktır.Kod bloğunda da zaman zaman açıklama satırları eklemeye çalıştım. Yine takıldığınız bir yer olursa sorabilirsiniz.using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Linq;using System.ServiceProcess;using System.Text;using System.Timers;using System.Data.SqlClient;using System.Net.Mail;using System.Net;namespace MailAtanWindowsServis{public partial class MailAtanServis : ServiceBase{Timer Zamanlayici;SqlConnection conn;public MailAtanServis(){InitializeComponent();Zamanlayici = new Timer(30000);conn = new SqlConnection(@”data source=GIFTEDSQLEXPRESS;initial catalog = Ticket; integrated security = true”);}protected override void OnStart(string[] args){// Servisimiz start oldugu zaman zamanlayıcı adını verdigimiz timer nesnemizi start edelim.Zamanlayici.Start();Zamanlayici.Elapsed += new ElapsedEventHandler(Zamanlayici_Elapsed);}void Zamanlayici_Elapsed(object sender, ElapsedEventArgs e){//Bu kısımda veritanından okuyan kısmı yapıcaz. Yani gidip kontrol edecek ve 2 saat ise mail atacak//Veritabanında bir onay duruma bakarız. Kullanıcı onayı (0,1,2) olmaması lazım. Ayrıca işlem başlangıç zamanına 120 dk ekleriz. Hala çözülmemişse ///mail at.SqlConnection conn = new SqlConnection(@”data source=GIFTEDSQLEXPRESS;integrated security=sspi;initial catalog=Ticket”);SqlCommand comm = new SqlCommand(“SELECT S.ISLEM_BASLANGIC_ZAMAN,S.ONAY_DURUM,S.PERSONEL_ID,P.PERSONEL_BIRIM FROM SORUN_TABLOSU AS S INNER JOIN PERSONEL AS P ON P.PERSONEL_ID=S.PERSONEL_ID WHERE S.ONAY_DURUM=0 OR S.ONAY_DURUM=1”, conn);DataTable dt = new DataTable();try{conn.Open();dt.Load(comm.ExecuteReader());// string dakika = baslangicTarih.ToString().Substring(10, 2);for (int i = 0; i < dt.Rows.Count; i++){string personelBirim = dt.Rows[i][3].ToString();int personelID = Convert.ToInt32(dt.Rows[i][2].ToString());double baslangicTarih = Convert.ToDouble(dt.Rows[i][0].ToString());double sonTarih = baslangicTarih + 30;double sonTarih1 = baslangicTarih + 40;//Bunu alt yönetici için kullanıcazif (Convert.ToDouble(DateTime.Now.ToString("yyyyMMddHHmm")) == sonTarih1){SqlCommand mailAl1 = new SqlCommand("SELECT PERSONEL_MAIL FROM PERSONEL WHERE PERSONEL_BIRIM='" + personelBirim + "' AND PERSONEL_YETKI= 1", conn);SqlCommand comm3 = new SqlCommand("SELECT P.PERSONEL_ADI,P.PERSONEL_BIRIM,S.SORUN_ID,S.ACIKLAMA,DBO.FNK_TARIHI_FORMATLA(S.BASLANGIC_ZAMAN),DBO.FNK_TARIHI_FORMATLA(S.ISLEM_BASLANGIC_ZAMAN),SOR.KATEGORI_ADI,ONAY_ACIKLAMA FROM PERSONEL AS P INNER JOIN SORUN_TABLOSU AS S ON S.PERSONEL_ID=P.PERSONEL_ID INNER JOIN SORUN_KATEGORI_TABLOSU AS SOR ON S.KATEGORI_ID=SOR.KATEGORI_ID INNER JOIN ONAY_TABLOSU AS O ON O.ONAY_DURUM=S.ONAY_DURUM AND (S.ONAY_DURUM=0 OR S.ONAY_DURUM=1) AND P.PERSONEL_ID=" + personelID + "", conn);DataTable dt3 = new DataTable();string mail1 = mailAl1.ExecuteScalar().ToString();dt3.Load(comm3.ExecuteReader());string konu1 = "Bildiren Personel : " + dt3.Rows[0][0].ToString() + "n" + " Personel Birimi : " + dt3.Rows[0][1].ToString() + "n" + "Sorun Id : " + dt3.Rows[0][2].ToString() + "n" + "Açıklama : " + dt3.Rows[0][3].ToString() + "n" + "Bildirim Zamanı : " + dt3.Rows[0][4].ToString() + "n" + "İşlem Başlangıç Zamanı : " + dt3.Rows[0][5].ToString() + "n" + "Kategorisi : " + dt3.Rows[0][6].ToString() + "n" + "Onay Durumu : " + dt3.Rows[0][7].ToString();mailGonder(mail1, "[email protected]", "1234", konu1, dt3.Rows[0][2].ToString() + ". Id Nolu Problem - " + dt3.Rows[0][1]);}//Bunu üst yönetici için kullanıcaz.if (Convert.ToDouble(DateTime.Now.ToString("yyyyMMddHHmm")) == sonTarih){SqlCommand mailAl = new SqlCommand("SELECT PERSONEL_MAIL FROM PERSONEL WHERE PERSONEL_BIRIM='" + personelBirim + "' AND PERSONEL_YETKI= 2", conn);SqlCommand comm2 = new SqlCommand("SELECT P.PERSONEL_ADI,P.PERSONEL_BIRIM,S.SORUN_ID,S.ACIKLAMA,DBO.FNK_TARIHI_FORMATLA(S.BASLANGIC_ZAMAN),DBO.FNK_TARIHI_FORMATLA(S.ISLEM_BASLANGIC_ZAMAN),SOR.KATEGORI_ADI,ONAY_ACIKLAMA FROM PERSONEL AS P INNER JOIN SORUN_TABLOSU AS S ON S.PERSONEL_ID=P.PERSONEL_ID INNER JOIN SORUN_KATEGORI_TABLOSU AS SOR ON S.KATEGORI_ID=SOR.KATEGORI_ID INNER JOIN ONAY_TABLOSU AS O ON O.ONAY_DURUM=S.ONAY_DURUM AND (S.ONAY_DURUM=0 OR S.ONAY_DURUM=1) AND P.PERSONEL_ID=" + personelID + "", conn);DataTable dt2 = new DataTable();string mail = mailAl.ExecuteScalar().ToString();dt2.Load(comm2.ExecuteReader());string konu = "Bildiren Personel : " + dt2.Rows[0][0].ToString() + "n" + " Personel Birimi : " + dt2.Rows[0][1].ToString() + "n" + "Sorun Id : " + dt2.Rows[0][2].ToString() + "n" + "Açıklama : " + dt2.Rows[0][3].ToString() + "n" + "Bildirim Zamanı : " + dt2.Rows[0][4].ToString() + "n" + "İşlem Başlangıç Zamanı : " + dt2.Rows[0][5].ToString() + "n" + "Kategorisi : " + dt2.Rows[0][6].ToString() + "n" + "Onay Durumu : " + dt2.Rows[0][7].ToString();mailGonder(mail, "[email protected]", "1234", konu, dt2.Rows[0][2].ToString() + ". Id Nolu Problem - " + dt2.Rows[0][1]);}}}catch (Exception ex){}finally{conn.Close();}}private void mailGonder(string kime, string kullaniciAdi, string sifre, string konu, string baslik){MailMessage mail = new MailMessage();mail.From = new MailAddress(kullaniciAdi);mail.Priority = MailPriority.High;mail.To.Add(new MailAddress(kime));mail.Body = konu;mail.Subject = baslik;NetworkCredential sad = new NetworkCredential();sad.UserName = kullaniciAdi;sad.Password = sifre;SmtpClient sc = new SmtpClient();sc.Host = "mail.gvg.com.tr";sc.Port = 587;sc.Credentials = sad;sc.Send(mail);}protected override void OnStop(){Zamanlayici.Stop();}protected override void OnContinue(){// Pause olayından tekrar resume butonuna basıldıgında zamanlayıcımızı start edelim .Zamanlayici.Start();}}}