12 Eylül 2009 Cumartesi

Windows Mobile'da SMS ve Email gönderme

Tüm bu işlemleri yapmak için uygulamaıza Microsoft.WindowsMobile.PocketOutlook referansını eklememiz gerekmektedir. Bu referansı ekleyerek uygulamamıza başlayabiliriz.



Makalemize öncelikle uygulamamızdan nasıl sms atacağımızı inceleyerek başlayalım. Sms göndermek için SmsMessage nesnesini kullanacağız. Sms alıcılarını tanımlamak için ise Recipient nesnesini kullanacağız. SmsMessage nesnesi sadece sms mesajları için kullanılırken Recipient nesnesi tüm mesaj tipleri (Email, sms) için kullanılan ortak bir nesnedir. Öncelikle bu nesnelerin özelliklerini ve metodlarını inceleyelim.

SmsMessage nesnesi özellikleri :
Body(String) Bu özellik sms mesajının içeriğini taşımaktadır.
From(Recipient) Bu özellik sms'in kimden geldiği bilgisini taşımaktadır ve readonly bir özelliktir. Sms gönderilirken değil gelen sms'lerin incelenmesinde kullanılan bir özelliktir.
ItemId(ItemId) Bu özellik sms'e ait unique bir değer taşımaktadır. Bu özellik read only'dir.
LastModified(DateTime) Mesajın gönderildiği tarih bilgisini taşıyan özelliktir. Bu özellik read only'dir.
Read(bool) Sms'in okunup okunmadığı bilgisini taşıyan özelliktir. Read only'dir.
Received(DateTime) Sms'in alındığı tarih bilgisini taşıyan özelliktir. Read only'dir.
RequestDeliveryReport(bool) Gönderilen sms için delivery report istenip istenmediğinin tutulduğu özelliktir.
To(RecipientCollection) Sms'in alıcılarının bilgilerinin tutulduğu özelliktir. Her bir alıcı bir Recipient nesnesi ile temsil edilmektedir.

SmsMessage nesnesi metodları :
Send Sms'i göndermek için kullanacağımız metoddur. Sms'in aktif gsm şebekesi üzerinden gönderilmesini sağlar.

Recipient nesnesi özellikleri :
Address(string) Mesaj gönderilecek nokta bilgisini barındıran özelliktir. Sms mesajları için telefon numarası, Email mesajları için ise email adresidir.
Name(string) Mesaj gönderilecek kişiyi barındıran özelliktir.

Recipient nesnesi için bu değerlerin instance alırken tanımlanabileceği yapıcı metodlar mevcuttur. Bu nesnenin boş yapıcı metodu yoktur.

Şimdi isterseniz Sms göndermek için kullanabileceğimiz bir helper class'ını birlikte yazalım.

public static void SendSms(string parBody, string parRecipient)
{
SmsMessage insSmsMessage = new SmsMessage();
insSmsMessage.Body = parBody;
AddRecipient(insSmsMessage, parRecipient);
insSmsMessage.Send();
}
private static void AddRecipient(SmsMessage parSmsMessage, string parRecipient)
{
AddRecipient(parSmsMessage, new Recipient(parRecipient));
}


Gördüğünüz gibi birkaç satırlık kod yazarak sms göndermek mümkün. Bu metodların farklı parametreler alan overload'larını yazdığım bir class'ı Download kısmından indirebilirsiniz.

Şimdi isterseniz sms göndermeye çok benzer bir şekilde çalışan Email gönderme işlemini inceleyelim. Bunun için kullanacağımız nesne EmailMessage nesnesidir.

EmailMessage nesnesi özellikleri :
Attachments(AttachmentCollection) Mail mesajının eklerini barındıran özelliktir.
Bcc(RecipientCollection) Email'in bcc alıcılarının bilgilerinin tutulduğu özelliktir. Her bir alıcı bir Recipient nesnesi ile temsil edilmektedir.
BodyText(string) Email'in içeriğinin tutulduğu özelliktir.
Cc(RecipientCollection) Email'in cc alıcılarının bilgilerinin tutulduğu özelliktir. Her bir alıcı bir Recipient nesnesi ile temsil edilmektedir.
From(Recipient) Mesaj alıcısında gösterilecek mesajı gönderen adres ve kişi bilgisinin tutulduğu özelliktir.
Importance(Importance) Email'in önem derecesinin tutulduğu özelliktir. Aynı isimdeki Importance enum'undan değerler alır.
ItemId(ItemId) Bu özellik email'e ait unique bir değer taşımaktadır. Bu özellik read only'dir.
LastModified(DateTime) Mesajın gönderildiği tarih bilgisini taşıyan özelliktir. Bu özellik read only'dir.
Read(bool) Email'in okunup okunmadığı bilgisini taşıyan özelliktir. Read only'dir.
Received(DateTime) Email'in alındığı tarih bilgisini taşıyan özelliktir. Read only'dir.
Sensitivity(Sensitivity) Email'in kişisel mi confidential'mı olduğu gibi hassasiyet bilgilerinin tutulduğu özelliktir. Aynı isimdeki enum değerlerini taşır.
Subject(string) Email mesajının konusu'nun tutulduğu özelliktir.
To(RecipientCollection) Email'in alıcılarının bilgilerinin tutulduğu özelliktir. Her bir alıcı bir Recipient nesnesi ile temsil edilmektedir.

