12 Mart 2020 brkwel Nasıl Yapılır?

PHP ile Kolay İletişim Formu Nasıl Yapılır?

Php dersleri serimizin bu yazısında hazırlayacağımız iletişim formu üzerinden girilen bilgileri smtp kullanarak e-posta adresine gönderen bir php scripti hazırlıyoruz.

Daha önce PHP ile ilgili temel bilgileri ve çeşitli fonksiyonları incelediğimiz PHP dersleri serimizin bu bölümünde HTML5 ve Bootstrap 4 ile hazırlayacağımız bir iletişim formu üzerinden, kullanıcı tarafından girilen bilgileri istediğimiz bir mail adresine nasıl göndereceğimizi öğreneceğiz. Php ile basit bir iletişim formu hazırlayacağımız bu öğretici yazıda tasarımı kolaylaştırmak için Bootstrap 4 kullacağınız. Ayrıca smtp üzerinden mail gönderimi yapacağımız için PHPmailer sınıfından da faydalanacağınız.

HTML5 ve Bootstap 4 ile İletişim Formu Tasarlama

Öncelikle kullanıdığınız kod editörü üzerinden iletisim.php adında bir php dosyası oluşturun ve aşağıda Bootstrap 4 ile hazırladığım şablondaki kodları kopyalayıp oluşturmuş olduğunuz iletisim.php isimli dosyanıza yapıştırın.

<!doctype html>
<html lang="tr">
<head>
	<meta charset="utf-8">
	<title>PHP İletişim Formu</title>
	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
</head>
<body>
	<div class="container">
		<h1>PHP İletişim Formu</h1>
		<form method="POST" action="">
			<div class="form-group">
				<label for="adsoyad">Ad Soyad</label>
				<input type="text" class="form-control" name="adsoyad" id="adsoyad" required>
			</div>
			<div class="form-group">
				<label for="email">E-Posta</label>
				<input type="email" class="form-control" name="email" id="email" required>
			</div>
			<div class="form-group">
				<label for="konu">Konu</label>
				<input type="text" class="form-control" name="konu" id="konu" required>
			</div>
			<div class="form-group">
				<label for="mesaj">Mesaj</label>
				<textarea class="form-control" name="mesaj" id="mesaj" rows="3" required></textarea>
			</div>
			<input type="hidden" name="islem" value="gonder" required>
			<button type="submit" class="btn btn-primary">Gönder</button>
		</form>
	</div>
	
	<!-- JavaScript -->
	<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
	<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
	<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
</body>
</html>

Bu şablon içerisinde bulunan form elementinde kullandığımız method="POST" özelliği ile girilen verileri POST yönetimi ile göndereceğimizi tanımlıyoruz. Yani formdan gönderilen bilgiler adres çubuğunda görünmeden belirlediğimiz sayfaya iletilecek. Ayrıca action="" özelliğini boş bırakarak form gönderildiğinde yine aynı iletisim.php sayfasına yönlendirmeyi sağlıyoruz. Bu örnekte formdan gelen verileri aynı sayfada işleyeceğimiz için action özelliğini bu şekilde boş bıraktık. Ancak siz isterseniz ayrı bir php dosyası oluşturarak formdan gelen verileri ayrı sayfada işleyebilirsiniz. Bunun için action bölümüne hazırladığınız php dosyasını yazmanız yeterli olacaktır.

Tasarımda faydalandığımız Bootstrap 4 kütüphanesini buraya tıklayarak indirebilir veya inceleyebilirsiniz.

Formdan Gelen Verilerin SMTP ile Mail Adresine Gönderilmesi

Form tasarımımız hazır olduğuna göre gelelim form gönderildiğinde yapılacak işlemlere. Bu örneğimizde formdan gelen verileri SMTP kullanarak belirlediğimiz bir mail adresine göndereceğiz. Bu işlem için PHPMailer kütüphanesinden faydalanıyoruz. Aşağıdaki linkten PHPMailer kütüphanesini indirebilirsiniz. 

PHPMailer – İndir

Kütüphaneyi indirdikten sonra iletisim.php dosyamızın olduğu yere .rar içerisinden çıkan phpmailer klasörünü kopyalıyoruz. Klasör yapımız aşağıda bulunan resimdeki gibi olacak.

Sonraki aşamada aşağıda paylaştığım kodları oluşturmuş olduğunuz iletisim.php dosyasının en üstüne eklemeniz gerekiyor.

