##### PHP

##### Web Tasarım

Yazar: Caner Öncel - 31 Ocak 2010

# PHP ile web tabanlı mail gönderme (iletişim) scripti

Eğer sunucu izinleriniz müsaitse veya gerekli yetkilere sahipseniz PHP aracılığıyla web üzerinden e-mail gönderebilmeniz ve bu vesileyle sitenize bir iletişim formu ekleyebilmeniz mümkün. Fakat ne yazık ki php mail fonksiyonu bir çok ücretsiz hosting sağlayıcıda ya devre dışı bırakılmıştır ya da gün içerisinde gönderilebilecek mail adedi sınırlandırılmıştır, spam mailcilerin bu iş için ilk önce ücretsiz sağlayıcılara başvurduklarını ve hiç bir sağlayıcının kara listeye düşmek istemeyeceğini göz önünde bulundurunca, sanırım durum gayet anlaşılabilir.

Bu açıdan php mail fonksiyonunu kullanabilmek için öncelikle ücretli bir hosting sahibi olmanız gerektiğinin altını çizmekte fayda var.

PHP ile web tabanlı mail gönderme (iletişim) scripti
İşe ilk olarak maili teslim alacak kişi ve mailin konusu gibi tanımlamalarla başlıyoruz

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | session_start(); // PHP Webmail Script // Caner ÖNCEL - http://www.egonomik.com // Tanımlamalar $alici_isim = "Benim Adım"; // E-maili alacak kişi $alici_mail = "benim@emailim.com"; // E-maili alacak mail $konu = "Web ziyaretçi mesaji."; // E-mailin konusu // Maili gönderen kişinin IP adresi ve tarayıcı bilgisi $userip = $_SERVER['REMOTE_ADDR']; $browser = $_SERVER['HTTP_USER_AGENT']; if($_GET['mail'] == "gonder") { // Post ile gelen değişkenler $isim = $_POST['isim']; $email = $_POST['email']; $website = $_POST['website']; $mesj = $_POST['mesaj']; $_SESSION['isim'] = "$isim"; $_SESSION['email'] = "$email"; $_SESSION['mesj'] = "$mesj";

ardından post ile gönderilen isim, email gibi girilmesi zorunlu alanların kontrolünü sağlıyoruz

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // Zorunlu alanlar kontrol ediliyor if($isim == "") { $_SESSION['mesaj'] = '<span class="hata"><b>Hata:</b> Lütfen isminizi girin!</span>'; header('location:index.php'); die(); } if(!eregi ("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$", $email)) { $_SESSION['mesaj'] = '<span class="hata"><b>Hata:</b> Lütfen geçerli bir e-mail adresi girin!</span>'; header('location:index.php'); die(); } if($mesj == "") { $_SESSION['mesaj'] = '<span class="hata"><b>Hata:</b> Lütfen bize iletmek istediğiniz mesajınızı girin!</span>'; header('location:index.php'); die(); } if($_SESSION['security_code'] != $_POST['guvenlik_kodu']) { $_SESSION['mesaj'] = '<span class="hata"><b>Hata:</b> Güvenlik kodunu hatalı girdiniz!</span><br>Lütfen ekranda gördüğünüz işlemin sonucunu yanındaki kutucuğa giriniz.'; header('location:index.php'); die(); }

sonra kötü niyetli kullanımların önüne geçmek için post girdilerindeki olası html kodlarını (< > ve “) egale edecek olan bir fonksiyon hazırlıyoruz

1 2 3 4 5 6 7 | // Kod arındırma fonksiyonu: <> ve " function temizle($text) { $text = trim($text); $metin = array('<','>','"'); $duzenle = array('','',''); $temiz_text = str_replace($metin,$duzenle,$text); return $temiz_text; }

bu fonksiyonun kullanımı tamamen isteğe bağlı, bilinen e-mail sağlayıcılar zaten gerekli tüm önlemleri alırlar fakat biz yine de tedbiri elden bırakmayalım.

