17 Nisan 2014 Perşembe

PHP' de E-Posta Gönderme



Elektronik posta, kuşkusuz Internet üzerindeki bir numaralı iletişim aracıdır. PHP ile posta gönderme işlemi, tek bir fonksiyon kullanımı ile halledilebilecek kadar kolaylaştırılmıştır. Yalnız uyaralım, aşağıda gördüğünüz örnek kodların UNIX / Windows 2000 ve Windows 95 / 98 sistemlerde çalışma şekilleri farklıdır. UNIX türevlerinde ve Windows 2000’nde, e-posta işlemlerinin yapılması için gerekli olan POP3 ve SMTP posta sunucuları önyüklüdürler. Windows 95 ve 98 sistemlerde ise, bu sunucular olmadığı için, bu sunucuları yüklemeden örnek kodları çalıştırmanız mümkün değildir

Mail Fonksiyonu
Mail Fonksiyonu’nun kullanım şekli aşağıdaki gibidir:

Mail (kime, konu, mesaj, [ek_başlıklar]);

Bu fonksiyon ile e-posta otomatik olarak "kime" kısmındaki kişiye veya kişilere gönderilir. Her bir virgül (,) ayrı bir kısmı göstermektedir. Örneğin:

mail("deneme@php.org.tr", "Deneme", "Merhaba\nBu bir denemedir\nHoşçakalın.");



Ek başlıkları da yazarsak örneğimiz şöyle olacaktır:

Mail ("deneme@php.org.tr", "Deneme", "Merhaba\nBu bir denemedir\nHoşçakalın.", "From: webmaster@php.org.tr\nReply-To: webmaster@php.org.tr");

Ek Başlıkların tümünün daima çift tırnak içinde olduğuna ve birbirlerinden "\n" ile ayrıldıklarına dikkat edin. Bu yazım şekli mesajı oluştururken de geçerlidir. Mesajı oluştururken bir alt satıra geçmek istediğinizde her zaman “\n” karakterini kullanmalısınız.
Ücretsiz Hosting
Posta yollarken en sık kullanılan başlıkları listeleyelim:
From (Kimden)
Reply-to (Cevabın yollanacağı adres)
Cc (Carbon Copy - Karbon kopya)
Bc  (Blind Copy - Kör Kopya - gönderdiğiniz e-posta adreslerini gizler)

Tüm bunları arka arkaya kullanabilirsiniz.

E-posta için temel olarak iki şey gereklidir: Bunlardan ilki, bir formdan gerekli Anahtar= Değer (Key= Value) çiftlerini almak ve php dosyasına iletmektir. Bildiğiniz gibi Internet üzerinde tüm girdiler bu şekilde gönderilmektedir. Bunu bildiğinizi varsayarak aşağıdaki örnekleri inceleyelim.

Önce e-posta gönderilecek formumuzu hazırlayalım ve dosyamızı eposta.php olarak saklayalım:

<form name="eposta" action="form.php" method="post">
<table border="0" cellspacing="2" cellpadding="2" align="left">
   <tr>
      <td colspan="2">
        <div align="center">
          <p align="left">Sitemizi inşa etmede ve yenilemede görüşleriniz
          çok önemlidir. Lütfen doldurmaktan çekinmeyin.</p>
        </div>
      </td>
    </tr>
    <tr>
      <td width="98">
        <div align="right">Ad Soyad: </div>
      </td>
      <td width="450">
        <input type="text" name="adsoyad"><!-- 1. Değişken "adsoyad" -->
      </td>
    </tr>
    <tr>
      <td width="98">
        <div align="right">E-Posta: </div>
      </td>
      <td width="450">
        <input type="text" name="eposta"><!-- 2. Değişken "eposta" -->
      </td>
    </tr>
    <tr align="left" valign="top">
      <td width="98">
        <div align="right">Yorumlarınız:</div>
      </td>
      <td width="450">
        <!-- 3. Degisken "yorum" -->
        <textarea name="yorum" cols="55" rows="10"></textarea>
        <!-- 4. Degisken "kime" -->
        <br><input type="hidden" name="kime" value="deneme@php.org.tr">
        <!-- 5. Degisken "konu" -->
        <input type="hidden" name="konu" value="Web Sitemden">
                        <!-- 6. Degisken "gonder" ancak bunlar sabittir.  php uzantili dosyamizda degisken atamamiza gerek yok. -->
        <input type="submit" name="gonder" value="Gönder">
        <input type="reset" name="Submit" value="Sil">
        </p>
        <p style="font-size: 10px;">Lütfen 20 sn. bekleyin. Tekrar Gönder butonuna basmanıza
        gerek yoktur.</p>
      </td>
   </tr>
