C# Hadi Bir Class Hazırlayalım

Ağustos 10, 2016 Mustafa BÜKÜLMEZ 0 Yorum



Selamlar Arkadaşlar,

Önceki makalemde bundan bahsetmiştim. Şimdi bu işlemi yani class nasıl hazırlanır birlikte ona bir bakalım.

Nasıl bir class hazırlayalım diye düşünürken Mail gönderme class'ı aklıma geldi. Şimdi yapacağımız class da bir mail gönderme class'ıdır.

Şimdi class metod vs olmadan nasıl kullanırız ona bakalım.

1. Yol (Kod hammallığı hat safhada :D - Böyle diyorum ama bende o yollardan geçtim :D )
Senaryomuz da şu olsun. SQL e kayıt eklendiğinde patrona otomatik mail gitsin :D

Kaydet butonun click eventi içerisine....

// SQL işlemlerini yaptık. yani kaydı ekledik.

// Maili gönderiyoruz.
 System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
              
                System.Net.NetworkCredential cred = new System.Net.NetworkCredential("mail@mail.com", "Şifre");
                mail.To.Add(patroununmaili@mail.com);
                mail.Subject = "SQL e kayıt eklendi";
                mail.From = new System.Net.Mail.MailAddress("mail@mail.com", "adın");
                mail.IsBodyHtml = true;
                mail.Body = "Sayın Patron SQL kayıt eklendi haberiniz olsun.";
              
                System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.mail.com", 587);
                smtp.UseDefaultCredentials = false;
                smtp.EnableSsl = true;
                smtp.Credentials = cred;
                smtp.Send(mail);

Bu kodlarla gerekli bilgileri yazdıktan sonra maili gönderebiliriz. Amaaaaa.. Proje genelinde mail gitmesini istediğimiz her durumda bütün bu kodları tekrar yazmamız gerekecektir. Yani bir formun içerisinde 15 kere de mail göndertmek isteyebiliriz.
+ Abi bu ne ya her seferinde bu kadar kod yazılır mı? Yetti gari bunu daha kısa hali yokmu? şöyle tek satırda çözsem işi.... :/ 

/////////////////////////////////////////////////////////////////////////////////////////

2. Yol (Az da olsa kod hammallığı var yinede ama duruma göre kullanılabilir)
Senaryomuz yine aynı.

Bu sefer bir void açarak yapalım aynı işlemi

Kaydet butonun click eventi içerisine....

// SQL işlemlerini yaptık. yani kaydı ekledik.
   MailGonder("patroununmaili@mail.com""SQL e kayıt eklendi","Sayın Patron SQL kayıt eklendi haberiniz olsun.", "sistem maili", "sistemmaili@mail.com","sistem mail şifresi");

void MailGonder(string ToMail, string Subject , string Body , string Adınız, string FromMail, string Sifre )
{
                System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
              
                System.Net.NetworkCredential cred = new System.Net.NetworkCredential(FromMailSifre );
                mail.To.Add(ToMail);
                mail.Subject = Subject ;
                mail.From = new System.Net.Mail.MailAddress(FromMailAdınız);
                mail.IsBodyHtml = true;
                mail.Body = Body ;
              
                System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.mail.com", 587);
                smtp.UseDefaultCredentials = false;
                smtp.EnableSsl = true;
                smtp.Credentials = cred;
                smtp.Send(mail);
}


Burada da gördüğünüz gibi her forma bir adet bu şekilde bir void açarak mail gönderme işlemi yapacağınız yere parametreleri göndererek tek satır kod yazarak mail gönderme işlemini halledebilirsiniz. 
+ Güzel oldu bu ama yinede fazla kod yazıyoruz gibi geliyor. Daha kısa şekli vardır bence....

/////////////////////////////////////////////////////////////////////////////////////////

3. Yol 
Senaryomuz yine aynı.

Bu sefer bir class açarak yapalım aynı işlemi
Classımızı " SendMail " adı ile ekledikten sonra içerisi aynen böyle olacaktır.
Proje adı üzerinde sağ tık yaparak " Add " sonra " Class " diyerek ekleyebilirsiniz.
Direk Class'ı buraya yapıştırıyorum :)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Text;

namespace ProjenizinAdi
{
    class SendMail
    {
        public static bool SendMail(string ToMail, string Subject , string Body , string Adınız, string FromMail, string Sifre )
        {          
             try
            {
                  System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();              
                System.Net.NetworkCredential cred = new System.Net.NetworkCredential(FromMailSifre );
                mail.To.Add(ToMail);
                mail.Subject = Subject ;
                mail.From = new System.Net.Mail.MailAddress(FromMailAdınız);
                mail.IsBodyHtml = true;
                mail.Body = Body ;
              
                System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.mail.com", 587);
                smtp.UseDefaultCredentials = false;
                smtp.EnableSsl = true;
                smtp.Credentials = cred;
                smtp.Send(mail);
            }
             catch
            {
                   return false;
            }
           return true;
        }
    }
}


Kaydet butonun click eventi içerisine....

// SQL işlemlerini yaptık. yani kaydı ekledik.
 SendMail.MailGonder("patroununmaili@mail.com""SQL e kayıt eklendi","Sayın Patron SQL kayıt eklendi haberiniz olsun.", "sistem maili", "sistemmaili@mail.com","sistem mail şifresi");


Burada ilgili form içerisinde tek mail gönderme işlemi yukarıdaki gibidir. Tek satır kullanırsınız. Her formda mail gönderme kodları olmaz.
+Abi işte bu ya işte bu aynen böyle bir kere yaz her yerde kullan.Miss misssss... :D


Gördüğünüz gibi kodda ne kadar kar ettik. Zamandan kaybından, boyut büyüklüğünden ve karmaşıklıktan kurtulmuş olduk böylece.

3. Yol'un en büyük karı merkezi kodlama sistemi olmasıdır. Örn mail gönderirken artık dosya da göndermeniz istendi, yada bir değişiklik yapmanız istendi. Hangisi daha az zaman alır. 

1. Yolda her formu teek teek gezeceksiniz, her mail gönderme blogunu değiştireceksiniz.
2. Yolda yine her formu teek teek gezeceksiniz fakat işiniz biraz daha rahat tek noktada topladınız kodları ama yine de çok sıkıntılı 50 formun varsa ne olacak senin halin.
3. Yolda aç class ı değiştir kaydet hoop bitti. Bu kadar kaç dakika sürecek ;)

Ek NOT: Biz burada " void " dedik voidde geri dönüş değeri vermez. Biz burada void yerine string, int yada bool yapabiliriz. 
Bu dediğim class ve void için geçerlidir ki 3. YOL'a baktığımızda " public static bool " yazıyor ve altında da return true false var. .. 
Peki bunun anlamı nedir ve nasıl kullanırız.

string, int, bool vs yazdığımızda geri dönüş değeri vermek zorundayız. Peki bu ne işe yarayacak? 
Verdiğimiz 3. YOL'dan yola çıkalım. Şimdi örneğimizde bool kullandık yanı ya true(Doğru) değer göndecek yada false(Yanlış). 

Bununla birlikte Try Catch'i da anlatmam lazım ama şimdi üstün körü geçeceğim o başka bir makale konusu :D

Try Catch hata yakalama için kullanılır. 
Try
{
// Buraya kodları yazıyoruz.
}
Catch
{
// try arasındaki kod hata verirse program kırılmaz bu alana geçer
// ve buradaki kodları çalıştırır. buraya girdiğinde kod blogu sona erer ve class tan çıkar.
    return false; 
// bunun anlamı mail gönderilmedi 
// zaten hata verdiği için buraya düştü false gönderdik
}
return true;
//Catch bloğuna girmediği için hata vermemiştir ve true değer gönderir. yani işlem başarılıdır.

İşlemi yaptık geri dönüşü aldık. Bu değeri kullanalım.

if( SendMail.MailGonder("patroununmaili@mail.com""SQL e kayıt eklendi","Sayın Patron SQL kayıt eklendi haberiniz olsun.", "sistem maili", "sistemmaili@mail.com","sistem mail şifresi") == true) 
     MessageBoz.Show("Mail Başarı Gönderildi");
else
     MessageBoz.Show("Mail Gönderilemedi");

Gördüğünüz gibi bu şekilde işlem  başarı / hata kontrolünü yapıp ona göre kullanıcıyı bilgilendirebiliriz.

İşte arkadaşlar bu işlemler tecrübeyle de sabittir. + ile yazdıklarım benim o anki düşüncelerimdi. 

Aklınızda bulunsun her daim.
AYNI KODU 2 KERE YAZIYORSANIZ O İŞTE BİR SIKINTI VARDIR. İLLAKİ KOLAY BİR YOLU VARDIR.



Saygılarımla
Mustafa BÜKÜLMEZ




0 Yorum: