RSS

PHP mail formu yapımı

46 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('[email protected]', $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: [email protected]' . "rn";
$gonderilecek = '[email protected]';
$konu = 'E-Postanın konusu';
$mesaj = 'Mesajın içeriği.';
mail($gonderilecek, $konu, $mesaj, $headers);

Bu kodu çalıştırdığımızda [email protected] adresine [email protected] adresinden bir mail göndermiş oluruz.

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

$headers  = 'MIME-Version: 1.0' . "rn";
$headers .= 'Content-type: text/html; charset=utf-8' . "rn";
$headers .= 'To: Alıcı 1 <[email protected]>, Alıcı 2 <[email protected]>' . "rn";
$headers .= 'From: Yollayan <[email protected]>' . "rn";
$headers .= 'Reply-To: Yanit <[email protected]>' . "rn";
$headers .= 'X-Mailer: PHP/' . phpversion() . "rn";
$headers .= 'Cc: [email protected]' . "rn";
$headers .= 'Bcc: [email protected]' . "rn";

$eposta = '[email protected]';
$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:

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

"PHP mail formu yapımı" yazısı için 46 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 dedi ki:

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

  3. mehmet dedi 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:rootvhostsast…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(‘[email protected]’, $konu, $icerik,’aaa’);
    12- echo ‘Mesajınız Gönderildi! Teşekkürler.’;

  4. utku dedi ki:

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

  5. sadiye dedi ki:

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

  6. eyaz dedi ki:

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

  7. eyaz dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi ki:

    valla harika olmuş ellerine sağlık

  15. SEA dedi ki:

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

  16. recep dedi 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 dedi 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 dedi ki:

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

    • Heysem dedi ki:

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

  19. Ahmet dedi 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 dedi 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 dedi ki:

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

  22. Can Ünlü dedi 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 dedi 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 dedi ki:

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

  24. Musa dedi ki:

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

  25. ömer dedi ki:

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

  26. FeritCeyhan dedi 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 dedi 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:xampphtdocsyonarmail.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”);
    }

  28. Erdem OFLAZ dedi ki:

    Hocam ellerine sağlık çok faydalı bir anlatım olmuş

  29. Vural dedi ki:

    Süper paylaşlım olmuş teşekkürler.

  30. Kerim dedi ki:

    ben kullanılmayan mailleri bulan bir php kodu yazmak istiyorum. yani
    şöyleki;
    txt dosyasıyla verilen mail adreslerinden kullanılmayan mail adreslerini bulup kullanılan ve kullanılmayan mail adreslerini iki ayrı liste halinde gösteren bir program istiyoruz.

    Kullanılmayan mail adresi: ya hiç allınmamıştır ya da kapatılmıştır.

    bu nasıl anlaşılır: Mail atıp sana hata maili döner. bu şekilde anlaşılır. fakat mail gitmediği için her koşulda gönderildi dediği için bir çözüm bulamadım bu konuda yardımcı olabilecek biri var mı ?

  31. Mustafa dedi ki:

    Merhaba kardeşim, bu form kodunu düzenleyip tek sayfalık siteme eklesem gönder dediğinde direk gönderirmi yoksa windows live mail’imi açar ?

  32. Nihat Baysal dedi ki:

    <?

    header("Location: goderildi.php");

    session_start();
    extract($_POST);
    extract($_GET);

    $kime = "[email protected]"; // Mesajýn gitmesini istediðin e-posta adresin.
    $konu = "İletişim Formundan Bir Mesaj Aldınız!";
    $DateandTime = date("d-m-Y H:i:s");
    $mesaj = "İletişim Formunuzdan Gönderilen Mesajın İçeriği Aşağıdadır :

    Adı – Soyadı: $GONDERENIN_ADI_SOYADI
    E-Posta Adresi: $EPOSTA_ADRESI
    Mesajın Konusu: $MESAJIN_KONUSU
    Gönderilen Mesaj: $GONDERENIN_MESAJI
    ";

    if (!@mail($kime, $konu, $mesaj, "From: $ADI_SOYADI \nX-Mailer: PHP/” . phpversion()) )
    {
    echo “Şu anda sistemimizde bir sorun bulunmaktadır.” .
    “Lütfen daha sonra tekrar deneyin.”;
    exit();
    }

    ?>

    Hocam yukardaki kodlarla bir mail gönderi formum var. Header location ile sayfayı yönlendiriyorum ancak yönlendirdiğim sayfa yerine sunucuda olmayan başka sayfaya yönleniyor.Hali ile bu dosya sunucuda yüklü değil hatası veriyor.

    • Volkan Yıldız dedi ki:

      header(“Location: goderildi.php”);

      “gonderildi.php” yazmak istemişsiniz sanırım ama yanlışlıkla “goderildi.php” yazmışsınız, hata bundan kaynaklanıyor olabilir.

  33. mustafa dedi ki:

    [15-Jun-2016 11:10:36 Europe/Istanbul] PHP Warning: mail() has been disabled for security reasons in on line 79
    Hatasını Alıyorum

    Nerde Hata VAr :/
    private function sendEmail(){
    $mail = mail($this->email_admin, $this->subject, $this->message,
    “From: “.$this->name.” email.”>rn”
    .”Reply-To: “.$this->email.”rn”
    .”nX-Mailer: PHP/” . phpversion())

    • Musa Avcı dedi ki:

      “mail() has been disabled for security reasons” diyor ki mail fonksiyonu güvenlik nedeniyle devre dışı bırakılmış. Hosting sağlayıcınla iletişime geçerek mail göndermek için izin isteyebilir ya da SMTP ile mail göndermeyi deneyebilirsiniz. SMTP ile mail göndermeyle alakalı bilgi almak için şu yazıya bakabilirsin; https://www.phpr.org/php-ile-smtp-mail-gonderme/

  34. Furkan dedi ki:

    Gönderildi diyor ama göndermiyor, zaten göndermemesi de normal. Mail bilgilerini uzaydan otomatik çekiyor sanırım..

  35. Tamer Keimoglu dedi ki:

    kod bende sonuç vermedi

Volkan Yıldız için bir cevap yazın Cevabı iptal et

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