</table>
</form>

Ücretsiz Hosting
Her zaman için öncelikle formunuzdaki Anahtar = Değer çiftlerini aklınızda tutarsanız, PHP'de değişkenleri atamanız çok kolaylaşacaktır.

<input type="hidden" name="kime" value="deneme@php.org.tr">
Dikkat ederseniz "kime" anahtarına "deneme@php.org.tr” değerini atadım.

<input type="hidden" name="konu" value="Web Sitemden">
"konu" anahtarına da "Web Sitemden" değerini atadım.

Değerleri bu şekilde atamamızın amacı, ileride sadece bu iki alanı değiştirerek farklı formlar yaratabilmenizi sağlamak. Böylece hem daha anlaşılır bir sisteminiz olacak, hem de yeni bir form yaratmanız daha az zamanınızı alacak.

Yukardaki formda yer alan değişkenleri sıralayalım:

1.adsoyad (ziyaretçi dolduracak)
2.eposta (ziyaretçi dolduracak)
3.yorum (ziyaretçi dolduracak)
4.kime (deneme@php.org.tr)
5.konu (Web sitemden)

Şimdi bu verileri kullanarak elektronik postamızı hazırlayıp yollayacak PHP kodumuzu yazalım:


<?php
            $mesaj  = "Ad Soyad: " . $adsoyad . "\n";
            $mesaj .= "E-Posta: " . $eposta . "\n";
            $mesaj .= "Yorum: " . $yorum . "\n";
            $extra_baslik  = "From: $kime\n";
            $extra_baslik .= "Reply-To: $eposta\n";
            $extra_baslik .= "Bcc:arsiv@php.org.tr\n";
            $extra_baslik .= "Content-Type:text/plain; charset=\"iso-8859-9\"\n";
            $extra_baslik .= "Content-Transfer-Encoding: 8bit\n";
            mail($kime, $konu, $mesaj, $extra_baslik);
?>

Önce size yabancı gelebilecek birkaç kullanım şeklini açıklayalım.

