PHP İle İletişim Formu Oluşturmak

Herkese Merhaba,

Bu derste PHP ile bir iletişim formu oluşturup daha sonra bu form üzerinden nasıl kendimize mail gönderebileceğimizden bahsedeceğim. Öncelikle mail gönderme işlemi için PHPMailer sınıfını kullanacağımızı belirteyim. Zaten sınıfın kullanımını öğrendikten sonra hiçbir şey kalmıyor geriye. Tek yapmamız gereken kullanıcıdan bir form aracılığıyla birkaç tane bilgi almak ve bunları mail şablonumuza yerleştirip göndermek. Haydi başlayalım.

PHPMailer sınıfını Github üzerinden edinebilirsiniz: https://github.com/PHPMailer/PHPMailer

Ben ders için önceden Bootstrap kullanarak basit bir mail şablonu hazırladım. Derse eşlik etmek isterseniz bu mail şablonunu kullanabilirsiniz.

<!DOCTYPE html>
<html>
<head>
  <!-- Latest compiled and minified CSS -->
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  <title>PHP İletişim Formu Örneği</title>
</head>
<body>
<div class="container" style="margin-top: 50px;">
  <div class="panel panel-default">
    <div class="panel-heading">
      <h3>Bize Mesaj Gönderin</h3>
    </div>
    <div class="panel-body">
      <form action="" method="POST">
        <div class="form-group">
          <label for="name">Ad Soyad</label>
          <input type="text" class="form-control" id="name" name="name">
        </div>
        <div class="form-group">
          <label for="email">Email Adresi</label>
          <input type="email" class="form-control" id="email" name="email">
        </div>
        <div class="form-group">
          <label for="message">Mesaj</label>
          <textarea class="form-control" id="message" name="message"></textarea>
        </div>
        <div class="form-group">
          <input type="submit" value="Gönder" class="btn btn-success">
        </div>
      </form>
    </div>
  </div>
</div>
</body>
</html>

Şimdi sıra PHPMailer sınıfımız ile mail göndermeye geldi. mail.php adında bir dosya oluşturalım. PHPMailer’ı kullanmadan önce bilmeniz gereken bir şey var. Biz bu örnekte Gmail üzerinden mail göndereceğimiz için Gmail’in SMTP ayarlarını bilmemiz gerekiyor. Gmail’in SMTP ayarları aşağıdaki gibidir. Kendi mail adresinizi kullanacaksanız servis sağlayıcınızla iletişime geçip SMTP ayarlarınızı öğrenebilirsiniz.

Gmail SMTP Ayarları:
SMTP Server: smtp.gmail.com
Kullanıcı Adı: [email protected]
Şifre: mail adresinizin şifresi
SMTP Port: 587

Bu bilgiler sayesinde Gmail ile bağlantı kurup mail göndereceğiz. İsterseniz kaynak kodları Github üzerinden elde edebilirsiniz ama ben Composer kullanmayı tercih edeceğim. Eğer bilgisayarınızda Composer yüklüyse şu komutla PHPMailer sınıfını projenize dahil edebilirsiniz.

composer require phpmailer/phpmailer

Composer hakkında bilginiz yoksa şu dersime bakabilirsiniz: Composer Nedir, Ne İşe Yarar, Nasıl Kullanılır ?

Devam edebiliriz. mail.php dosyamızı açalım ve içini doldurmaya başlayalım. Öncelikle PHP etiketlerimizi açıp autoload dosyamızı çağıralım.

<?php
require 'vendor/autoload.php';

Daha sonra yeni bir PHPMailer objesi oluşturalım. SMTP üzerinden mail göndereceğimizi belirtelim ve kullanıcı adı, server, port gibi ayarlarımızı yapalım.

$mailer = new PHPMailer; // PHPMailer objesi olusturduk
$mailer->isSMTP(); // Maileri SMTP olarak ayarladik
$mailer->Host = "smtp.gmail.com"; /* Hostumuzu ayarladik. Birden fazla server kullanmak isterseniz ; ile ayirabilirsiniz. */
$mailer->SMTPAuth = TRUE; // Authorization islemini aktiflestirdik.
$mailer->Username = "[email protected]";
$mailer->Password = "Mail adresinizin sifresi";
$mailer->SMTPSecure = "tls"; // tls yerine ssl de kullanabilirsiniz.
$mailer->Port = 587; // Baglanilacak portu belirledik.

Temel ayarlarımızı yapmış olduk böylece. Şimdi öncelikli olarak formdan verilerimizi almamız gerekiyor. Daha sonra da mailimizi gönderebiliriz. Formdan verilerimizi almak için şu kod parçası işimizi görür. Bunu da mail.php’ye yazıyoruz.

if (@$_POST) {
  $name = $_POST['name'];
  $email = $_POST['email'];
  $message = $_POST['message'];

  if (empty($name) || empty($email) || empty($message)) {
    die("Lütfen tüm alanları doldurun.");
  }

  if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
    die("Lütfen geçerli bir mail adresi girin.");
  }

  $mailer->CharSet = 'UTF-8';
  $mailer->setFrom('[email protected]');
  $mailer->addAddress('[email protected]');
  $mailer->addReplyTo($email);
  
  $mailer->Subject = "İletişim Formu";
  $mailer->Body = "Ad Soyad: $name\nEmail Adresi: $email\nMesaj: $message";
  $sendMail = $mailer->send();

  if (!$sendMail)
    die('Mail sistem sorunu sebebiyle gönderilemedi.');
  else
    die('Mesajınız başarılı bir şekilde gönderildi.');

}

Şimdi kodlarımızı açıklayalım biraz. Öncelikle sayfaya gelen herhangi bir POST isteği olup olmadığını kontrol ettik. Eğer gelen bir istek varsa bu istekten ad soyad, mail adresi ve mesaj bilgilerini aldık. daha sonra bunlardan herhangi birisinin boş olması durumunda sistemimizin çalışmayı durdurmasını ve hata vermesini sağladık. Eğer bunların hepsi doluysa bu sefer de filter_var fonksiyonu ile mail adresinin bir mail adresi olup olmadığını teyit ettik. filter_var fonksiyonu hakkındaki dersime de şuradan ulaşabilirsiniz: PHP’de Filtreleme – filter_var Fonksiyonu. Mail adresini de teyit ettikten sonra setFrom metoduyla mailin kim tarafından gönderildiği bilgisini verdik. Daha sonra addAddress metoduyla da mailin nereye gönderileceğini belirttik. Buraya maili almak istediğiniz mail adresinizi yazabilirsiniz. En sonra da addReplyTo metoduyla mail yanıtlanırken hangi mail adresine yanıtlanacağını belirttik ve bunu bize mesaj gönderen kişinin mail adresi olarak ayarladık. Artık mail geldikten sonra yanıtla dediğimiz zaman email alanından aldığımız mail adresine gönderilecek yanıt mailimiz. Daha sonraki 3 satırda mail konumuzu ve mailimizin içeriğini oluşturduk ve bunu gönderip gönderme işlemini sendMail adında bir değişkene atadık. en sonda yazdığımız koşulumuzda da mailin gönderilememesi durumunda hata mesajımızı yazdırıp sistemin çalışmasını durdurduk. Eğer mail gönderilirse de mesajın gönderildiğine dair bir bilgilendirme mesajı ekrana yazdırıp yine sistemin çalışmasını durdurduk.

Yapmanız gereken son bir şey kaldı. HTML formumuzun action kısmına mail.php yazmak. Çalışan bir iletişim formumuz olmuş oldu, hayırlı olsun.

Örnek Uygulamalar, PHP Mustafa Zahid Efe 1 Yorum