<?php
$hata = false;
$gonder = false;
//Gönderme işleminin mevcut olup olmadığını kontrol ediyoruz.
if( isset($_POST["islem"]) && $_POST["islem"]=="gonder" ) {
	
	//Formdan gelen verilerin eksiksiz olup olmadığını kontrol ediyoruz.
	if( !empty($_POST["adsoyad"]) && !empty($_POST["email"]) && !empty($_POST["konu"]) && !empty($_POST["mesaj"]) ) {
		
		//PHPMailer
		include_once('phpmailer/class.phpmailer.php');
		
		//Ayarlar (Bu ayarlar için gerekli bilgiler kullandığınız sunucuya göre değişebilir.)
		$mail = new PHPMailer();
		$mail->isSMTP();  //SMTP Aktif
		//$mail->SMTPDebug = 1; //Hata Gösterimi Aktif
		//$mail->SMTPSecure = 'tls';  //TLS Aktif
		$mail->SMTPAuth   = true;  //SMTP Kimlik Doğrulaması Aktif
		$mail->Host       = '[email protected]';  //SMTP Host
		$mail->Username   = '[email protected]';  //SMTP Kullanıcı Adınız
		$mail->Password   = 'password';	 //SMTP Şifreniz
		$mail->Port       = 587;  //SMTP Portu
		$mail->setFrom('[email protected]', 'Gönderen Adı');  //Mailin Kimden Gönderildiği
		$mail->addAddress('[email protected]', 'Alıcı Adı');	//Mailin Gönderileceği Adres (Buraya formdan gelen mesajın gönderileceği mail adresini giriniz.)
		
		//HTML Aktif
		$mail->isHTML(true);
		$mail->CharSet ="utf-8";
		//Mail Başlığı
		$mail->Subject = 'İletişim Formu Mesajı';
		//Mail İçeriği
		$mail->Body    = '<p><strong>Gönderen:</strong> ' . $_POST["adsoyad"] . ' - ' . $_POST["email"] . '</p>'.
		'<p><strong>Konu:</strong> ' . $_POST["konu"] . '</p>'.
		'<p><strong>Mesaj:</strong> ' . $_POST["mesaj"] . '</p>';

		//Gönder
		if ( $mail->send() ) {
			$gonder = true;
		} else {
			$hata = true;
			$hata_mesaj = "Mesaj gönderilirken bir hata oluştu: ".$mail->ErrorInfo;
		}
	} else {
		$hata = true;
		$hata_mesaj = "Lütfen tüm alanları doldurun.";
	}
	
}
?>

Kod bloğunda görüldüğü gibi öncelikle formun gönderilip gönderilmediğini anlayabilmek için "islem" isimli alanı kontrol ediyoruz. Eğer form gönderilmişse bu kez formda bulunan alanlarının eksiksiz olup olmadığına bakıyoruz.

Eğer tüm kontroller tamam ise class.phpmailer.php dosyamızı kod bloğuna dahil edip, mail gönderimi için gerekli SMTP ayarlarını tanımlıyoruz. Buradaki ayarlar sunucudan sunucuya farklılık gösterebileceği için en doğru ayarları sunucu firmanızdan öğrenebilirsiniz. Bu ayarlar ile WampServer üzerinde sorunsuz çalışıyor.

Son olarak form tasarımımızda başlığın altına aşağıdaki uyarı kontrollerini de ekliyoruz. Bu sayede form gönderildiğinde gerekli uyarıları kullanıcıya göstermiş olacağız.

<?php if ($gonder) { ?>
<div class="alert alert-success">Mesajınız başarıyla gönderildi.</div>
<?php } ?>

<?php if ($hata) { ?>
<div class="alert alert-warning"><?php echo $hata_mesaj; ?></div>
<?php } ?>

Sonuç

Tüm adımları eksiksiz uyguladığınızda iletisim.php dosyamız aşağıdaki gibi olacak.

<?php
$hata = false;
$gonder = false;
//Gönderme işleminin mevcut olup olmadığını kontrol ediyoruz.
if( isset($_POST["islem"]) && $_POST["islem"]=="gonder" ) {
	
	//Formdan gelen verilerin eksiksiz olup olmadığını kontrol ediyoruz.
	if( !empty($_POST["adsoyad"]) && !empty($_POST["email"]) && !empty($_POST["konu"]) && !empty($_POST["mesaj"]) ) {
		
		//PHPMailer
		include_once('phpmailer/class.phpmailer.php');
		
		//Ayarlar (Bu ayarlar için gerekli bilgiler kullandığınız sunucuya göre değişebilir.)
		$mail = new PHPMailer();
		$mail->isSMTP();										//SMTP Aktif
		//$mail->SMTPDebug = 1;  //Hata Gösterimi Aktif
		//$mail->SMTPSecure = 'tls';  //TLS Aktif
		$mail->SMTPAuth   = true;  //SMTP Kimlik Doğrulaması Aktif
		$mail->Host       = '[email protected]';  //SMTP Host
		$mail->Username   = '[email protected]';	 //SMTP Kullanıcı Adınız
		$mail->Password   = 'password';	 //SMTP Şifreniz
		$mail->Port       = 587;  //SMTP Portu
		$mail->setFrom('[email protected]', 'Gönderen Adı');  //Mailin Kimden Gönderildiği
		$mail->addAddress('[email protected]', 'Alıcı Adı');	//Mailin Gönderileceği Adres (Buraya formdan gelen mesajın gönderileceği mail adresini giriniz.)
		
		//HTML Aktif
		$mail->isHTML(true);
		$mail->CharSet ="utf-8";
		//Mail Başlığı
		$mail->Subject = 'İletişim Formu Mesajı';
		//Mail İçeriği
		$mail->Body    = '<p><strong>Gönderen:</strong> ' . $_POST["adsoyad"] . ' - ' . $_POST["email"] . '</p>'.
		'<p><strong>Konu:</strong> ' . $_POST["konu"] . '</p>'.
		'<p><strong>Mesaj:</strong> ' . $_POST["mesaj"] . '</p>';

		//Gönder
		if ( $mail->send() ) {
			$gonder = true;
		} else {
			$hata = true;
			$hata_mesaj = "Mesaj gönderilirken bir hata oluştu: ".$mail->ErrorInfo;
		}
	} else {
		$hata = true;
		$hata_mesaj = "Lütfen tüm alanları doldurun.";
	}
	
}
?>

<!doctype html>
<html lang="tr">
<head>
	<meta charset="utf-8">
	<title>PHP İletişim Formu</title>
	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
</head>
<body>
	<div class="container">
		<h1>PHP İletişim Formu</h1>
		
		<?php if ($gonder) { ?>
		<div class="alert alert-success">Mesajınız başarıyla gönderildi.</div>
		<?php } ?>
		
		<?php if ($hata) { ?>
		<div class="alert alert-warning"><?php echo $hata_mesaj; ?></div>
		<?php } ?>
		
		<form method="POST" action="">
			<div class="form-group">
				<label for="adsoyad">Ad Soyad</label>
				<input type="text" class="form-control" name="adsoyad" id="adsoyad" required>
			</div>
			<div class="form-group">
				<label for="email">E-Posta</label>
				<input type="email" class="form-control" name="email" id="email" required>
			</div>
			<div class="form-group">
				<label for="konu">Konu</label>
				<input type="text" class="form-control" name="konu" id="konu" required>
			</div>
			<div class="form-group">
				<label for="mesaj">Mesaj</label>
				<textarea class="form-control" name="mesaj" id="mesaj" rows="3" required></textarea>
			</div>
			<input type="hidden" name="islem" value="gonder" required>
			<button type="submit" class="btn btn-primary">Gönder</button>
		</form>
	</div>
	
	<!-- JavaScript -->
	<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
	<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
	<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
</body>
</html>

İşte PHP ile iletişim formundan gelen verileri SMTP kullanarak belirlediğimiz bir e-posta adresine bu şekilde gönderebilirsiniz. Aşağıdaki linkte script dosyalarının tamamını bulabilir ve indirip inceleyebilirsiniz.

PHP ile İletişim Formu Script İndir

Daha fazla PHP ve yazılım ile ilgili öğretici içerikler için Yazılım kategorimize göz atmayı unutmayın. Ayrıca aklınıza takılanları yorum bölümünden paylaşabilirsiniz.

Yorum

Yorumlar

  • Akif - 13 Haziran 2021, 01:48

    Hocam merhaba iletişim formu başarıyla gönderildiğinde “boş olan alanları doldurun” uyarısı gibi aynı form üzerinde gönderilsin istiyorum. Başka bir sayfada yeşil bir uyarıyla çıkıyor. Echo komutlarını denedim ama olmadı lütfen yardımcı olur musunuz?

    Yanıtla
    • brkwel - 22 Haziran 2021, 09:16

      Merhaba, jquery ile formu aynı sayfada post etmeniz gerekli. Ajax post olarak araştırın internette örnekler çıkacaktır.

      Yanıtla
  • Uğur - 20 Ağustos 2021, 21:54

    Size milyon kere teşekkür ederim. Müthiş çalışan tek form sizin yaptığınız. Adamsınız, kralsınız müthişsiniz 😀

    Yanıtla
    • brkwel - 28 Ağustos 2021, 09:08

      Yorum için teşekkürler. Takipte kalın.

      Yanıtla
  • Hakan - 25 Kasım 2021, 17:25

    Merhaba Hocam Script Sorunsuz Çalışıyor Fakat gmail vb uzantılı maillere mesaj gidiyor fakat kendi domain uzantılı maillere gitmiyor sorunu nasıl çözebilirim
    Kolay Gelsin

    Yanıtla
    • brkwel - 25 Kasım 2021, 23:22

      Merhaba, mail sunucunuz ile ilgili bir sorun olabilir.

      Yanıtla
  • Iso - 26 Şubat 2022, 23:51

    Cok teşekkür ediyorum, koca googleda yaptigim aramalar sonucunda çalışan tek form sizin yaptığınız.

    Yanıtla
  • duhan öziş - 1 Haziran 2022, 15:09

    merhaba gelen maıllerde gonderen ve konu kısmı bende =?utf-8?Q??= şeklınde cıkıyor neden olabılır.

    Yanıtla
    • brkwel - 20 Haziran 2022, 08:48

      Merhaba, gönderim kısmında doğru değişkenleri kullandığınızdan emin olun

      Yanıtla
  • Barış - 28 Ekim 2022, 22:54

    O kadar aradım denedim. Saatlerdir doğru düzgün çalışan bir bu paylaştığın denk geldi. İşin gücün rast gelsin.

    Yanıtla