Daha sonra posta kutumuza düşecek olan mesajın HTML tabanlı kalıbını hazırlıyoruz.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // HTML Mesaj içeriği $mesaj = 'Web sitesinden gönderilen mesaj aşağıdadır: <br> ====================================<br><br> <b>Gönderen</b> : '.temizle($isim).'<br> <b>E-Mail</b> : <a href="mailto:'.temizle($email).'">'.temizle($email).'</a><br> <b>Web Site</b> : <a href="'.temizle($website).'">'.temizle($website).'</a><br> <b>IP Adresi</b> : '.$userip.'<br> <b>Tarayıcı</b> : '.$browser.'<br><br> <b>Mesaj</b> : <br>'.temizle($mesj).'<br><br> ==================================== <br><br> <br><br> ____________________________________<br> Egonomik.com<br> <a href="http://www.egonomik.com">http://www.egonomik.com</a>';

ardından mesajın alıcı, gönderen, dil kodlaması türü header bilgilerini tanımlıyoruz

1 2 3 4 5 6 | // Mail gövdesi $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=windows-1254"' . "\r\n"; $headers .= 'To: '.$alici_isim.' <'.$alici_mail.'>' . "\r\n"; $headers .= 'From: '.$isim.' <'.$email.'>' . "\r\n"; $headers .= 'X-mailer: Egonomik.com' . "\r\n";

Tüm kontroller ve tanımlamalardan sonra sıra, maili göndermeye, olası bir hata yüzünden gönderilemezse hata mesajını tanımlamaya geldi.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // Mail gönderiliyor if(mail($to,$konu,$mesaj,$headers)) { unset($_SESSION['isim']); unset($_SESSION['email']); unset($_SESSION['mesj']); $_SESSION['mesaj'] = '<span class="basarili">Mesajınız başarıyla iletildi!</span>'; header('location:index.php'); die(); } // Eğer mail teknik bir hatadan ötürü veya başka bir sebeple gönderilemez ise else { session_destroy(); $_SESSION['mesaj'] = '<span class="hata"><b>HATA:</b> Mesajınız iletilemedi! Lütfen tekrar deneyiniz.</span>'; header('location:index.php'); die(); } } // mail == "gonder" sonu

HTML mail formuna (iletişim formu) geçmeden önce sıra ufacık bir güvenlik önlemi almaya geldi. Bu önlem spam mailcileri ve botları engellemek için gerekli ve işi bir kaç satırda halletmek için ziyaretçiye ufak bir toplama işleminin sonucunu soracağız

1 2 3 4 5 6 7 | // Güvenlik kodu için rastgele sayılar üretiliyor $sayi1 = rand(1,9); $sayi2 = rand(1,9); $toplam_sayi = $sayi1+$sayi2; // Güvenlik kodu session olaran tanımlanıyor $_SESSION['security_code'] = "$toplam_sayi";

şimdi ekrana yazdırılacak olan HTML kodlarına geçebiliriz.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | echo '<html> <head> <title>Egonomik.com PHP Web Mail Script</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> <style type="text/css"> body { color: #9A9A9A; font-family: Georgia; font-size: 11px; } table { color: #71889D; font-family: Georgia; font-size: 12px; } legend { color: #0080FF; font-size: 14px; font-weight: bold; } .basarili { font-family: Georgia; font-size: 12px; color: #6CAE24; } .hata { font-family: Georgia; font-size: 12px; color: #BB2E0B; } </style> </head> <body>';

body tagından sonra olası hata ve başarılı mesajları için “mesaj” session değişkenini ekrana yazdıracak olan alanı tanımlıyoruz. Bu alan, scriptin “Hata: İsminizi yazmadınız” veya “Tebriker, mesajınız gönderildi” türü mesajları görüntülenmesini sağlayacak.

1 2 3 | if($_SESSION['mesaj'] != "") { echo '<fieldset style="width: 450px; border: 1px solid #E9E9E9"><legend>Bilgi</legend> '.$_SESSION['mesaj'].'</fieldset><br>'; }

