Yazdır 22 Mayıs 2010 Cumartesi (Hit: 15819)

E-mail Gönderme

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.

hmailserver Kurulumu 1 hmailserver Kurulumu 2 hmailserver Kurulumu 3 hmailserver Kurulumu 4

hmailserver Kurulumu 5  hmailserver Kurulumu 6 hmailserver Kurulumu 7 hmailserver Kurulumu 8

hmailserver Kurulumu 9 hmailserver Kurulumu 10 hmailserver Kurulumu 11 hmailserver Kurulumu 12

hmailserver Kurulumu 13
 

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.

hmailserver Kurulumu 14

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.

 

Local Domain Oluşturmak

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.

  1. C:\Windows\System32\drivers\etc\hosts dosyasına aşağıdaki eklemeyi yapınız.
    (Not:Windows 7'de notdefterini yönetici olarak çalıştırdıktan sonra aç diyerek bu dosyayı açıp değişikliği yapınız. Aksi halde değişiklik izni vermez)
    hosts
  2. Aşağıdaki gibi local bir domain ekleyiniz.
    hmailserver domain ekleme 1 hmailserver domain ekleme 2
  3. Eklenen domaine kullanıcı ekleyiniz. Burada istediğiniz kadar kullanıcı ekleyebilirsiniz.
    Kullanıcı ekleme 1 Kullanıcı ekleme 2 Kullanıcı ekleme 3
  4. Son olarak SMTP sunucuya bir isim vermemiz gerekmektedir. Bu isim domain ismi ile aynı olacak şekilde aşağıdaki gibi ayarlayınız.
    SMTP isimlendirme

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.

  1. Öncelikle C: sürücüsünde mail isimli bir dizin oluşturarak indirdiğiniz squirrelmail dosyasını buraya açınız.
    (C:\mail\squirrelmail-1.4.20\)
  2. Oluşturulan mail dizinin içinde data ve attach isimli iki ayrı dizin daha oluşturunuz.
    data: Gönderilen mail'lerin saklandığı dizindir.
    attach: Mail ile gönderilen ekteki dosyaların saklandığı dizindir.
    Squirrelmail yapılandırması 1
  3. C:\mail\squirrelmail-1.4.20\config\config.default.php dosyasının adını config.php olarak değiştiriniz. Daha sonra bu dosyayı notepad ile açarak sırasıyla aşağıdaki değişiklikleri yapınız.
    Squirrelmail yapılandırması 2 Squirrelmail yapılandırması 3 Squirrelmail yapılandırması 4 Squirrelmail yapılandırması 5
    Squirrelmail yapılandırması 6 Squirrelmail yapılandırması 7 Squirrelmail yapılandırması 8
  4. Squirrelmail'i localhosttan çağırabilmek için EasyPHP'de aşağıdaki tanımlamaları yapınız.
    Squirrelmail yapılandırması 9 Squirrelmail yapılandırması 10 Squirrelmail yapılandırması 11
     
  5. http://localhost/email adresini kullanarak squirrelmail'i açıp istediğimiz bir kullanıcı ile giriş yapınız.
    Squirrelmail yapılandırması 12 Squirrelmail yapılandırması 13

 

Gmail Üzerinden Mail Göndermek

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.

gmail için hmailserver yapılandırılması


Pardus Üzerinden Mail Göndermek

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.

 

Unutmayınız tüm bunlar local olarak yani kendi bilgisayarımız üzerinden mail gönderme çalışmalarıdır, mail denemelerini local olarak yapmanın yollarıdır. Tüm bunlara gerçek sunucularda gerek yoktur. Çünkü gerçek sunucularda mail hizmeti hali hazırda vardır. mail() fonksiyonu ile rahatlıkla mail gönderebilirsiniz. Dolayısıyla burada mail() fonksiyonu üzerinde yoğunlaşabilirsiniz.
Kolay gelsin...

 

mail() Fonksiyonu

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.

  • From: Mail'i gönderen kişinin mail adresidir.
  • Reply-To: Yanıtla denildiğinde yanıtın gönderileceği mail adresidir.
  • Content-type: Gönderilen mail'in içerik türünü ve karakter setini belirtmek için kullanılır.
  • To: Mail'in gönderileceği mail adresleridir.
  • Cc: Mail'in kopyasının gönderileceği görünür adres(ler)dir.
  • Bcc: Mail'in kopyasının gönderileceği gizli adres(ler)dir.

 

Ö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">&nbsp;</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