RSS

PHP mail formu yapımı

36 18 Haziran 2010 ~ Musa Avcı — Orta
Bu konuya alternatif daha yeni bir yazı hazırladım;
PHP ile SMTP’den mail gönderme

PHP’de e-posta göndermek gayet basit ve sadece mail() fonksiyonu ile gerçekleşiyor. En az üç parametre ile çalışan bu fonksiyona posta gönderilecek adresi, mesajın konusunu ve mesajın içeriğini yazarız.

Dördüncü parametresi ile başlıkları kullanarakta birden fazla kullanıcıya göndermeye ya da gönderici e-posta adresini belirtme gibi ifadeler ekleyebilirsin.

Tüm bu mail gönderme işlerine girmeden önce bir mail formu yapmamız gerekiyor. HTML formları hakkında daha fazla bilgi almak için önceki yazımıza göz atabilirsin.

Mail formu hazırlamak

Formumuzu hazırlarken HTML kullanacağız. Yani arayüz ve form elementlerini HTML dilinde yazacağız. Ve bu formun verilerini PHP uygulamamıza göndereceğiz.

Biz formu yapacağımız dosya adını form.php, maili gönderecek olan PHP uygulamamızın olacağı dosyanın adınıda mail.php olarak ayarladık. Ve bu yüzden formun action parametresine mail.php yazdık.

<form action="mail.php" method="post">
Adınız: <br/>
<input type="text" name="ad" /><br/>
E-Posta adresiniz: <br/>
<input type="text" name="eposta" /><br/>
Konu: <br/>
<input type="text" name="konu" /><br/>
Mesajınız: <br/>
<textarea name="mesaj"></textarea><br/>
<input type="submit" value="Mesajı Gönder" />
</form>

Formun action parametresine yazdığımız adres, formu göndereceğimiz PHP uygulamasının adresi olmalı. Bu formun görüntüsü şöyle olur:

İstediğimiz kadar form elementi ekleyebiliriz, yanlız eklediğimiz elementlerin name parametresine her birine ayrı ve ayırt edici bir değer vermeyi unutmayın. Form elementlerine verdiğimiz bu name parametrelerini PHP uygulamamızda aynı şekilde bu verilere ulaşmak için kullanacağız.

PHP ile formu kontrol etme ve mail gönderme

Şimdi gelelim PHP kodu kısmına. Burada önde bize formdan gönderilen verileri kontrol edeceğiz ve sonrasında gönderilen bilgiler uygun ise maili göndereceğiz.

Kontrol işleminde tüm form değerleri tanımlanmış mı ve boş mu diye bakacağız.

if(isset($_POST['ad']) && isset($_POST['eposta']) && isset($_POST['konu']) && isset($_POST['mesaj'])) {
   if(empty($_POST['ad']) || empty($_POST['eposta']) || empty($_POST['konu']) || empty($_POST['mesaj'])) {
      echo 'Lütfen boş yer bırakmayın!';
   } else {
      $ad = strip_tags($_POST['ad']);
      $eposta = strip_tags($_POST['eposta']);
      $konu = strip_tags($_POST['konu']);
      $mesaj = strip_tags($_POST['mesaj']);
      $icerik = 'Ad: ' . $ad . '<br/>E-Posta: '. $eposta . '<br/>' . $mesaj;
      mail('bizim-posta-adresimiz@sitemiz.com', $konu, $icerik);
      echo 'Mesajınız Gönderildi! Teşekkürler.';
   }
} else {
   echo 'Lütfen Formu Kullanın!';
}

14 satırlık bu kodlarımızın içerisinde 2 koşul kullandık. İlk koşulda formun verileri gönderilmiş mi diye tek tek kontrol ettik, ikinci koşulda ise gönderilen değerleri boş mu diye kontrol ettik. Eğer iki koşulda geçilirse e-posta gönderilmek için hazırdır ve ilk parametrede belirttiğimiz adrese gönderilir. Hepsi bu kadar.

PHP mail göndermede header kullanımı

Mail fonksiyonunu 3 parametre ile en sade halini kullanmış oluruz. Eğer istersek 4. parametreye header dediğimiz özel başlık ifadelerini yerleştirerek, gönderinin adresi, gönderilecek diğer kişiler, gizli gönderim, html şeklinde gönderim gibi bir çok şey yapabiliriz.

Örneğin bir header örneği ile nasıl yollayan adresi belirteceğimizi gösterelim:

$headers = 'From: gonderen@adres.com' . "\r\n";
$gonderilecek = 'gonderilecek@adres.com';
$konu = 'E-Postanın konusu';
$mesaj = 'Mesajın içeriği.';
mail($gonderilecek, $konu, $mesaj, $headers);

Bu kodu çalıştırdığımızda gonderilecek@adres.com adresine gonderen@adres.com adresinden bir mail göndermiş oluruz.

