PHP mail formu yapı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.
Yazılanlar ilgini çektiyse, yenilerinden haberdar olmak için e-mail bültenine abone olabilirsin.
Ö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. 🙂
evet, hatta sadece hata tamponu ile !empty() kullanmak bile yeterli, @!empty($_GET[‘…’]) şeklinde.
Teşekkürler güzel bir yazı.
ş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.’;
mail gönderme konusunda daha iyi bir alternatif olan “SMTP ile mail gönderme” konusundaki yöntemi incelemenizi ve onu kullanmanızı öneriyorum.
ya şimdi hocam mesaj gönderildi diyor da yok mesaj falan gelmiyor
önemsiz postalar klasörüne düşüyor olabilir mi?
harika bir yazıydı teşekkürler.
bende localhost kollanıyorum arkadaş gibi aynı hatayı alıyorum
bende wamp server kullanıyorum ama mail yollama konusunu daha ögrenemedim ve denemelerim boşa çıkııyor yardım olursanız sevenirim byeee
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 ?
mail gönderebilmeniz için kodlarınızı mail sunucusu olan gerçek bir sunucuda çalıştırmanız gerekiyor.
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!!!!
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, ““);
Ö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ı?
evet, mail sunucusu olan bir hostta denemeniz gerekiyor. fakat isterseniz smtp ile mail gönderme ile lokalde de gönderebilirsiniz. ilgili yazı; PHP ile SMTP’den mail gönderme
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?
Gerçekten ellerinize sağlık. Kendi siteme entegre ettim. Sorunsuz ve süper çalışıyor. Yapan arkadaşların elllerine sağlık
valla harika olmuş ellerine sağlık
Teşekkürler Başarıyla çalıştırdım
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
lokalde mail sunucunuz yoksa mail gönderemezsiniz. Sunucunuzda ise gönderebiliyor olmanız gerekiyor. Konuyla alakalı daha etkili bir yöntem olan SMTP ile mail gönderme yönetimini incelemenizi öneririm; http://www.phpr.org/php-ile-smtp-mail-gonderme/
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.
spama dğşmesinin önüne nasıl geçerim
Konunun üstünde uyarı var yeni konu var diye smtp ile yeniden açıklamış. orda spama düşmüyor diye biliyorum
Ş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
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.
ayrıca artık herkes stmp kullanıyor mecburuz yani ve neden kaynak bulamıyorum ben
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?
$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!
Merhaba,
.(dolar)ad dan sonre /n koyar iseniz alt alta sıralanır.
.(dolar)eposta ” ” ” “
bilinmeyen kodlar var onları neden açıklamıyorsunuz strip_tags gibi lütfen açıklarmısınız
Merhaba ben edu.tr uzantalı mail adresime gelmesini istiyorum fakat gelmiyor sizce neden olabilir?
Ö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
Yazının en başında da bildirdiğim gibi; SMTP örneğini incelemenizi öneriyorum. Daha başarılı ve etkili sonuçlar alabilirsiniz. http://www.phpr.org/php-ile-smtp-mail-gonderme/
Ö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”);
}
…
Hocam ellerine sağlık çok faydalı bir anlatım olmuş
Süper paylaşlım olmuş teşekkürler.
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ı ?
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 ?
<?
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.
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.
[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())
“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/
Gönderildi diyor ama göndermiyor, zaten göndermemesi de normal. Mail bilgilerini uzaydan otomatik çekiyor sanırım..
kod bende sonuç vermedi