EmailMessage nesnesi metodları :
Send Email'i göndermek için kullanacağımız metoddur. Accountname veya EmailAccount nesnesini parametre alır ve parametre aldığı mail hesabı üzerinden gönderim yapar.

Şimdi isterseniz Email göndermek için kullanabileceğimiz bir helper class'ını birlikte yazalım.

public static void SendEmail(string parBody, string parRecipient)
{
EmailMessage insEmailMessage = new EmailMessage();
insEmailMessage.BodyText = parBody;
AddRecipient(insEmailMessage, parRecipient);
insEmailMessage.Send(GetAccountName());
}
private static string GetAccountName()
{
OutlookSession insOutlookSession = new OutlookSession();
return insOutlookSession.EmailAccounts[0].Name;
}
private static void AddRecipient(EmailMessage parEmailMessage, Recipient parRecipient)
{
parEmailMessage.To.Add(parRecipient);
}

Gördüğünüz gibi mail gönderme işlemi Sms göndermeye çok benzemektedir. Tek farklı nokta send metodunda mail hesabının veya hesap adının verilmesi gerekmesidir. Gördüğünüz gibi bunun içinde Outlook Session nesnesinden tanımlı mail hesaplarını okuyabilmekteyiz.

Şimdi isterseniz mobil cihazımıza yeni bir mesaj geldiğinden nasıl haberdar olabileceğimizi inceleyelim. Bunun için MessageInterceptor nesnesini kullanacağız. Bu nesne overloadında sadece Notify mı edileceği veya Notify edildikten sonra mesajın silinip silinmeyeceğine dair bir aksiyon parametresi ve bu işlem için mevcut thread'in kullanılıp kullanılmayacağını belirleyen boolean tipinde bir parametre almaktadır. Sonrasında ise bu nesnenin MessageReceived event'ını handle ederek mesaj geldiğinden haberdar olabiliriz. Bu nesnenin kullanımına ait bir örnek aşağıda verilmiştir.

MessageInterceptor msgInterceptor = new MessageInterceptor(InterceptionAction.Notify, true);

public SmsAgent()
{
msgInterceptor.MessageReceived += new MessageInterceptorEventHandler(msgInterceptor_MessageReceived);
}
void msgInterceptor_MessageReceived(object sender, MessageInterceptorEventArgs e)
{
}
Gördüğünüz gibi mesaj geldiğinde MessageInterceptor nesnesinden fırlayan event sayesinde bir çok işlem yapabiliriz. Event'ta bulunan MessageInterceptorEventArgs parametresinin Message özelliği ile gelen mesaja ait özellikleri alabiliriz.

Burda önemli bir soru belirli özelliklere sahip mesajları nasıl yakalayacağımızdır. Örneğin bir kullanıcıdan gelen mesajları yakalamak istiyorsak ne yapmamız gerektiğidir. Birçoğunuzun aklına bu durumu MessageRecieved event'ı içinde kontrol etmek gelmiştir. Ancak bunun için MessageCondition nesnesi vardır. Tek yapmanız gereken bu nesnenin ilgili property'lerini doldurmak ve MessageInterceptor nesnesinin MessageCondition özelliğine bu nesneyi atamaktır. Aşağıda bununla ilgili bir örnek kod parçası veriyorum.

MessageInterceptor msgInterceptor = new MessageInterceptor(InterceptionAction.Notify, true);
public SmsAgent()
{
msgInterceptor.MessageCondition = new MessageCondition(MessageProperty.Body, MessagePropertyComparisonType.StartsWith, "Hello");
msgInterceptor.MessageReceived += new MessageInterceptorEventHandler(msgInterceptor_MessageReceived);
}
void msgInterceptor_MessageReceived(object sender, MessageInterceptorEventArgs e)
{}

Umarım faydalı bir makale olmuştur.

Tamer Öz
http://www.yazgelistir.com/Makaleler/1000002315.ygpx

Hiç yorum yok: