2 saatte bir mail atan Windows Servis

Bilgisayarda biz farkında olmadan arka planda sessiz sedasız çalışmalarını yürüten, hizmetlerden bahsedeceğiz. BilgisayarımYönetHizmetler gelerek bahsettiğim hizmetleri görebilirsiniz. Projemde bana lazım olan 2 saatte bir kontrol yapan, bir Windows servis yazacağız.

Yazacağımız Windows servis, bir Timer aracılığı ile  Mssql veritabanımızı kontrol edip, istediğimiz koşul gerçekleştiğinde, mail gönderecektir. Sanırım burada açıklamaktansa kodları yazmak daha anlaşılır olacaktır.

Bu arada mail gönderme kısımlarını değiştirdim, oraları kendi server bilginize göre düzenlersiniz. Aşağıdaki kodları Setup olarak kurup, istediğiniz server‘da çalıştırabilirsiniz.

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 + 5;
double sonTarih1 = baslangicTarih + 4;

//Bunu alt yönetici için kullanıcaz

if (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, “mail@ilhanbahar.com”, “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, “nazli.ayhan@gvg.com.tr”, “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.ilhanbahar.com”;
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();

}

}
}

Benzer Yazılar

Henüz yorum yapılmamış

Yorum Yazın

Su elementleri kullanabilirsiniz : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Arama
RSS
Beni yukari isinla