PHP ile mail göndermek çok kolay ve basittir. Bunun için mail() fonksiyonu kullanılır.
mail() fonksiyonu, gönderilecek olan mail'i mail sunucu yazılımına verir ve mail sunucu yazılımı sizin için mail'inizi istediğiniz adrese gönderir. Gerçek sunucularda bu yazılımlar yüklü olduğundan herhangi bir problem yoktur. Ancak kendi bilgisayarınızda mail() fonksiyonunun çalışabilmesi için mail sunucu yazılımının kurulu olması gerekmektedir. Windows sistemler için SMTP Hizmeti olarak adlandırılan mail sunucu yazılımlarının çoğu ücretlidir.
Windows XP sistemlerde Denetim Masası > Program Ekle/Kaldır > Windows Bileşenlerini Ekle/Kaldır > Internet Information Service (IIS) > SMTP Hizmeti mevcuttur. Burada SMTP hizmetini kurarken beraberinde diğer IIS yazılımları da kurulduğundan apache ile port çakışması olmaktadır. Bu yüzden apache'nin port numarasını değiştirmek zorunda kalmaktayız. Windows Vista ve Windows 7 Sistemlerde ise SMTP hizmeti hiç yoktur.
Bu yazımızda tüm sistemler için genel bir çözüm olarak ücretsiz bir mail sunucu olan hmailserver kurulumunu ve ayarlarını anlatarak mail göndermeye çalışacağız. hmailserver programını indirmek için tıklayınız
Not: Windows XP için, programı kurmadan önce .NET Framework 2.0 yada .NET Framework 3.5 sürümlerinden birini kurarsanız hmailserver programını daha kolay kurabilirsiniz.
Bu yazımızın hazırlandığı tarih itibariyle hMailServer 5.3.2 - Build 1769 sürümü mevcut olduğundan bunu bilgisayarımıza indirdik ve kurmaya başladık.
Kurulum bittikten sonra yönetim paneline bağlandığımızda bilgisayarımızdan her yöne mail gönderimine izin vermek için aşağıdaki pencerede gösterilen ayarı yapınız.
Bu ayar sayesinde Warning: mail() [function.mail]: SMTP server response: 530 SMTP authentication is required şeklindeki uyarıyı ortadan kaldırmış oluyoruz.
Artık bilgisayarımızda mail sunucu yani SMTP hizmeti kuruludur. Rahatlıkla php ile mail gönderebiliriz. Ancak yahoo, hotmail, gmail gibi mail hizmeti veren büyük siteler güvenlik önlemi olarak localden gönderilen mailleri çoğu zaman engellemekte yada spam olarak değerlendirmektedir. Bundan dolayı mail denemelerini kendi bilgisayarımızda local domain ve kullanıcılar oluşturarak yapmaya çalışacağız.
Mail denemesini internet üzerindeki gerçek mail adresleri ile değil de local'de oluşturulan kullanıcılar arasında yapmak isterseniz hmailserver üzerinde local domain oluşturup bu domain'e kullanıcılar eklemelisiniz. Mail sunucumuzda phpdefteri.local isimli bir domain oluşturup buna kullanıcılar ekleyelim. Bunun için sırasıyla aşağıdaki işlemleri yapınız.
Kullanıcılara gönderilen mailleri kontrol etmek için çeşitli web arayüzleri kullanılır. Bunlardan biri Squirrelmail'dir. Squirrelmail ile oluşturduğumuz kullanıcılara gönderdiğimiz mail'leri kontrol etmeye çalışacağız.
Squirrelmail'i indirmek için tıklayınız
Squirrelmail'i indirdikten sonra bazı ayarlamalar yapmamız gerekmektedir. Bunlar sırasıyla şöyledir.
Mevcut bir mail adresiniz üzerinden örneğin gmail hesabınız üzerinden mail göndermek isterseniz hmailserver üzerinde aşağıdaki ayarlamayı yapmalısınız. Bunu yaptıktan sonra göndereceğiniz tüm mail'ler tanımladığınız gmail hesabınız üzerinden gidecektir. Dolayısıyla giden mail'ler spam olarak değerlendirilmeyecektir.
Bilindiği üzere Pardus gibi linux dağıtımları özgür yazılımlardan oluşan özgür işletim sistemleridir. Dolayısıyla Pardus'da kullacağımız postfix mail sunucu yazılımı da özgür bir yazılımdır.
Postfix'i kurmak için paket yöneticisini yada konsolda sudo pisi it postfix komutunu kullanabilirsiniz. Kurduktan sonra servis yöneticisinden postfix servisinin çalıştığından emin olunuz. Bunları yaptıktan sonra mail() fonksiyonu ile rahatlıkla mail gönderebilirsiniz.
PHP ile mail göndermek için kullanılır. Dört parametre alır. Bunlar şunlardır.
mail($kime, $konu, $mesaj, $basliklar);
1.Parametre: Mail'in gönderileceği mail adresi ($kime)
2.Parametre: Gönderilen mail'in konusu ($konu)
3.Parametre: Mail'in içeriği ($mesaj)
4.Parametre: Mail'in kimden gönderildiğini, CC ve BCC adresleri yada gönderilen HTML mail'in karakter seti gibi tanımlamaların yapıldığı başlıklar kısımdır. Her başlık arasına \r\n konularak birbirinden ayrılması sağlanır.
Bu başlıklar şunlardır.
Örnek: ahmet@phpdefteri.local adresine aşağıda tanımlı olan mail'i gönderelim.
Konu: Ders
Mesaj: Sitemize php gönderme ile ilgili yeni ders eklenmiştir. Sizi sitemize bekleriz.
From: yonetim@phpdefteri.local
Reply-to: yonetim@phpdefteri.local
<?php $kime="ahmet@phpdefteri.local"; $konu="Ders"; $mesaj="Sitemize php gönderme ile ilgili yeni ders eklenmiştir.\nSizleri sitemize bekleriz."; $basliklar="from: yonetim@phpdefteri.local\r\n"; $basliklar .="reply-to: yonetim@phpdefteri.local\r\n"; mail($kime,$konu,$mesaj,$basliklar); ?>
Burada mesajda kullanılan \r\n başlıkları biribirinden ayırmak ve bir alt satıra geçmek için kullanıldı. Mail yonetim@phpdefteri.local adresinden gitmekte ve kullanıcı yanıtla dediğinde yanıt yonetim@phpdefteri.local adresine gitmektedir. Burada mail() fonksiyonu şu şekilde kullanılarak oluşabilecek bir hatanın önüne de geçebilirsiniz.
<?php $kime="ahmet@phpdefteri.local"; $konu="Ders"; $mesaj="Sitemize php gönderme ile ilgili yeni ders eklenmiştir.\nSizleri sitemize bekleriz."; $basliklar="from: yonetim@phpdefteri.local\r\n"; $basliklar.="reply-to: yonetim@phpdefteri.local\r\n"; if(@mail($kime,$konu,$mesaj,$basliklar)) echo "Mesajınız başarı ile gönderilmiştir."; else echo "Hata: Mesajınız gönderilemedi. Tekrar deneyiniz."; ?>
Örnek: ahmet@phpdefteri.local ve ayse@phpdefteri.local adreslerine aşağıdaki mail'i gönderelim.
Konu: Davet
Mesaj: 25.06.2010 tarihinde yapılacak olan özgür yazılımlarda PHP'nin konumu, önemi ve geleceği konulu seminere sizler de davetlisiniz. Aramızda sizleri de görmekten mutluluk duyarız.
From: yonetim@phpdefteri.local
Reply-to: yonetim@phpdefteri.local
Cc: harun@phpdefteri.local
<?php $kime="ahmet@phpdefteri.local"; $kime.=","."ayse@phpdefteri.local"; $konu="Davet"; $mesaj="25.06.2010 tarihinde yapılacak olan özgür yazılımlarda PHP'nin konumu, önemi ve geleceği konulu seminere sizler de davetlisiniz.\nAramızda sizleri de görmekten mutluluk duyarız."; $basliklar="from: yonetim@phpdefteri.local\r\n"; $basliklar.="reply-to: yonetim@phpdefteri.local\r\n"; $basliklar.="cc: harun@phpdefteri.local"; if(@mail($kime,$konu,$mesaj,$basliklar)) echo "Mesajınız başarı ile gönderilmiştir."; else echo "Hata: Mesajınız gönderilemedi. Tekrar deneyiniz."; ?>
Mail birden fazla kişiye gönderilirken her adres arasına virgül (,) koyduğumuza dikkat ediniz.
Örnek: Bu örneğimizde ahmet@phpdefteri.local adresine HTML mail gönderelim. Burada mail'de kullanılacak karakter setini belirtmeliyiz.
Konu: Sınav Tarihleri
Mesaj:
Sınav Tarihleri
II.Dönem Sınav Tarihleri
Tarih | Saat | Ders |
---|---|---|
01/06/2010 | 11:00:00 | Matematik |
03/06/2010 | 09:30:00 | Fizik |
07/06/2010 | 12:00:00 | Tarih |
08/06/2010 | 10:30:00 | Kimya |
Not: Sınavlara öğrenciler giriş kimlik kartı ile beraber cep telefonu olmadan alınacaktır.
From: yonetim@phpdefteri.local
Reply-to: onur@phpdefteri.local
Bcc: ayse@phpdefteri.local
Content-type: text/html; charset=utf-8
<html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <?php $kime="ahmet@phpdefteri.local"; $konu="Sınav Tarihleri"; $mesaj="<p><strong>Sınav Tarihleri</strong></p>"; $mesaj.="<u>II.Dönem Sınav Tarihleri</u><br>"; $mesaj.="<table border=\"1\">"; $mesaj.="<tr><th>Tarih</th><th>Saat</th><th>Ders</th></tr>"; $mesaj.="<tr><td>01/06/2010</td><td>11:00:00</td><td>Matematik</td></tr>"; $mesaj.="<tr><td>03/06/2010</td><td>09:30:00</td><td>Fizik</td></tr>"; $mesaj.="<tr><td>07/06/2010</td><td>12:00:00</td><td>Tarih</td></tr>"; $mesaj.="<tr><td>08/06/2010</td><td>10:30:00</td><td>Kimya</td></tr>"; $mesaj.="</table>"; $mesaj.="<p><strong>Not:</strong> Sınavlara öğrenciler giriş kimlik kartı ile beraber cep telefonu olmadan alınacaktır.</p>"; $basliklar="from: yonetim@phpdefteri.local\r\n"; $basliklar.="reply-to: onur@phpdefteri.local\r\n"; $basliklar.="bcc: ayse@phpdefteri.local\r\n"; $basliklar.="Content-type: text/html; charset=utf-8"; if(@mail($kime,$konu,$mesaj,$basliklar)) echo "Mesajınız başarı ile gönderilmiştir."; else echo "Hata: Mesajınız gönderilemedi. Tekrar deneyiniz."; ?> </body> </html>
Not: Squirrelmail'de HTML mail'i görmek için Options - Display Preferences - Show HTML Version by Default seçeneğini işaretlemelisiniz.
Örnek: Formlar aracılığı ile yonetim@phpdefteri.local adresine, yazılan adresten yazılan mesajı gönderelim. Mesajın bir kopyasını da onur@phpdefteri.local adresine gizli bir şekilde gönderelim.
<!--index.php--> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <style type="text/css"> <!-- .baslik { text-align:right; vertical-align:top; } --> </style> </head> <body> <form name="mail" method="post" action="index.php"> <table border="0"> <tr> <td class="baslik">Mail Adresiniz:</td> <td><input type="text" name="email"></td> </tr> <tr> <td class="baslik">Adınız Soyadınız:</td> <td><input type="text" name="adsoyad"></td> </tr> <tr> <td class="baslik">Tarih:</td> <td><input type="text" name="tarih" value="<?php echo date("d.m.Y");?>" readonly></td> </tr> <tr> <td class="baslik">Konu:</td> <td><input type="text" name="konu"></td> </tr> <tr> <td class="baslik">Mesajınız:</td> <td><textarea name="mesaj" rows="5" cols="25"></textarea></td> </tr> <tr> <td class="baslik"> </td> <td><input type="submit" name="gonder" value="Gönder"></td> </tr> </table> </form> <?php if($_POST){ // formlardan gelen bilgiler sırasıyla alınıyor $kimden=$_POST["email"]; $adsoyad=$_POST["adsoyad"]; $tarih=$_POST["tarih"]; $konu=$_POST["konu"]; $mesaj="<p><b>$adsoyad - $tarih</b></p><p>".$_POST["mesaj"]."</p>"; $kime="yonetim@phpdefteri.local"; $basliklar="from: $kimden\r\n"; $basliklar.="bcc: onur@phpdefteri.local\r\n"; $basliklar.="Content-type: text/html; charset=utf-8"; if(@mail($kime,$konu,$mesaj,$basliklar)) echo "<p><font color=\"green\">Mesajınız başarı ile gönderilmiştir.</font></p>"; else echo "<p><font color=\"red\">Hata: Mesajınız gönderilemedi. Tekrar deneyiniz.</font></p>"; } ?> </body> </html>
Bu site meslek liselerinde bilişim bölümü web programcılığı dalında okutulan internet programcılığı dersine yardımcı olması için tasarlanmıştır. İletişim için iletisim@phpdefteri.com
Apache
PHP
MySQL
PhpMyAdmin
EasyPHP
Xampp
AppServ
Wamp
W3School
www.phpdefteri.com © 2010