Eğer Perl veya C tabanlı bir kullanıcı iseniz, “.=” kullanımına zaten aşinasınız demektir. Basic benzeri dillerden gelen kullanıcılar için de onlara tanıdık gelecek kullanım örneğini verelim:
$mesaj = $mesaj . “E-Posta: “ . $eposta . “\n”;
PHP’de, Basic benzeri dillerden farklı olarak, değişkenleri birbirlerine eklemek için nokta kullanılır. PHP ile her iki kullanım şekli de doğrudur. Biz bütün örneklerimizde “.=” biçimini kullanacağız.
HTML sayfalarını yayınlarken geçerli olan bütün kurallar, e-posta hazırlarken de geçerlidir: İçeriğin hangi karakter seti ile okunması gerektiğini mutlaka belirtmelisiniz, aksi takdirde e-postanız farklı e-posta istemcilerinde farklı sonuçlar verecektir! Bu sorunu çözmek için,  $extra_baslik değişkenine iki yeni satır ekledik: Content-Type ve Content-Transfer-Encoding.
Dikkat ettiyseniz, postanın BCC bölümüne de bir e-posta adresi yazdık. Böylece yollanan bütün formların bir kopyasının da “arsiv@php.org.tr” adresine gitmesini sağlamış olduk.
Son olarak unutmamamız gereken bir şey daha var. Formu gönderdikten sonra, ziyaretçimize e-postanın gönderildiğine ilişkin bir mesaj vermeliyiz. Bunun için yukarıdaki kodumuza dokunmadan onu HTML kodlarıyla sarıp, gonder.php ismiyle kaydedeceğiz. Gonder.php dosyasının son hali aşağıdaki gibi olacaktır:
Ücretsiz Hosting
<?php
  $mesaj  = "Ad Soyad: " . $adsoyad . "\n";
  $mesaj .= "E-Posta: " . $eposta . "\n";
  $mesaj .= "Yorum: " . $yorum . "\n";
  $extra_baslik  = "From: $kime\n";
  $extra_baslik .= "Reply-To: $eposta\n";
  $extra_baslik .= "Bcc:arsiv@php.org.tr\n";
  $extra_baslik .= "Content-Type:text/plain; charset=\"iso-8859-9\"\n";
  $extra_baslik .= "Content-Transfer-Encoding: 8bit\n";
  mail($kime, $konu, $mesaj,$extra_baslik);
?>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9">
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
  <title>Sayın <?php echo($adsoyad) ?>, formunuz başarıyla alındı.</title>
</head>
<body>
<b>Sayın <font color="Purple"><?php echo($adsoyad); ?></font>,
formunuz <b><font color="Purple">
<?php echo($kime); ?></font></b> adresine gönderilmiştir.
Teşekkür ederiz.</b>
</body>
</html>


Başta da belirttiğimiz gibi, bu kodları denemek için iki şansınız var, Linux veya Windows 2000 kullanıcısı iseniz, daha şanslısınız, sisteminizde zaten yüklü bir SMTP sunucu olma ihtimali çok yüksek. Eğer Windows 95 / 98 kullanıcısı iseniz, www.php.org.tr adresinden, Windows 95 / 98 altında kullanabileceğiniz SMTP sunucusunun adresini ve kurulum bilgilerini gerekli bütün detaylarıyla birlikte bulabilirsiniz.

İkinci bir şansınız daha olduğunu söyledik, o da Internet’e bağlı olmak koşuluyla kullanabileceğiniz kendi ISP’nizin SMTP sunucusu, ya da Yahoo! gibi ücretsiz posta hizmeti veren ve SMTP adresi bilinen bir site. Her iki olanak için de yapmanız gereken değişikliklere bakalım. Windows altında çalışıyorsanız, C:\Windows\php.ini dosyasını açın ve [mail function] başlığı altındaki ayarlarınızı şu şekilde değiştirin:

Kullandığınız bilgisayarda kurulu bir SMTP sunucusu varsa:
SMTP = localhost        ;for win32 only  (Kendi serverınızın smtp ayarını yazın)
sendmail_from=deneme@php.org.tr    ;for win32 only (Email adresinizi yazın)

Kullandığınız bilgisayarda kurulu bir SMTP sunucusu yoksa:
SMTP = smtp.mail.yahoo.com (Yahoo! dan bir e-posta adresiniz olduğunu varsayıyoruz)

Yahoo!'nun SMTP'sini kullanmak istiyorsanız,  Yahoo! sitesindeki hesabınıza girin ve Options (Seçenekler) kısmından POP3 ile e-posta alacağınızı belirtin. Yukardaki satırları php.ini dosyanıza ekledikten sonra, Yahoo! nun SMTP sunucusunu kullanarak e-posta yollayabilirsiniz.

Formu istediğiniz gibi çoğaltabilirsiniz. Gerisi sizin yaratıcılığınıza kalmıştır.


0 yorum:

Yorum Gönder