İletişim formu bir web sitesinin önemli alanlarından biridir. Kullanıcıdan alınan bilgileri web site yöneticilerine ulaştırmayı sağlayan bir formu oluşturmak için sadece tasarlamak yeterli değildir. Aynı zamanda formdan girilen verilerin sorunsuzca istenilen hedefe ulaştırılması gerekir. Bunun için de PHP gibi sunucu taraflı çalışan bir programlama dili kullanılır. İşte bu yazımızda basit bir PHP iletişim formu nasıl oluşturulur buna değineceğiz.
Gereksinimler
- Bootstrap 5 (CDN üzerinden kullanılabilir)
- PHPMailer kütüphanesi
- PHP 7 veya üzeri web sunucu (Bilgisayarınızda denemek için WampServer kullanabilirsiniz.)
- SMTP erişimi olan bir e-posta (Gmail, Yandex vb.)
Bootstrap, PHP ve PHPMailer Kullanarak PHP İletişim Formu Oluşturma
Php iletişim formu oluşturmak için öncelikle HTML/CSS ile formun tasarımını hazırlamak gerekir. Bunu biraz daha hızlı şekilde halledebilmek için güncel Bootstrap kütüphanesini kullanacağız. Bu sayede kolayca tamamen mobil uyumlu ve şık bir iletişim formu hazırlayacağız. Aşağıda Bootstrap 5 ile hazırlanmış iletişim formu için kodlara ulaşabilirsiniz. Burada Bootstrap kütüphanesini CDN kullanarak sayfamıza ekledik. Ayrıca buraya tıklayarak Bootstrap’ı indirip kullanabilirsiniz.
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<title>İletişim</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="bg-light">
<div class="container mt-5">
<h2>İletişim Formu</h2>
<form action="" method="POST">
<div class="mb-3">
<label for="adsoyad" class="form-label">Adınız</label>
<input type="text" class="form-control" id="name" name="name" required>
</div>
<div class="mb-3">
<label for="email" class="form-label">E-posta</label>
<input type="email" class="form-control" id="email" name="email" required>
</div>
<div class="mb-3">
<label for="mesaj" class="form-label">Mesaj</label>
<textarea class="form-control" id="message" name="message" rows="5" required></textarea>
</div>
<input type="hidden" name="islem" value="gonder" required>
<button type="submit" class="btn btn-primary">Gönder</button>
</form>
</div>
</body>
</html>
Bootstrap ile kolayca hazırladığımız bu form üzerinde <form action=”” method=”POST”> kullanarak iletişim formunda bulunan gönder butonuna basıldığında verileri tekrar aynı sayfaya POST edilecek şekilde ayarlıyoruz. Böylece PHPMailer işlemlerini ve hata mesajlarını aynı sayfada gösterebileceğiz. Burada action=”” değerini boş bırakmak yerine gonder.php gibi bir ayrı bir sayfaya yönlendirip işlemleri orada da yapabilirsiniz.
Ek olarak formun altına eklediğimiz <input type=”hidden” name=”islem” value=”gonder” required> gizli “islem” alanına “gonder” değerini atayarak verilerin formdan geldiğini de kontrol etmiş oluyoruz. Aslında bu kontrol için diğer adsoyad, email ve mesaj gibi alanları da kullanabiliriz ancak form üzerinden ekranda görünmeyen farklı verilerin de iletilebileceğini gösterebilmek adına bunu da örneğimizde kullanacağız.

Kodları tarayıcıda çalıştırdığınızda bu şekilde görünmesi gerekiyor.
Formdan Gönderilen Verilerin PHPMailer ile Mail Adresine İletilmesi
Tasarım hazır olduğuna göre artık kullanıcıların formdan gönderdiği verileri belirlediğimiz bir mail adresine iletebiliriz. Bunun için bize gerekli olan PHPMailer kütüphanesine buraya tıklayarak ulaşabilirsiniz. Kütüphaneyi indirdikten sonra dosyaları iletisim.php dosyasının bulunduğu klasöre dosyaları kopyalayıp sayfamıza dahil etmemiz gerekiyor. Dosyaları kopyaladıktan sonra klasör yapısı aşağıdaki gibi olması gerekiyor.

PHP iletişim formumuza PHPMailer kütüphanesini ekleyebilmemiz için iletisim.php içerisine aşağıdaki dosyaların dahil edilmesi gerekiyor.
//PHPMailer
require 'PHPMailer-6.10.0/src/PHPMailer.php';
require 'PHPMailer-6.10.0/src/SMTP.php';
require 'PHPMailer-6.10.0/src/Exception.php';
Bu php kodları dosyaları PHP iletişim formu sayfamıza dahil etmemize yarıyor ancak bu şekilde herhangi bir görev gerçekleştirmiyorlar. Kullanıcıdan gelen verilerin alınıp gerekli kontroller sağlandıktan sonra PHPMailer kütüphanesi ile istediğimiz adrese iletilmesini sağlamamız gerekiyor. Bunun için gerekli kodları açıklamaları ile birlikte aşağıda paylaşıyorum.
<?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["mesaj"]) ) {
require 'PHPMailer-6.10.0/src/Exception.php'; // PHPMailer hata yönetimi sınıfını dahil et
require 'PHPMailer-6.10.0/src/PHPMailer.php'; // PHPMailer ana sınıfını dahil et
require 'PHPMailer-6.10.0/src/SMTP.php'; // SMTP sınıfını dahil et
$mail = new \PHPMailer\PHPMailer\PHPMailer(true); // PHPMailer nesnesi oluştur, true = Exception aktif
try {
$mail->SMTPDebug = 2; // SMTP iletişim detayları açık (kapatmak için 0)
$mail->isSMTP(); // SMTP protokolü ile mail göndereceğimizi belirtiyoruz
$mail->Host = 'host.ornek.com'; // SMTP sunucu adresi
$mail->SMTPAuth = true; // SMTP doğrulama aktif
$mail->Username = 'info@ornek.com'; // SMTP kullanıcı adı (mail adresi)
$mail->Password = 'xxx'; // SMTP şifresi
$mail->SMTPSecure = false; // Şifreleme yok (TLS veya SSL kapalı, sunucunuzun desteğine göre açmak isterseniz 'tls' veya 'ssl' girip portu da güncellemeniz gerekir.)
$mail->SMTPAutoTLS = false; // Otomatik TLS devre dışı (TLS kapalı)
$mail->Port = 587; // SMTP portu
$mail->setFrom('info@ornek.com', 'Gönderen Adı'); // Gönderen mail adresi ve adı
$mail->addAddress('alici@gmail.com'); // Alıcı mail adresi
$mail->isHTML(true); // Mail içeriği HTML formatında olacak
$mail->CharSet = 'UTF-8'; // Karakter seti UTF-8 (Türkçe karakterler için)
$mail->Subject = 'Yeni Mesaj'; // Mail konusu
$mail->Body = '<p>' . $_POST["adsoyad"] . '</p>' . '<p>' . $_POST["email"] . '</p>' . '<p>' . $_POST["mesaj"] . '</p>'; // Mail içeriği, formdan gelen mesaj
$mail->send(); // Mail gönderme işlemi
$gonder = true;
} catch (Exception $e) {
$hata = true;
$hata_mesaj = "Mesaj gönderilirken bir hata oluştu: ".$mail->ErrorInfo;
}
} else {
$hata = true;
$hata_mesaj = "Lütfen tüm alanları doldurun.";
}
}
?>
Son aşamada bu kodları iletisim.php sayfamızın en üstüne eklememiz gerekiyor. Böylece işlemler aynı sayfada yapabilecek ve hataları da yine aynı sayfada gösterebileceğiz.
Ayrıca kod bloğunda aşağıda bulunan alanları kendi mail sunucu firmanızdan aldığınız bilgiler ile güncellemeniz gereklidir. Gmail, Yandex v.b. hesaplar için de ayrıca bir rehber paylaşacağım.
$mail->SMTPDebug = 2; // SMTP iletişim detayları açık (kapatmak için 0)
$mail->isSMTP(); // SMTP protokolü ile mail göndereceğimizi belirtiyoruz
$mail->Host = 'host.ornek.com'; // SMTP sunucu adresi
$mail->SMTPAuth = true; // SMTP doğrulama aktif
$mail->Username = 'info@ornek.com'; // SMTP kullanıcı adı (mail adresi)
$mail->Password = 'xxx'; // SMTP şifresi
$mail->SMTPSecure = false; // Şifreleme yok (TLS veya SSL kapalı, sunucunuzun desteğine göre açmak isterseniz 'tls' veya 'ssl' girip portu da güncellemeniz gerekir.)
$mail->SMTPAutoTLS = false; // Otomatik TLS devre dışı (TLS kapalı)
$mail->Port = 587; // SMTP portu
iletisim.php dosyamızın en üstüne php kodlarını da ekledikten sonra sayfa içerisinde hataları gösterebilmek için form içinde bir alana hata kontrollerini ve tasarımlarını da dahil etmemiz gerekiyor.
<?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 kodları ekledikten sonra iletisim.php sayfamızın son hali aşağıdaki gibi olması 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["mesaj"]) ) {
require 'PHPMailer-6.10.0/src/Exception.php'; // PHPMailer hata yönetimi sınıfını dahil et
require 'PHPMailer-6.10.0/src/PHPMailer.php'; // PHPMailer ana sınıfını dahil et
require 'PHPMailer-6.10.0/src/SMTP.php'; // SMTP sınıfını dahil et
$mail = new \PHPMailer\PHPMailer\PHPMailer(true); // PHPMailer nesnesi oluştur, true = Exception aktif
try {
$mail->SMTPDebug = 2; // SMTP iletişim detayları açık (kapatmak için 0)
$mail->isSMTP(); // SMTP protokolü ile mail göndereceğimizi belirtiyoruz
$mail->Host = 'host.ornek.com'; // SMTP sunucu adresi
$mail->SMTPAuth = true; // SMTP doğrulama aktif
$mail->Username = 'info@ornek.com'; // SMTP kullanıcı adı (mail adresi)
$mail->Password = 'xxx'; // SMTP şifresi
$mail->SMTPSecure = false; // Şifreleme yok (TLS veya SSL kapalı, sunucunuzun desteğine göre açmak isterseniz 'tls' veya 'ssl' girip portu da güncellemeniz gerekir.)
$mail->SMTPAutoTLS = false; // Otomatik TLS devre dışı (TLS kapalı)
$mail->Port = 587; // SMTP portu
$mail->setFrom('info@ornek.com', 'Gönderen Adı'); // Gönderen mail adresi ve adı
$mail->addAddress('alici@gmail.com'); // Alıcı mail adresi
$mail->isHTML(true); // Mail içeriği HTML formatında olacak
$mail->CharSet = 'UTF-8'; // Karakter seti UTF-8 (Türkçe karakterler için)
$mail->Subject = 'Yeni Mesaj'; // Mail konusu
$mail->Body = '<p>' . $_POST["adsoyad"] . '</p>' . '<p>' . $_POST["email"] . '</p>' . '<p>' . $_POST["mesaj"] . '</p>'; // Mail içeriği, formdan gelen mesaj
$mail->send(); // Mail gönderme işlemi
$gonder = true;
} catch (Exception $e) {
$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>İletişim</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="bg-light">
<div class="container mt-5">
<h2>İletişim Formu</h2>
<?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 action="" method="POST">
<div class="mb-3">
<label for="adsoyad" class="form-label">Adınız</label>
<input type="text" class="form-control" id="adsoyad" name="adsoyad" required>
</div>
<div class="mb-3">
<label for="email" class="form-label">E-posta</label>
<input type="email" class="form-control" id="email" name="email" required>
</div>
<div class="mb-3">
<label for="mesaj" class="form-label">Mesaj</label>
<textarea class="form-control" id="mesaj" name="mesaj" rows="5" required></textarea>
</div>
<input type="hidden" name="islem" value="gonder" required>
<button type="submit" class="btn btn-primary">Gönder</button>
</form>
</div>
</body>
</html>
Son haliyle bu şekilde kullanabileceğiniz PHP iletişim formu kodlarını buraya tıklayarak indirip kendinize göre özelleştirerek kullanabilirsiniz.