asp.net 1.x ile 2.0 arasındaki değişikliklerden biri mail gönderme
sistemi. 1.x tasarlanırken mail gönderme işlemi sadece web işlemi olduğu
düşünülüp system.web.mail namespace'i içinde mail gönderme fonksiyonları
tanımlanmıştı. ancak sonradan görüldü ki masaüstü ve pocket pc
yazılımları da mail gönderme işlemini sık sık kullanıyor. dolayısı ile
mail gönderme işlemleri system.web.mail namespace'inden alınıp,
system.net.mail namespace'ine konuldu. eğer siz de asp.net 2.0'a
1.x versiyonlarından geçiş yaptıysanız ilk başlarda oldukça aramış
olmalısınız mail sınıflarını.
tabi değişen sadece namespace olmamış. tüm yapı baştan değiştirilmiş ve
daha fazla nesneye dayalı hale getirilmiş, mail adresleri bile sınıflara
atanmış. yeni de birçok özellik eklenmiş. biz bu yazımızda basit bir
mail gönderme örneği yapacağız. bundan sonraki yazılarda da bu işin
detayına inip mail göndermedeki yeniliklere bakacağız.
ben bu yazı için aşağıdaki gibi bir form kullanacağım. kutularda yazan
isimler kontrollerin isimleri.

formumuzun genel tasarımı bu, şimdi bu tasarımı oluşturmak için gereken
kodlara bakalım.
<%@ page
language="c#" title="mail gönder" %>
<html>
<head></head>
<h1>asp.net 2.0 ile mail gönderme</h1>
<form runat="server">
<table border="0" id="table1">
<tr>
<td>gönderenin ismi</td>
<td><asp:textbox id="gonısim" runat="server" /></td>
</tr>
<tr>
<td>gönderenin maili</td>
<td><asp:textbox id="gonmail" runat="server" /></td>
</tr>
<tr>
<td>alıcının ismi</td>
<td><asp:textbox id="aliciısim" runat="server" /></td>
</tr>
<tr>
<td>alıcının maili</td>
<td><asp:textbox id="alicimail" runat="server" /></td>
</tr>
<tr>
<td>başlık</td>
<td><asp:textbox id="baslik" runat="server" /></td>
</tr>
<tr>
<td>mesaj</td>
<td><asp:textbox id="mesaj" columns="40" rows="7" runat="server"
textmode="multiline" /></td>
</tr>
<tr>
<td colspan="2" align="center"><asp:button id="dugme" text="maili
gönder" runat="server" /></td>
</tr>
</table>
</form>
</body>
</html>
bu dosyayı .aspx uzantısı ile kaydettiğiniz zaman birinci aşama bitmiş
demektir. şimdi sayfamıza system.net.mail namespace'ini
ekleyelim. aşağıdaki kodu <%@ page %> direktifinin altına
ekleyelim.
<%@ ımport
namespace = "system.net.mail" %>
bu kodu ekledikten sonra artık mail sınıflarımıza ulaşabilir hale
geliyoruz. maili düğmeye basınca yollanmasını istediğimiz için düğmemiz
için bir onclick (tıklanma) olayı oluşturuyoruz. <asp:button>
kontrolünün kodunu aşağıdaki gibi değiştiriyoruz.
<asp:button
id="dugme" onclick="mailgonder" text="maili gönder" runat="server" />
yukarıdaki kod ile düğmemize tıkladığımız zaman mailgonder isminde bir
olayın çalışmasını istediğimiz bildiriyoruz; ancak sayfamızda böyle bir
olay yok. dolayısı ile şimdi onu oluşturalım. aşağıdaki kodları
<head></head> etiketleri arasına ekliyoruz.
<script
language="c#" runat="server">
private void mailgonder(object sender, system.eventargs e)
{
}
</script>
şu an için ikinci aşamayı da bitirdik. sayfamız tamam, olayımız tamam.
en son maili yollayacak asıl kodlara geldi. aşağıdaki kodları mailgonder
olayı içine yazıyoruz.
try{ // mail olayı
riskli bir olay, hata ihtimallerine karşı try-catch bloğu
smtpclient istemci = new smtpclient("mail.maxiasp.net"); // mail
istemcisini oluşturuyoruz, sunucumuzu bildiriyoruz.
mailaddress gon = new mailaddress(gonmail.text, gonısim.text); //
gönderen bilgilerini mailaddress sınıfı ile oluşturuyoruz. mail ve isim
i argüman yolluyoruz.
mailaddress alici = new mailaddress(alicimail.text, aliciısim.text); //
gönderende olduğu gibi aliciyi da sınıf olarak bildiriyoruz.
mailmessage mail = new mailmessage(gon, alici); // mail mesajını da bir
sınıf olarak oluşturuyoruz. bu sefer gönderen ve alici sınıflarını
argüman olarak yolluyoruz
mail.subject = baslik.text; // mailin başlığını atıyoruz.
mail.body = mesaj.text; // mailin içeriğini atıyoruz
istemci.send(mail); // maili göndermeyi deneyiyoruz
response.write("mail yollandı"); // başarılı bir şekilde gitti ise,
ekrana yazıyoruz
}
catch(exception ex) // herhangi bir hata oluşursa bu durumda onu da
yazıyoruz
{
response.write("hata oluştu:<br>");
response.write(ex.message); // hata mesajı
}
kodların yanlarında yorumlar olmasına rağmen biraz daha açıklama
yapayım. bu kodda try-catch bloğu kullandım; çünkü mail gönderme her
zaman başarılı olmayabilir. örneğin mail sunucuya ulaşamayabilir, alıcı
ve gönderen mail adreslerinde bir sorun olabilir. bu durumlarda hata
sayfasına düşmemek için biz hatayı kendimiz kontrol ediyoruz ve hata
durumunda "arkadaşça" bir şekilde kullanıcıyı uyarıyoruz.
eğer herşey başarılı ise sonuç aşağıdaki gibi olmalı.

şayet bir sorun varsa sonuç aşağıdaki gibi olmalı.