Daha detaylı bir örnek için şu kodu inceleyebilirsin:

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'To: Alıcı 1 <alici1@adres.com>, Alıcı 2 <alici2@adres.com>' . "\r\n";
$headers .= 'From: Yollayan <yollayan@adres.com>' . "\r\n";
$headers .= 'Reply-To: Yanit <yanit@adres.com>' . "\r\n";
$headers .= 'X-Mailer: PHP/' . phpversion() . "\r\n";
$headers .= 'Cc: diger-gonderilecek@adres.com' . "\r\n";
$headers .= 'Bcc: gizli-gonderilecek@adres.com' . "\r\n";

$eposta = 'alici1@adresi.com';
$konu = 'HTML kodlu e-posta gönderme';
$mesaj = '<b><i>Kalın ve italik bir yazı gönderiyoruz</i></b>';
mail($eposta, $konu, $mesaj, $headers);

Yukarıda yaptığımız örnek çalışmanın dosyalarını indirmek için buraya (714 bayt, 2 dosya) tıklayın.
Bir sonraki PHP serüvenlerinde görüşmek üzere hoşçakalın.

Etiketler:

Bu yazıyı PDF olarak indir

Yazılanlar ilgini çektiyse, yenilerinden haberdar olmak için e-mail bültenine abone olabilirsin.

"PHP mail formu yapımı" yazısı için 36 yorum yapılmış.

  1. Öncelikle bu harika yazı için teşekkürler. PHP kodlarındaki ilk sorgulama (forumun gönderilmesini sorgulayan) da sadece “isset($_POST[‘submit’])” yazmak yeterlidir diye düşünüyorum. Zaten ad, eposta, konu, mesaj alanlarına boşluk bırakılsa da sorgulamayı geçecektir. Ayrıca 4 tane sorgulama -gözle fark edilmez- bir yavalık verecektir. “isset($_POST[‘submit’])” yeter kanımca. :)

  2. Kenan diyor ki:

    Teşekkürler güzel bir yazı.

  3. mehmet diyor ki:

    şu hatayı alıyorum nedeninide anlamadım

    Warning: mail() [function.mail]: SMTP server response: 501 5.5.4 Syntax error in parameters scanning in F:\root\vhosts\ast…on line 11

    hic birseyde değistirmedim verdiğiniz kodlarda
    10-11-12 kod satırı aşagıda

    10- $icerik = ‘Ad: ‘ . $ad . ‘E-Posta: ‘. $eposta . ” . $mesaj;
    11- mail(‘mail@mail.com’, $konu, $icerik,’aaa’);
    12- echo ‘Mesajınız Gönderildi! Teşekkürler.';

  4. utku diyor ki:

    ya şimdi hocam mesaj gönderildi diyor da yok mesaj falan gelmiyor

  5. sadiye diyor ki:

    harika bir yazıydı teşekkürler.

  6. eyaz diyor ki:

    bende localhost kollanıyorum arkadaş gibi aynı hatayı alıyorum

  7. eyaz diyor ki:

    bende wamp server kullanıyorum ama mail yollama konusunu daha ögrenemedim ve denemelerim boşa çıkııyor yardım olursanız sevenirim byeee

  8. murat diyor ki:

    merhabalar bende localhosttan çalışıyorum mail gönderdiğim halde mail adresime düşmüyor ? diğer arkadşlardada olduğu gibi önemsizlere düşmüyor ?

  9. özlem diyor ki:

    bir yıllık ödevim var herhangi bi konu hakkında e psta oluşturup göndermem gerekiyo ve bunu php kodları ile yapacakmışım nasıl yapabilirim acele yardım!!!!

  10. ibrahim diyor ki:

    strip_tags () donksiyonun ne anlama geldiğini bilmeyenler için ;

    Formdan gelen veriyi zararlı kodlardan temizleme ve buna benzer kontroller için strip_tags() fonksiyonunu kullanırız. Gerçekten de html karakterlerını temizleme konusunda çok pratik ve işinize yarayacak bir fonksiyon.

    ?

    1
    2
    3

    <?php
    $html_veri = "Google
    ?>

    $html_veri adlı değişkenimizi alttaki gibi yazdırırsak:

    ?

    1

    echo strip_tags($html_veri);

    Ekrandaki çıktısı html kodlardan temizlenmiş Google yazısı olacaktır.

    Peki siz belirli karakterlere izin vermek isterseniz ne olacak?

    Diyelimki gelen veride yada kodlarının kullanılmasını istiyorsunuz.

    Böyle bir durumda echo ile ekrana yazdırma işlemini şu şekilde yapmanız gerekir:

    ?

    1

    echo strip_tags($html_veri, ““);

  11. Kahraman diyor ki:

    Örnek çalışmanızın dosyasını indirdim mail adresini değiştirerek denedim çalışmadı acaba localhostta mı çalışmıyor normal hostta mı denemem lazım bilgisi olan var mı?

  12. Umut diyor ki:

    bu harika yazınız için çok teşekkür ederim benim bir başka sorum olacaktı ben birde bu olaya resimde eklemek istiyorum ancak hem bana mail olarak atsın resimi ve bilgileri hemde veri tabanına kaydetsin. sorun şu ki resim veri tabanında çok yer kaplayacağı için sadece adını kaydettirmek istiyorum. acaba resimi mail olarak atma ve adını veri tabanına kaydettirme konusunda yardımcı olabilir misiniz?

  13. Hakan diyor ki:

    Gerçekten ellerinize sağlık. Kendi siteme entegre ettim. Sorunsuz ve süper çalışıyor. Yapan arkadaşların elllerine sağlık

  14. volkancan diyor ki:

    valla harika olmuş ellerine sağlık

  15. SEA diyor ki:

    Teşekkürler Başarıyla çalıştırdım

  16. recep diyor ki:

    Hocam ben bunu localde denedim olmadı. Gerçek sunucuda denedim. yine mail gönderilmiyor. Kodun çalışmasında sıkıntı yok mail gönderildi mesajı alıyorum fakat yazdığım mesaj mail adresine gitmiyor neden olabilir yardımcı olursanız sevinirim

  17. Azizullah diyor ki:

    Hocam.Çalıştırdım.Gönder dedikten sonra turuncu kutular içinde 24. ve 39. satırlarda hata var diyor.
    39.( mail ($eposta, $konu, $mesaj, $headers);)
    24.( mail ($gonderilercek, $konu, $mesaj, $headers);)

    Bende bilmiyorum php’yi sadece e-postama mailto olmadan mail gelsin istiyorum o kadar.Lütfen yardımcı olursanız çok sevinirim 1 haftadır uğraşıyorum.

  18. naci diyor ki:

    spama dğşmesinin önüne nasıl geçerim

    • Heysem diyor ki:

      Konunun üstünde uyarı var yeni konu var diye smtp ile yeniden açıklamış. orda spama düşmüyor diye biliyorum

  19. Ahmet diyor ki:

    Şimdi mail sorunsuz geliyor, ancak headers kısmında gönderen parametresinde gönderen adres (info@siteadı.com) çıkıyor, ancak yanında “linux@domainadı.com” olarak bir yazı daha geliyor. Bunu nasıl kaldırabilirm. Ben headers parametresinde böyle bir şey yazmadım. Teşekkürler

  20. tunna diyor ki:

    hazır bir forum sayfam var iletişmi içni fakat tek isteğim email yazmamıslarsa gönder dedikten sonra gitmesin uyarı versin.

    bunu nasıl yapabilirim aylardır yapamıyorum.

    lütfen sizde hepsini islip sunları ekleyin demeyin :(

    ek kod lazım email php var bende birde index hepsi bu.

  21. tunna diyor ki:

    ayrıca artık herkes stmp kullanıyor mecburuz yani ve neden kaynak bulamıyorum ben

  22. Can Ünlü diyor ki:

    Merhaba, öncelikle emeğinize sağlık.
    Kodlar düzgün çalışıyor, mail gönderildi diyor fakat gelen giden mail yok. Gereksiz klasöründe de yok. Ayrıca mail gönderildi ekranından sonra anasayfaya nasıl dönüş sağlarım?

  23. tayfun diyor ki:

    $icerik = ‘Ad: ‘ . $ad . ‘E-Posta: ‘. $eposta . ” . $mesaj;
    bu kod çalışmıyor. ad, eposta ve mesajın, giden mailde alt alta görünmesini istiyorum. bi türlü yapamadım! yardım lütfen!

    • ramazan diyor ki:

      Merhaba,
      .(dolar)ad dan sonre /n koyar iseniz alt alta sıralanır.
      .(dolar)eposta ” ” ” “

  24. Musa diyor ki:

    bilinmeyen kodlar var onları neden açıklamıyorsunuz strip_tags gibi lütfen açıklarmısınız

  25. ömer diyor ki:

    Merhaba ben edu.tr uzantalı mail adresime gelmesini istiyorum fakat gelmiyor sizce neden olabilir?

  26. FeritCeyhan diyor ki:

    Öncelikle çok teşekkür ederim,sayenizde bu işlemi gerçekleştirdim ilk defa.Ancak bir maruzatım olacaktı Gelen mesajda email ile mesajı birlikte bitişik halde geliyor. Php kodlarında email den sonra yazdığımız o etiketi işlevi gerçekleşmiyor etiketi e postanın yanında gözüküyor hatta.
    Teşekkürler tekrar iyi çalışmalar

  27. Bahadır diyor ki:

    Öncelikle yazı için teşekkür ederim. Ben bu hatayı alıyorum uğraştım fakat çözemedim yardımcı olabilirmisiniz…

    Notice: Use of undefined constant POST – assumed ‘POST’ in C:\xampp\htdocs\yonar\mail.php on line 23

    <?php
    if(isset($_[POST]['ad']) && isset($_[POST]['eposta']) && isset($_[POST]['tel']) && isset($_[POST]['konu']) && isset($_[POST]['mesaj']))
    {
    if(empty($_[POST]['ad']) || empty($_[POST]['eposta']) || empty($_[POST]['tel']) || empty($_[POST]['konu']) || empty($_[POST]['mesaj']))
    {
    echo "*Boş Alan Bırakmayın!!!”;
    header(“Refresh:2.5;url=iletisim.php”);
    }

Bir Cevap Yazın

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

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>