Php Mail Fonksiyonu ile Email Gönderimi

Php Mail Fonksiyonu ile Email Gönderimi

Email her projenin veya işletmenin önemli bir kısmıdır ve Php ile ilgileniyorsanız, php mail fonksiyonu kesinlikle işinize yarayacaktır.

HostingerZoho Mail ve G Suite dahil birçok kurumsal email platformu bulunsa da PHP de kullanarak mail gönderebilirsiniz. Bu rehberimizde yerleşik PHP mail() fonksiyonunu ve Simple Mail Transfer Protocol (php mailer SMTPile PHPMailer‘ı kullanarak PHP mail gönderme nasıl yapılır öğreneceksiniz.

PHP mail() Fonksiyonunu Kullanma

PHP mail() fonksiyonunu kullanmak genellikle sistem yöneticisi tarafından yapılandırılan ve email yollamanıza izin veren bir Sendmail programını çalıştırır.

Bu fonksiyonu kullanmak için hosting sağlayıcınızın Sendmail hizmeti seçeneğini elle yönetmenize izin vereceğinden emin olun.

 

Eğer halihazırda Hostinger’ı kullanıyorsanız bu fonksiyonu hPanel’den etkinleştirebilir veya devre dışı bırakabilirsiniz. Tek yapmanız gereken Emails -> Mail Service Control‘a tıklamaktır.

hPanel'de Mail Hizmet Kontrolü seçeneğini kullanmak

Varsayılan olarak Sendmail hizmeti etkinleştirilmiştir. Yine de kontrol etmekte fayda var.

Sendmail hizmetini yönetme seçeneği varsayılan olarak etkinleştirilmiştir

PHP Mail için Test Dosyası Oluşturma

İlk olarak PHP mail scripti için bir dosya oluşturmanız ve de public_html dizinine yerleştirmeniz gerekir. Böylelikle bu dosyaya domain adı üzerinden kolaylıkla erişebilirsiniz.

  1. hPanel’e erişmek için File Manager -> Go to File Manager‘a tıklayın.
  2. Yeni Dosya‘ya tıklayarak yeni bir dosya oluşturun. Hadi dosyaya testmail.php adını verelim ve Oluştur‘a tıklayalım.
    public_html klasöründe testmail.php dosyası oluşturma.
  3. PHP mail() fonksiyonunu kullanarak düzenleyeceğimizden dolayı testmail.php dosyasına çift tıklayın. İşte bu rehberde kullanacağımız fonksiyonun temel elementlerinin bir örneği. Bunları sıradaki kısımda daha detaylı olarak açıklayacağız. Şimdilik düzenlemeniz bittiğinde Kaydet & Çık‘a tıklayın.
    PHP mail'in temel elementleri
  1. Şimdi Domaininiz/testmail.php‘e tarayıcınızdan erişerek bir email gönderebilirsiniz. Unutmayın ki Domaininiz kısmını testmail.php dosyasını oluşturmak için kullandığınız domainle değiştirmeniz gerekir.
  2. Mesajınız yolladığınız email adresine gelmiş olmalıdır.Your recipient's inbox receiving the test email.

PHP Mail Elementlerini Kavrama

Daha önce de bahsettiğimiz gibi size basit bir PHP mail scriptinin temellerini anlatacağız. Bu örnekte fonksiyonu daha iyi anlayabilmeniz için basit bir email söz dizimi sunduk.

Ancak Sendmail fonksiyonu ve elementleri hakkında daha fazla bilgiye ihtiyacınız varsa resmi PHP kılavuzuna göz atabilirsiniz.

İşte daha önceki kısımda kullandığımız PHP söz dizimi:

<?php
    ini_set( 'display_errors', 1 );
    error_reporting( E_ALL );
    $from = "test@hostinger-tutorials.com";
    $to = "test@hostinger.com";
    $subject = "Checking PHP mail";
    $message = "PHP mail works just fine";
    $headers = "From:" . $from;
    mail($to,$subject,$message, $headers);
    echo "The email message was sent.";
?>

Hadi bu söz dizimini parça parça inceleyelim:

ini_set( 'display_errors', 1 );
error_reporting( E_ALL );

İlk iki satır hataların rapor edilmesini sağlar, böylece kod çalışmıyorsa hatalı olup olmadığını görebilirsiniz.

$from = "test@hostinger-tutorials.com";

Bu satır e-posta gönderen adresini içermelidir. Birçok barındırma sağlayıcıları burada rastgele e-posta adresini kullanmaya izin vermiyor, bu nedenle e-postayı başarılı bir şekilde yetkilendirmek ve göndermek için bu alanda alan adı için oluşturulan bir e-posta adresini girmeniz gerekiyor.

$to = "test@gmail.com";

Alıcı e-posta adresi. Buraya alıcınızın e-posta adresini girmelisiniz.

$subject = "Checking PHP mail";

Email’in başlığını buraya girin.

$message = "PHP mail works just fine";

Email mesajının içeriği burada olmalı.

$headers = "From:" . $from;

Gönderici adresi, yanıtlama konumu gibi önemli bilgilere sahiptir.

mail ($to,$subject,$message,$headers);

Bu satır fonksiyonu çalıştırmak için kullanılır.

echo "The email message was sent.";

Script başarıyla çalıştığında gözükecek mesaj.

PHPMailer ile Email Gönderme

PHPMailer, PHP için popüler bir mail gönderme kütüphanesidir. PHPMailer, mail() fonksiyonu veya Simple Mail Transfer Protocol (php mailer SMTP) ile mail göndermeyi destekler. Bu kütüphane PHP mail kurmanın karmaşık sürecini bir mail oluşturmak ve göndermek için bir takım fonksiyonlar sağlayarak kolaylaştırır.

Eğer Composer yüklüyse PHPMailer’ı yüklemek oldukça kolaydır. Eğer Hostinger‘ı kullanıyorsanız bu konuda telaşlanmayın çünkü Composer bütün hosting planlarımızda yüklü olarak gelmektedir.

Yine de eğer PHPMailer’ı elle yüklemeye ihtiyacınız varsa hosting hesabınıza SSH terminali aracıyla bağlanmanız gerekmektedir. Bunun için bu adımları takip edin:

  1. PuTTY SSH istemcisini indirin ve yükleyin.
  2. hPanel kontrol panelinize gidin ve Advanced kısmından SSH Access‘i bulun ve üzerine tıklayın.
  3. SSH Access Information kısmından bilgilerinizi bir kenara not edin. SSH IP‘si, adresiport’ukullanıcı adı ve şifreye ihtiyacınız olacak.
  4. PuTTY’i açın ve SSH IP‘nizi ve port’unuzu girin.
    PuTTY SSH ayarları.
  5. Open‘a bastığınızda yeni bir komut penceresi açılacaktır. SSH kullanıcı adınızı ve şifrenizi girin. İşiniz bittikten sonra Enter tuşuna basın.

NOT: PuTTY şifrenizi göstermeyecektir. Eğer şifreniz ekranda görünmezse şaşırmayın.

  • Aşağıdaki komutu çalıştırın:
  • cd public_html
    
    1. Enter‘a basın ve bu komutu çalıştırın:
    composer require phpmailer/phpmailer
    
    1. Kurulum süreci bitene kadar bir süre bekleyin.
      PHPMailer kurulum süreci.

    PHPMailer’ı Hostinger SMTP ile Kullanmak

    PHPmailer hazır olduktan sonra Hostinger SMTP’yi kullanarak PHP mail gönderme işlemini yapabilirsiniz.

    1. hPanel üzerinden Email Account -> Create a New Email Account kısmına giderek bir email hesabı oluşturun. Create tuşuna tıklamadan önce yeni email adresini ve şifreyi girin.
      hPanel'de yeni bir email hesabı oluşturma
    2. Bu işlemi tamamladıktan sonra aynı sayfadaki SMTP bilgilerinizi not etmeniz yararınıza olacaktır:
      Email SMTP bilgileri

    NOT: PHPMailer aracılığıyla bir email göndermek için hesap kullanıcı adınızışifreniziSMTP host‘unu ve port’unu hatırlamanız gerekir.

  • public_html dizininde testphpmailer.php adlı bir dosya oluşturun. hPanel’e erişin ve File Manager -> Go to File Manager‘a tıklayın.
  • Yeni Dosya‘ya tıklayın. Dosyayı testphpmailer.php olarak adlandırın and Oluştur‘a tıklayın.
  • Yeni oluşturduğunuz testphpmailer.php dosyasına çift tıklayın ve aşağıdaki kod parçacığını kopyalayıp yapıştırın:
  • <?php
    use PHPMailer\PHPMailer\PHPMailer;
    require 'vendor/autoload.php';
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->SMTPDebug = 2;
    $mail->Host = 'smtp.hostinger.com';
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->Username = 'test@hostinger-tutorials.com';
    $mail->Password = 'ŞİFRENİZ';
    $mail->setFrom('test@hostinger-tutorials.com', 'Adınız');
    $mail->addReplyTo('test@hostinger-tutorials.com', 'Adınız');
    $mail->addAddress('example@email.com', 'Alıcı Adı');
    $mail->Subject = 'PHPMailer Testi';
    $mail->msgHTML(file_get_contents('message.html'), __DIR__);
    $mail->Body = 'Bu öylesine bir yazı';
    //$mail->addAttachment('test.txt');
    if (!$mail->send()) {
        echo 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
        echo 'The email message was sent.';
    }
    ?>
    
    1. Yukarıdaki kodu bilgilerinize ve ihtiyacınıza göre düzenleyin. Örneğin, ŞİFRENİZ kısmını email şifrenizle veya test@hostinger-tutorials.com kısmını kullanıcı adınızla, example@gmail.com‘u ise alıcı email addresiyle değiştirin. Geri kalan kısımları da düzenleyin. İşiniz bittikten sonra Kaydet & Çık‘a tıklayın.
    2. PHPMailer’ınız artık kullanılmaya hazır. Bu scripti tarayıcınıza Domaininiz.com/testphpmailer.php adresini girerek çalıştırabilirsiniz.

    PHPMailer Elementlerini Kavrama

    PHPMailer’ın nasıl çalıştığını anlamak için hadi yukarıdaki SMTP’yi kullanan scripti inceleyelim. İşte bütün elementlerin açıklaması:

    use PHPMailer\PHPMailer\PHPMailer;
    

    Bu satır PHPMailer sınıfını ad alanına aktarır.

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

    PHPMailer’ın ihtiyaç duyduğu çeşitli kütüphaneleri içerir.

    $mail->
    

    Buna benzer bütün değişkenler sunucu bilgileri, mesaj başlıkları, ekler ve daha da fazlası gibi önemli bilgileri içerir. Kısaca alıcının SMTP doğrulamasıyla korunduğundan emin olur.

    if (!$mail->send()) {
    

    Scriptler çalıştırıldığında ne olacağını tanımlar.

    echo 'Mailer Error: ' . $mail->ErrorInfo;
    

    Script, e-postayı gönderemediğinde açıklamayla birlikte bir hata mesajı gösterecektir.

    } else {
    

    Script çalıştırıldığında ne olacağını belirler.

    echo 'The email message was sent!';
    

    Eğer email başarıyla gönderilirse bu mesaj gözükecektir.

    NOT: SMTPDebug = 2;  satırı sadece bir script’i test edip nasıl çalıştığını görmek istediğinizde kullanışlıdır. Eğer test sürecinizi tamamladıysanız SMTPDebug = 0; olarak değiştirmeniz gerekir. Bu, son kullanıcının SMTP teslimat raporunu görmesini engellemek için yapılmaktadır.

    Dikkat ettiyseniz ilk örneğe kıyasla farklı bir işlem yapılmaktadır. Sade bir metindense bir HTML mesajı gönderilmektedir.

    Bu yüzden mesajınız içeriğini aynı dizinde (public_html) yer alan mesaj.html dosyasından alacaktır.

    Bu format sayesinde daha fazla fonksiyonelliği sahip olursunuz çünkü HTML fazlasıyla özelleştirilebilirdir. Rengi, stili, görseli değiştirebilir ve hatta ortam dosyaları bile ekleyebilirsiniz.

    PHPMailer İletişim Formu

    PHPMailer’ı sadece basit bir PHP mail göndermekten fazlası için kullanabilirsiniz. Bunun bir yoluysa kitlenizin sizle iletişime geçebilmesi için bir iletişim formu oluşturmaktır.

    İşte script’inizin bir örneği:

    <?php
    use PHPMailer\PHPMailer\PHPMailer;
    require 'vendor/autoload.php';
        $mail = new PHPMailer;
        $mail->isSMTP();
        $mail->Host = 'smtp.hostinger.com';
        $mail->Port = 587;
        $mail->SMTPAuth = true;
        $mail->Username = 'test@hostinger-tutorials.com';
        $mail->Password = 'EMAIL_ACCOUNT_PASSWORD';
        $mail->setFrom('test@hostinger-tutorials.com', 'Mr. Drago');
        $mail->addAddress('example@gmail.com', 'Receiver Name');
        if ($mail->addReplyTo($_POST['email'], $_POST['name'])) {
            $mail->Subject = 'PHPMailer contact form';
            $mail->isHTML(false);
            $mail->Body = <<<EOT
    Email: {$_POST['email']}
    Name: {$_POST['name']}
    Message: {$_POST['message']}
    EOT;
            if (!$mail->send()) {
                $msg = 'Sorry, something went wrong. Please try again later.';
            } else {
                $msg = 'Message sent! Thanks for contacting us.';
            }
        } else {
            $msg = 'Share it with us!';
        }
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Contact form</title>
    </head>
    <body>
    <h1>Do You Have Anything in Mind?</h1>
    <?php if (!empty($msg)) {
        echo "<h2>$msg</h2>";
    } ?>
    <form method="POST">
        <label for="name">Name: <input type="text" name="name" id="name"></label><br><br>
        <label for="email">Email: <input type="email" name="email" id="email"></label><br><br>   
        <label for="message">Message: <textarea name="message" id="message" rows="8" cols="20"></textarea></label><br><br>
        <input type="submit" value="Send">
    </form>
    </body>
    </html>
    

    Tıpkı önceki script’ler gibi public_html klasöründe yeni bir dosya oluşturmanız gerekir. Biz, bu örnekte dosyayı formscript.php olarak adlandırdık. Script’in içindeki bilgiyi kendinize göre düzenleyin. Daha sonra ise tarayıcınızdan script’i çalıştırmanız gerekir.

    İşte sonuç böyle olacaktır:

    PHPMailer interaktif iletişim formu örneği.

    Müşteriniz bir mesaj gönderdikten sonra bir onay mesajı görecek ve müşterinizin girdiği bilgiler aşağıdaki kısımda girdiğiniz e-posta adresinin gelen kutusunda belirecektir:

    $mail->addAddress('example@gmail.com', 'Receiver Name');
    

    NOT: Eğer PHPMailer iletişim formu çalışmazsa soruna neyin sebep olduğunu görmek için $mail->SMTPDebug = 2; satırını ekleyin. İşiniz bittikten sonra 2‘yi ile değiştirmeyi unutmayın.

    PHPMailer, resmi GitHub deposunda deneyebileceğiniz daha fazla örneğe sahiptir. Ayrıca WordPress’i kullanıyorsanız WP FormsFormidable Forms veya Gravity Forms gibi eklentilerin yardımıyla kolaylıkla bir iletişim formu oluşturabilirsiniz.

    WP Forms ana sayfası

    Sıkça Karşılaşılan PHP Mail ve PHPMailer Hataları

    PHP mail veya PHPMailer kullanırken bazen hatalar oluşabilir. İşte en sık karşılaşılan hataların listesi ve çözümleri.

    Sender Address Rejected: Not Owned by the User

    Bu hata sunucunun girilen bilgilerle doğrulama yapamadığı anlamına gelir.

    Bu hatayı çözmek için mesajı yollamak için girdiğiniz e-posta adresini kontrol edin ve mevcut bir e-posta kutusuna bağlı olduğundan emin olun. Eğer yanlış bir gelen kutusuna yönlendiriyse doğru olanı için düzeltin. Ayrıca SPF kaydınızı etkinleştirdiğinizden de emin olun.

    Gmail Couldn’t Verify That Domaininiz.com Sent This Message

    Eğer bir PHP mail script’ini test ederken bu uyarıyı görüyorsanız bunun anlamı:

    • SPF kaydınız etkinleştirilmemiştir.
    • Var olmayan veya size ait olmayan bir adresten email gönderdiniz. SMTP doğrulama bilgilerinizin doğru olduğundan emin olun.

    Mail İstenmeyen Klasörüne Gitti

    Bir PHP e-postasının istenmeyen olarak gözükmesine sebep olacak birçok neden vardır. İşte bunun en sık görülen sebepleri:

    • Yanıltıcı veya istenmeyen e-posta başlıklarına benzeyen başlıklar. Buna birkaç örnek olarak “test”“merhaba” veya “acil” gibi başlıklar olabilir. Başlıkta niyetinizi açıkça belli ettiğinizden emin olun.
    • Epostanızın filtrelenmesine sebep olan güvenlik önlemlerini devreye sokacak yanlış gönderici adresi kullanmak. Bu, sahte epostaları ve dolandırıcılıkları engellemek için yapılmaktadır.
    • İstenmeyen epostalarda sıkça görülen kelimeleri kullanmak. Bu kategoriye “harika teklif”“buraya tıkla”“özel indirim” ve “bu spam değildir” gibi cümleler dahildir. Hatanın bundan kaynaklı olup olmadığını görmek için mesaj içeriğinizi değiştirmeyi deneyin.
    • E-posta listenizde abonelikten çık butonu yok. E-postalarınızı istenmeyen olarak şikayet eden çok kişi olduğunda istenmeyen e-postalar filtresini aşmanız da zor olacaktır. Abonelikten çıkma butonuna sahip olmak bunun olmaması için harika bir yöntemdir ve de okuyucularınızın güvenini kazanmış olursunuz.

    Sonuç

    Tebrikler! Artık PHP mail gönderme nasıl yapılır ve SMTP doğrulamasıyla mail göndermek için PHPMailer nasıl kullanılır biliyorsunuz. Bu rehberde basit örnekler sunmuş olsak da aynı söz dizimini bir iletişim formu veya web sitenize başka uzantılar geliştirmek için kullanabilirsiniz.

    Daha detaylı bilgi için PHPMailer projesini incelemenizi öneririz. Eğer herhangi bir öneriniz veya fikriniz varsa aşağıdaki yorumlar kısmında bizimle paylaşmayı unutmayın!

    Author
    Yazar

    Egehan D.

    Egehan Hostinger'da ML ve NN ile denetimsiz öğrenme üzerinde çalışıyor. Veri analizi hakkında büyük bir tutkuya sahiptir. İşi her ne kadar hobi gibi olsa da, çeşitli aktivitelerde gönüllü olmaktan ve ormanda kamp yapmaktan da büyük oranda zevk alıyor.