Şimdi sıra mail formu ve ziyaretçiden talep edilen form elemanlarını hazırlamakta.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | echo '<form action="?mail=gonder" method="POST"> <fieldset style="width: 450px; border: 1px solid #E9E9E9"> <legend>Mail Gönder</legend> <table border="0" width="100%" cellpadding="2"> <tr> <td width="124"><b>Adınız</b></td> <td> <input type="text" name="isim" value="'.$_SESSION['isim'].'"></td> </tr> <tr> <td width="124"><b>E-mail</b></td> <td> <input type="text" name="email" value="'.$_SESSION['email'].'"></td> </tr> <tr> <td width="124"><b>Web siteniz</b></td> <td> <input type="text" name="website" value="http://"></td> </tr> <tr> <td width="124" valign="top"><b>Mesajınız</b></td> <td><textarea rows="6" name="mesaj" cols="30">'.$_SESSION['mesj'].'</textarea></td> </tr> <tr> <td width="124"><b>Güvenlik kodu</b></td> <td> '.$sayi1.' + '.$sayi2.' = <input type="text" name="guvenlik_kodu" size="4" autocomplete="off"></td> </tr> <tr> <td width="124">&nbsp;</td> <td><input type="submit" value="Gönder"></td> </tr> </table> </fieldset> </form>';

formu da hazırladıktan sonra son iş olarak olası mesaj session değişkenlerini yok ediyor ve html bitiş satırlarını yazıyoruz

1 2 3 4 5 6 | if($_SESSION['mesaj'] != "") { unset($_SESSION['mesaj']); } echo '<a href="http://www.egonomik.com"><font color="#71BBE3">Egonomik.com</font></a> PHP Web Mail Script </body> </html>';

Nur topu gibi ve tek sayfalık bir mail scriptimiz oldu, hayırlı uğurlu olsun.

Scripti dosya olarak indirmek için:
Download

Twitter Pinterest WhatsApp Telegram Linkedin Facebook

### İlginizi Çekebilecek Diğer İçerikler

#### Caner Öncel

Yazdım, yıllarca yazdım. Okundum, sevildim, nefret edildim ama ben yine de yazmaya devam ettim. Bilişimden kültüre, komediden politikaya kadar onlarca farklı alanda pek çok bilgi paylaştım. Hayatlara ufak da olsa dokunabildiysem ne mutlu.
Yazarın tüm yazıları → Caner Öncel

### Bunlar da ilginizi çekebilir

HTML tabanlı mobil uygulama geliştirmek isteyenler için: Framework7
Ücretsiz olduğuna inanamayacağınız harika bir profesyonel HTML tema: Timber
Verilerinizi görselleştirmenizi sağlayan kullanışlı bir JavaScript kütüphanesi: Charts.js
WordPress için ücretsiz inceleme ve magazin teması: Reviewzine
Sadece developer kafasına sahip olanların anlayabileceği durumlar
Bütün tarayıcıların güncel logoları ve ikonları bu pakette (1400+ PNG)

### 24 Yorum

1. gevv dedi ki:
   2 Şubat 2010, 02:14

   Teşekkürler Caner detaylı faydalı bir yazı olmuş nasıl görmedim bu yazıyı :) anlaşıldı yetişemiyorum rss abonesi olmanın zamanı geldi :D

   Cevapla
2. gevv dedi ki:
   2 Şubat 2010, 14:55

   Tekrar merhaba
   Ben yazıdaki Kod arındırma fonksiyonunu wordpress yazılarında kullanmak istiyorum “<” “>” simgelerini html olrak görüntülemem gerekli :) sağolasın verdiğin kodlar ile yaptım ama bir sorun var :)
   kodlar ile bir kaç deneme yaptım farklı bir uygulamadan kopya çektim :) istediğim oldu ama hesap dışı bir gelişme var :D

   http://img23.imageshack.us/img23/1780/28834616.png

   fonksiyon dosyasına eklediğim kodlar yazı içindeki tüm “<” “>” işaterlerini değiştiriyor :) acaba sadece pre /pre tagları arasındaki “<” “>” simgelerini değiştirmesini sağlayabilrmiyiz

   yeni kod http://shorttext.com/e1pmeslfp

   Cevapla
3. Serkan dedi ki:
   8 Şubat 2010, 20:05

   Paylaşım için teşekkürler..
   Yalnız ben uygulamayı başaramadım bu işlerde yeni sayılırım sanırım ondan..

   gönder dediğimde

   Warning: mail() [function.mail]: SMTP server response: 501 Your domain does not seem to be valid. Could not find MX record for your domain. in D:Homelisemilleti.comhttpdocsserkanmalzemelerindex.php on line 83

   Warning: Cannot modify header information – headers already sent by (output started at D:Homelisemilleti.comhttpdocsserkanmalzemelerindex.php:83) in D:Homelisemilleti.comhttpdocsserkanmalzemelerindex.php on line 94

   şöyle bir hata geliyor açıklayabilen var mı yardımcı olursanız sevinirim..

   Cevapla
4. Caner Öncel dedi ki:
   8 Şubat 2010, 20:14

   Anladığım kadarıyla scripti lokal sunucu (localhost) üzerinde deniyorsunuz ve ayarlarınız php mail gönderimi için yapılandırılmamış. Bir de sunucu üzerinden deneyin.

   Ayrıca web sitenizde (lisemilleti.com) trojan var, antivirus programları görmeme bile izin vermedi.

   Cevapla
5. Serkan dedi ki:
   8 Şubat 2010, 22:38

   Localhostta değil sunucum olan lisemilleti.com üzerinden deniyorum yalnız o hata veriliyor.
   Evet trojan var onunla alakalı olabilir mi?
   Yoksa ben bi yerde hatamı yaptım?
   Yardımlarınız için Teşekkürler..

   Cevapla
6. Caner Öncel dedi ki:
   8 Şubat 2010, 22:59

   “D:\Home\lisemilleti.com\httpdocs\serkan\malzemeler\index.php” gibi bir dosya yolunu ilk defa görüyorum açıkcası.

   Torjanla alakalı bir durum değil bu sunucunuzdaki email ayarlarıyla ilgili, hosting firmanıza başvurmanızı öneririm. Ayrıca “evet trojan var” derken bu trojanı bilinçli olarak tuttuğunuz mu söylüyorsunuz?

   Cevapla
7. Serkan dedi ki:
   9 Şubat 2010, 15:56

   Yok site bağımsız sitem değil ( Web Tasarımı ve proglama öğrencisiyim ) sınıfın sitesi silinmesi için hostingle görüşmesi gerekende hocamız k.bakmayın bir zarar verdiysem.

   D:home => buna bende şaşırdım tam bilgim olmadığından size danıştım sağolun.

   Hostingi temizledikten sonra denerim. Tekrar danışacağım.

   Cevapla
8. Blackwood dedi ki:
   13 Temmuz 2010, 16:35

   Bu script sanırım benim de işime yarayabilir.

   Cevapla
9. Murat dedi ki:
   31 Mart 2011, 11:16

   Benim sorunum mail formunun arka plan rengi değiştirememekle ilgili bu konuda yardım edecek birisi var mı?

   Cevapla
10. a.kara dedi ki:
    26 Mayıs 2011, 00:10

    Mozilla da kullanıyorum . Gelen mailde türkçe karekter hatası alıyorum.

    Cevapla
11. Berk Hamza dedi ki:
    12 Ocak 2012, 20:56

    İşte budur bugüne kadar gördüğüm en sağlam ve çalışan script.. Teşekkür ederim..

    Cevapla
12. Caner Y. dedi ki:
    13 Mart 2012, 19:51

    paylaşım için teşekkürler… Sayfayı indirip siteme kurdup gayet güzel çalıştı… Mesajı gönderdi. Ancak deneme e-postası bir türlü gelmedi. Kodlarda düzeltme yapmıştım mesaj bana gelsin diye ancak, gelmedi. Deneme mesajları nereye gitti acaba… Not: Hiçbir PHP bilgim yok. Bu nedenle eposta bilgisi dışında koda dokunmadım…

    Cevapla
13. hacı ökkeş dedi ki:
    3 Nisan 2012, 10:55

    Hocam kısmet bu güneymiş. Böyle birşey lazımdı tam yazacaktım. Burada olduğu aklıma geldi hemen indirdim güzel çalışıyor eline sağlık +rep :)

    1- ANSI olarak kodlanmış utf 8 çevir

    2 – charset i de utf 8 yap

    3 – mail değilde E-posta desek çok daha güzel olur hatta değiştir.

    4 – Sayfayı ortala solda güzel durmuyor

    5 – Yukarıda dediklerimin hepsini yaptım istersen sana yollayayım :)

    Cevapla
14. Caner Öncel dedi ki:
    3 Nisan 2012, 10:57

    Zaten başka amelelikler de var, bunun yeni versiyonunu çıkartmak gerek :)

    Cevapla
15. erşan dedi ki:
    10 Nisan 2012, 20:41

    hiç bi şekilde gondermıyor smtp ayarı fln mı gerekiyor acaba benb oyle bi ayar goremedım sizin scriptiniz de yardım edebilirmisiniz mesajınız gonderıldı yazıyor ama mail gelmiyor.. ? nerde hata yapıyorum ?

    Cevapla
    - Caner Öncel dedi ki:
      10 Nisan 2012, 23:47

      Bu script standart PHP mail fonksiyonunu kullanır, Natro gibi PHP mail’i kapatan servis sağlayıcılarda çalışmaz. Bunun için SMTP üzerinden gönderim yapan scriptler kullanmalısınız.

      Cevapla
16. erşan dedi ki:
    10 Nisan 2012, 23:51

    peki bna bir script onerirmisn link verebilirmisniz kullanabileceğim bi script

    Cevapla
    - Caner Öncel dedi ki:
      10 Nisan 2012, 23:57

      Google’dan bakabilirsin: http://goo.gl/AHVhH

      Cevapla
17. boran dedi ki:
    27 Ağustos 2012, 01:34

    arkadaşlar benim ftp’de hiç bir şeklide çalışmıyor hatta kendi yazdığımı bile çalıştıramadım. bana yardımcı olabilirmisiniz ?

    Cevapla
18. yılmaz DURU dedi ki:
    13 Kasım 2012, 18:42

    Bu scripti 1 sene önce yine kullanmıştım sıkıntı olmamıştı lakin bu gün lazım oldu kulanmak istedim LOCALHOST’a attım deneyim dedim lakin sorun oldu bu hatalar nedir? neden meydana gelir? Normal Suncuyada attım aynı sonuç oldu. yadımcı olursanzı sevinirim.

    Teşekkürler

    Cevapla
19. Volkan Akpınar dedi ki:
    19 Şubat 2013, 21:48

    Hocam kendi mail adresimizi nereye yazıyoruz mail gelmesi için tamamını okudum ama anlayamadım yardımcı olursan sevinirim?

    Cevapla
    - Caner Öncel dedi ki:
      20 Şubat 2013, 06:53

      Kendi mail adresini

      > $alici_mail = “benim@emailim.com”; // E-maili alacak mail

      kısmına yazman gerekiyor

      Cevapla
20. h.karadayı dedi ki:
    22 Şubat 2013, 21:39

    güzel script beğendim elinize sağlık hızlıda çalışıyor.

    Cevapla
21. murat dedi ki:
    1 Mart 2015, 20:34

    Mail gittikten sonra tekrar Anasayfa dönmesi ve bu mail gönderme sayfasının ayrı ufak pencerede açılması için ne yapılmalı?

    Cevapla

Uyarı: Yorumlarda link kullanmayınız. Link içeren yorumlar otomatik olarak spam kabul edilmektedir.

### Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yorum *

İsim *

E-posta *

Close
Previous Next
Previous Maximize
Next