Bununla birlikte, demin de değindiğimiz gibi, eğer bu uygulamanın yürütümünü, işlemin bir parçası olarak çalıştırmak istiyorsanız bu meseleye farklı bir yönden yaklaşmanız lazım. Sözgelimi, eğer işletme mantığı bileşeniniz, Girişim Hizmetleri bağlamında çalışıyorsa mektubu, işletme mantığı bileşeni ile başlatılan aynı işlemin bir parçası olarak gönderen bileşeni de ekleyebilirsiniz. Gel gelelim .NET Çerçevesinin mektup göndermek için kullandığı SMTP hizmeti, (mektup gönderme için kullanılan) nesneyi mevcut işlemin bir parçası olarak yerleştirmemize olanak tanımaz. Bu yüzden mevcut işlemin bir parçası olarak yerleştirilebilecek ‘aracı’ konumunda bir saklama işlemini devreye sokmamız gerek.
Bunun için mektubun içindekileri depolamakta bir SQL Sunucu tablosundan yararlanabiliriz. İstemci bileşen mektubu göndermek istediğinde, mektubun ayrıntılarını bir SQL Sunucu tablosunda depolamakta olan aracı bileşeni harekete geçirecektir. İstemci bileşeninde ve mektup bileşeninde uygun işlem değerlerini ayarlamakla her iki tarafından yapılan yürütümleri tek bir işlemle yapmamız mümkün olur. Bu da bize uygulama yazılımımızın içinden mektup gönderebileceğimiz zekice bir olanak tanır.
.NET Çeçevesi’nde, System.Web.Mail adı verilen, bir .NET uygulamasının içinden mektup göndermek için gerekli tüm class’ları içeren bağımsız bir isimlendirme-biçimi yer almaktadır.
resim1
Yukarıdaki şema uygulamadaki mektubun işlemlerini yürütmek için kullanacağımız mimariyi göstermektedir. Şimdi yukarıdaki mimarinin kilit unsurlarını tanımlayalım.
- Mektup İşlem Bileşeni: Bu bileşen mektup göndermek için kullanılır. Bileşende düzenlenen değerlerden dolayı bu bileşenin yürüttüğü işlemler, istemci bileşenin başlattığı işlemin bir parçası olarak yer alabilirler. Bir istemci bileşen mektup göndermek istediği zaman, MailAttributeCollectionClass (Mektup değerleri toplama class’ı) adında bir nesne yaratır ve üretir. Genel toplama nesnesinden ayrı olarak, istemci bileşen ayrıca MailTemplate (Mektup Şablonu) adı verilen bir enum sabiti gönderir. Toplama nesnesini ve enum değerini aldıktan sonra mektup bileşeni toplama nesnesini dinamik olarak XML sabitine dönüştürür. Daha sonra MailTemplate enum ölçeğine geçen değeri taban alarak bir dış XLS metin tanımlarını (style-sheet) yükler. Son olarak da yüklenmiş XSL metin tanımlarını uygulayarak XML sabitini HTML’ye çevirir. Ve mektubu, ilgili değerleriyle birlikte bir SQL Sunucu tablosunda saklar.
- XSL Dosyası: Bu dış XSL dosyaları mektubun gövde kısmını oluşturmak için kullanılırlar. Bu makalenin amacı kapsamında, iki tür mektup varmış gibi düşüneceğiz:
- Kategori Mektubu – Bu mektup belli bir kullanıcı hakkındaki Ad, Adres, Bölge, Posta kodu ve bunun gibi bilgileri ve ayrıntıları içerir.
- Ürün Mektubu – Bu tür mektuplar da belli bir kullanıcı hakkında Ad, Adres, Bölge, Posta kodu ve bunlar gibi ayrıntıların yanısıra ürün bilgilerini de içerir.
- MailAttributeCollection class’ı: Bu MailAttributeCollection class’ı, mektubun gövde kısmını kotarmak için kullanılan genel bir içerici olarak işlev görür.
- Windows Servisi: The Windows Servisi temel olarak gönderilmesi gereken herhangi bir mektup olup olmadığı konusunda SQL Sunucusunu yoklar. Eğer gönderilmemiş herhangi bir mektup varsa onları okur ve System.Web.Mail.namespace (namespace=isimlendirme-biçimi)’deki class’ları kullanarak onları gönderir. Bu mektupları gönderdikten sonra durumunu yeniden, mektupların gönderilmiş olduğunu belirtecek şekilde ayarlar.
- Veritabanı: MailQueue (Mektup kuyruğu) adındaki SQL Sunucusu, mektupların, alınıp arka-planda çalışan Windows Servisince işleme tabi tutulmadan önce geçici olarak depolandıkları aracı bir saklama mekanizması olarak kullanılır.
- Kaynak Kodunu http://www.15seconds.com/files/030709.zip adresinden indiriniz.
Yazının devamını e-Posta İşlemleri için Sistem Yaratmak – 2 başlığı altında okuyabilirsiniz.