Makale Özeti

Selamlar herkeze bu makale ile VS.NET in Outlook Library'sini kullanarak nasıl mail atabileceğimizi anlatmak istiyorum.

Makale

Merhabalar bu makalem ile sizlere Outlook’u kullanarak nasıl mail atabileceğimizi anlatacağım.

 

 

        C#.NET ‘ i kullanarak mail atmanın birden fazla yolu vardır. dışarıdaki bir makinede bulunan SMTP Server üzerinden yada kendi bilgisayarınızda kurulu olan ISS içindeki SMTP serverı kullanarak mail yollamanız mümkün. Bunların yanında birde bilgisayarınızda ki Microsoft Office ile birlikte gelen Outlook kullanılarak da mail atmamız mümkündür. Outlook kullanarak mail atmamızın bazı avantajları ve dezavantajları vardır.

        Örneğin herhangi birisine mail atmak istediğimiz C#’ta yazdığımız program ile Outlook’ a sadece kime hangi mesajları yollamak istediğimizi iletiriz ve Outlook kendi ayarlarını kullanarak bizim yerimize maili gönderir. Outlook’un kendi ayarlarını kullanarak derken, sizin daha önceden Outlook içerisine mail accountu oluşturmanızdan bahsediyorum.  Sonuç olarak bizim herhangi başka bir tanımlama yapmamıza gerek kalmadan mailimizi yollayabiliyoruz. Fakat Microsoft güvenlik nedeniyle Outlook’tan size bir uyarı mesajı veriyor ki bu mesajı ve görüntüsünü aşağıda yaptığımız örneği açıklarken anlatacağım.

 

 

        Outlook’un bu özelliğini kullanabilmek için projemizi oluşturduktan sonra Outlook referanceını eklememiz lazım. Bunu yapabilmemiz için sağ taraftaki solution penceresinde Projemize sağ tıklayıp Add Referance sekmesine tıklamalıyız.

  

                                                                          

 

 

                         Bu işlemden sonra karşımıza aşağıdaki gibi bir ekran gelecektir.

 

                                       

 

Açılan bu pencerede yukarıdan COM sekmesine gelerek listeden Microsoft Outlook 10.0 Object Library referanceını seçmeliyiz. Burada açıklama yapmak istediğim bir konuda şudur ki ; Buradaki Outlook referance versiyosunu tamamen sizin bilgisayarınızdaki Outlook versiyonu ile ilgilidir. Şu anda benim bu projeyi geliştirdim bilgisayarda Office 2002 yüklü eğer sizin bilgisayarınız Microsoft Office’in farklı bir sürümü mevcutsa, Bu referance listesinde ki bu Outlook Object Library versiyonu faklı görünebilir. Her zaman için listede görünen en yüksek versiyonlu referancı kullanmak daha iyi sonuç verecektir. Çünkü yüksek versiyon her zaman getirdiği yeniliklerin yanında alt versiyonların sunduğu hizmeti de kapsar.

 

Bu işlemden sonra bu Outlook referancı kullanan bir class tanımlamak istiyorum ki bu tür classlar kullanmak büyük projelerde developerlara yardımcı olur.

 

  İlk olarak bir class ekliyoruz projemize OutlookMail.cs isminde.

 

                                              

 

using System;

namespace yazgelistir_outlook

{

      /// <summary>

      /// A simple class that allows you to add an email to MS Outlook Outbox

      /// </summary>

public class OutlookMail

{

 

   private Outlook.Application oApp;

   private Outlook._NameSpace oNameSpace;

   private Outlook.MAPIFolder oOutboxFolder;

     

   /// <summary>

   /// Constructor

   /// </summary>

   public OutlookMail()

   {

         //Referance MAPI layerına geri dönüyor

      oApp = new Outlook.Application();

      oNameSpace= oApp.GetNamespace("MAPI");

 

/***********************************************************************

* Kullanıcının Login olması (oNameSpace.Logon(null,null,true,true);)

* Profile: Eğer null olarak tanımlanırsa güncel kullanıcı accountunda login olunur

*          veya boş bir string tanımlanırsa ("") default Outlook Profili kullanılır

* Şifre: Eğer şifre null olarak tanımlanırsa güncel kullnıcı accout şifresi kullanılarak login olunur.

*        veya boş bir string tanımlanırsa ("") default Outlook profili kullanılır  

* Popup Göster: Eğer bu tanımlama True olarak gösterilirse Mail yollanılırken Outlook Profili gösterilir

* Session Yönetimi: True olarak tanımlanırsa yeni bir session oluşturulur, False

                   tanımlanırsa güncel session kullanılır

          ***********************************************************************/

      oNameSpace.Logon(null,null,true,true);

 

     

         //Bu kod ile Güncel Outlook Outbox'umuza ulaşmış oluyoruz

      oOutboxFolder = oNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderOutbox);

   }

  

  

   /********************************************************

    Yeni mailimizi MS outlook Outboxumuza ekliyoruz. Bunun için sizinde aşağıda gördüğünüz üzere

      addToOutBox functionını kullanıcaz

    "toValue"==> Mailin gideceği kimselerin mail adresleri

    "subjectValue" ==> Mail konusu

    "bodyValue" ==> Mail mesajı

    *******************************************************/

   public bool addToOutBox(string toValue, string subjectValue, string bodyValue,string attachValue)

   {

     

        //Yeni bir MailItem objesi yarattık

      Outlook._MailItem oMailItem = (Outlook._MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);     

         try

         {

               //Mail özelliklerini oluşturduğumuz MailIteme tek tek eşitliyoruz.

               oMailItem.To = toValue;  

               oMailItem.Subject = subjectValue;

               oMailItem.Body = bodyValue;

         //Attachlama işlemi yaparken 4 parametreye ihtiyacımız var sırasıyla

         //attachment dosyasının yolu,Type,positionı ve attach yapacağımız dosyanın isminin ne olarak görüneceği

               oMailItem.Attachments.Add(attachValue,1,1,"appident");

           //Bu işlem ile yolladığımız maili outlooktaki sent message klasörüne kayıt ettiriyoruz

               oMailItem.SaveSentMessageFolder = oOutboxFolder;

                     

               //Bu commet isteğe bağlı olarak kullanılabilir. Bunun sayetsinde yazdığımız maili

               //Draft Folderına kayıt edebiliriz.Fakat ben bu kısmı kullanmadım örneğimizde.

               //Outlookun bu tür loglama özelliğide bize ayrı bir avantaj sağlıyor diyebiliriz.

               //oMailItem.Save();

 

               //Son olarak mesajımızı outbozumuza yerleştiriyoruz ve mailimiz gönderiliyor.

               oMailItem.Send();

         return true;

         }

         catch

         {

          return false;

         }

 

   }

 

}

}

 

Bu clasın içerisinde de bahsettiğim gibi Outlook’un log tutma özelliği bize ayrı bir avantaj sağlıyor ki bunu ayalardan daha da detaylı hale getirmemiz mümkündür.

 

Bu class ımızı hazırlayıp anlattık sonra sıra geldi Formumuzu incelemeye.

 

                                                    

 

Formumuzda gördüğünüz gibi her mail de olması gereken temel Itemler mevcut.(Kime, Konu, Ek, Mesaj). Şimdi Bu formumuzda bulunan “Gözat” ve “Gönder” buttonlarımızın kodlarını inceleyelim.

 

İlk olarak Gözat buttonumuzu inceleyelim. Bu button syesinde mailimize yapacağımız attachment dosyasının yolunu almış oluyoruz.

Bu işlemi gerçekleştirebilmek için ilk olarak ToolBox’ın altındaki Window Forms sekmesindeki “OpenFileDialog” controlünü projemize dahil ediyoruz. Bu controlün ismi default olarak “OpenFileDialog1” geliyor bende bunu değiştirmeden “Gözat” düğmesini kodlarını yazarken bu şekilde kullanıcağım.

 

private void button_gozat_Click(object sender, System.EventArgs e)

{

 openFileDialog1.InitialDirectory = Directory.GetCurrentDirectory();

                  openFileDialog1.Filter = "Any Files ( *.* )| *.*";

                  openFileDialog1.FilterIndex = 1;

                 

                  //DialogBoxumuzun sonucu True ise

                  if( openFileDialog1.ShowDialog() == DialogResult.OK )                             

                  {

                        textBox_ek.Text =openFileDialog1.FileName;

                  }                

}

Bu işlem sonucunda Mailimize ekleyeceğimiz dosya ekimizin yolunu “textBox_ek.text” özelliğine atamış oldum.

 

2. olarak sıra geldi gönderme işlemini gerçekleştireceğimiz “Gönder” düğmesinin kodlarını inceleyelim.

 

private void button_gonder_Click(object sender, System.EventArgs e)

{

  //ilk olarak bir OutlookMail classımızı oluşturuyoruz oluşturuyorum

  yazgelistir_outlook.OutlookMail oMail=new yazgelistir_outlook.OutlookMail();

                 

//addToOutBox functionımız boolean bir function oldugundan dolayı bize True veya False

//döndürecektir buna bağlı olarak kullanıcıya mesaj vererek bilgi verebiliriz.

if(oMail.addToOutBox(textBox_kime.Text,textBox_konu.Text,textBox_msj.Text,

    textBox_ek.Text))

      label_durum.Text="Durum: Mailiniz Başarıyla Gönderilmiştir.";

else

      label_durum.Text="Durum: Mailiniz Gönderilemedi!";

}

 

 Yukarıdaki kodumuzda gördüğünüz üzere ilk olarak bir OutlookMail class ımızı oluşturuyoruz ve daha sonra bu classımızın içerisinde tanımladığımızı “addToOutBox” mailimize Mailimizin kimlere gideceğini, konusunu,mesajımızı, ve attachment dosyamızı gönderiyoruz. Ve bu functionımız bize True yada False olarak dönüyor bizde buna dönen değere göre kullanıcıya bir mesaj veriyoruz.

 

  

Mailimizi yollamak için gerekli yerleri doldurup “Gönder” buttonuna bastığımızda Eğer Outlook’umuzda geçerli bir account tanımlamışsanız size bir mesaj kutusu gösterilecektir. Bu mesaj Microsoft tarafından OutLook için yapılmış.

 

                                    

 

Günümüzde bir çok virüs Windows kullanıcılarının Outlookları üzerinden çoğalmayı hedefledikleri için Microsoft bu tür bir çözüm üretmiştir. Bu mesaj kutusuna evet dediğinizde bizim yaptığımız programımız arkada işini yapmış demek oluyor.

 

 

Bu işlemden sonra Eğer mailimiz gönderilmiş ise yada herhangi bir sorun oluşmuşsa bunu kullanıcılara iletecektir.

 

                                      

 

Gördüğünüz gibi Mailimiz başarıyla yerine iletilmiş. İnboxunuza bakarak teyit edebilirsiniz J Bir başka makalede görüşmek üzere. İyi çalışmalar dilerim.

Programı Kodları ile indirmek için yazgelistir_outlook.zip tıklayın

 

 

yazgelistir_outlook.zip