1. Ana Sayfa
  2. PHP

PHP PHPMailer Kullanarak Mail Gönderme

PHP PHPMailer Kullanarak Mail Gönderme
+ - 1

Merhaba bu yazımda PHP PHPMailer Kullanarak Mail Gönderme konusunda bakacağız. Composer ile PHPMailer framework‘unu kuracağız ve bir örnek yapacağız.

 

PHP PHPMailer Kullanarak Mail Gönderme

PHPMailer Nedir?

PHPMailer bir kod kitaplığıdır ve bir web sunucusundan PHP kodu aracılığıyla e-postaları güvenli ve kolay bir şekilde göndermek için kullanılır. E-postaları doğrudan PHP kodu aracılığıyla göndermek, SMTP standart protokolüne ve spam gönderme için E-posta enjeksiyonu ile ilgili sorunlara ve güvenlik açıklarına yüksek düzeyde aşinalık gerektirir. PHPMailer, e-posta gönderme sürecini basitleştirir ve kullanımı çok kolaydır.

 

Aşama 1 -> Composer ile PHPMailer Kurulumu

C:\wamp64\www\ yoluna gidiyorum ve deneme diye bir klasör açıyorum. C:\wamp64\www\deneme… Sonra klasör ekranında adres çubuğuna cmd yazıp enter diyorum.

PHP PHPMailer Kullanarak Mail Gönderme

bu sayede bu klasöre adreslenmiş bir cmd ekranı açılıyor.

PHP PHPMailer Kullanarak Mail Gönderme 21

burada da code .  yazıyorum ve enter diyorum. Böylece VSCODE uygulamasını açmış oluyorum.

PHP PHPMailer

VSCODE açıldıktan sonra CTRL + “  yaparak terminali açıyorum. Siz üst menüden veya sol altta yer alan çarpı daire ve üçgen ünlem alanına tıklayarak ulaşabilirsiniz.

VSCODE 4

Şimdi composer kullanarak PHPMailer framework‘unu kuracağız. Composer kuruluma buradan bakabilirsiniz. Çok zor bir kurulum değildir.

Şimdi terminale aşağıdaki kodu yazıp enter diyoruz ve PHPMailer Framework‘unu kurulumunu yapıyoruz.

 

composer require phpmailer/phpmailer

 

composer php mailer 5

Gördüğünüz gibi PHPMailer kurulumu tamamlandı.

 

Aşama 2 – Sunucu Ayarlarını Yapılandırmak

  • SMTPDebug: Bağlantı ve e-posta gönderme sorunlarıyla ilgili mesajları görüntülemek için kullanılır. Aşağıdaki değerlere sahiptir:
    • 0: Varsayılan değerdir. Hata ayıklamayı devre dışı bırakın.
    • 1: İstemci tarafından gönderilen çıktı mesajlarını görüntüleyin.
    • 2: 1 olarak artı sunucudan alınan yanıtları görüntüler.
    • 3: 2 olarak, artı ilk bağlantı hakkında daha fazla bilgi – bu seviye STARTTLS arızalarının teşhis edilmesine yardımcı olabilir.
    • 4: 3 olarak artı daha düşük seviyeli bilgileri görüntüler.
  • isSMTP(): Posta göndericisini SMTP kullanacak şekilde ayarlayın.
  • isMail(): Postayı PHP’nin posta işlevini kullanacak şekilde ayarlayın.
  • Host: Sunucuları belirtir.
  • SMTPAuth: SMTP Kimlik Doğrulamasını Etkinleştir/Devre Dışı Bırak.
  • Username Kullanıcı adını belirtin.
  • Password: Parolayı belirtin.
  • SMTPSecure: Şifreleme tekniğini belirtin. Kabul edilen değerler ‘tls’ veya ‘ssl’.
  • Port: Bağlanacak olan TCP portunu belirtin.

 

$mail->SMTPDebug = 2; // Ayrıntılı hata ayıklama çıktısını etkinleştir
$mail->isSMTP(); // Mailler'ı SMTP kullanacak şekilde ayarla
$mail->Host = 'smtp.mustafabukulmez.com;'; // Ana SMTP sunucusunu belirtin
$mail->SMTPAuth = doğru; // SMTP kimlik doğrulamasını etkinleştir
$mail->Username = 'user@mustafabukulmez.com'; // SMTP kullanıcı adı
$mail->Password = 'şifre'; // SMTP şifresi
$mail->SMTPSecure = 'ssl'; // TLS şifrelemesini etkinleştir, 'ssl' de kabul edildi
$mail->Port = 587; // Bağlanılacak TCP bağlantı noktası

Posta alıcılarını eklemek:

 

$mail->setFrom('from@mustafabukulmez.com', 'Ad'); // Mailin göndericisini ayarla
$mail->addAddress('alıcı1@gmail.net'); // Bir alıcı ekle
$mail->addAddress('alıcı2@gmail.com', 'Ad'); // İsim isteğe bağlıdır

Posta eklerini eklemek (varsa):

 

$mail->addAttachment('url', 'dosyaadı'); // İsim isteğe bağlıdır

İçeriği Eklemek:

  • isHTML(): Doğru iletilirse, e-posta biçimini HTML olarak ayarlar.
  • Subject: Postanın konusunu ayarlayın.
  • Body: Postanın içeriğini ayarlayın.
  • AltBody: E-posta istemcisinin HTML’yi desteklememesi durumunda alternatif gövde.

 

$mail->isHTML(true);                                  
$mail->Subject = 'Konu';
$mail->Body = 'HTML mesaj gövdesi <b>kalın</b>!';
$mail->AltBody = 'HTML olmayan posta istemcileri için düz metin olarak gövde';

Postayı Göndermek:

 

$mail->send();

 

Aşama 3 – Local Posta Sunucusu Kurun veya Dosyaları Hosting’e yükleyin

Burada localhost’unuza bir posta sunucusu kurmazsanız PHPMailer ‘in

 $mail->IsSMTP();

function çalışmayacak ve sürekli düşünecektir.  Daha fazla bilgi için bu bağlantıya yada bu bağlantıya tıklayabilirsiniz.

Bu hataya düşmemek için projenizi bir bir hosting’e kurabilir ve denemeleri orada yapabilirsiniz. Araştırmalarım sonucunda bu şekilde bir uygulamaya ulaştım. Bu bağlantı stackoverlow ve bağlantıya tıklayarak ulaşabilirsiniz. O sayfada bir uygulamadan bahsediliyor. Onu da kurabilirsiniz. Ama dürüst olacağım ben kurmak ile uğraşmadım. Testlerini genelde kendi hosting’imde subdomain açarak deniyorum. O yüzden siz istediğiniz şekilde ilerleyebilirsiniz.

NOT: Ayrıca subdomain’e de SSL kurulumu yaptırmalısınız. Eğer subdomain kullanacaksınız hosting firmanıza ticket açarak SSL kurulumu yapmalarını istemelisiniz.

Aksi takdirde localde çalışması için yukarıdaki satırı

 

$mail->isMail();

olarak değiştirebilirsiniz. Ancak bu seferde aşağıdaki hatayı alacaksınız. Yani yerel e-posta sunucu gerekli.

php mailer send mail error

Burası artık sizde ister yerel e-posta sunucusu kurun, ister dosyalarınızı hosting’e yükleyin.

TEKRAR NOT: Ayrıca SSL kurulumu yaptırmalısınız. Eğer subdomain kullanacaksınız hosting firmanıza ticket açarak SSL kurulumu yapmalarını istemelisiniz.

Ben bu yazı için ticket açıp subdomain’e SSL kurdurtmak istemediğim için bu site dosyaları içinde bir klasör ekledim ve dosyaları oraya attım. İşim bitince de sileceğim.

 

Aşama 4 –  Mail Gönderilmesi

Şimdi ben ne yaptım?

  1. Hosting’ime bağlandım ve bu web sitemin altında bir klasör açarak dosyalarımı yükledim. (subdomain’e ssl kurdurtmaya uğraşmamak için)
  2. An itibari ile dosyalarım burada https://mustafabukulmez.com/PHPMailerDeneme/  . Ancak sileceğim.
  3. Bir index.php dosyası açtım ve kodlarımı yazdım. Bir Selam başlığı ve bir button ekledim. Button’a tıkladığımda mail gönderecek.

NOT: STMP ile mail göndereceksiniz bunu asla loading esnasında yapmayın. Yani bir sayfa yüklenirken mail gönderimini tetiklemeyin. SMTP mail gönderimleri zaman zaman uzun sürebildiği için size sorun yaşatır. STMP çok karmaşık bir protokoldür ve iletinin iletilmesi her zaman aynı süre olmaz. Bu sebeple bir button ekledim ve post olduysa gönderilmesini istedim.

Şimdi index.php veriyorum.

 

<?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

if (isset($_POST["button_pressed"])) {
    $mail = new PHPMailer(true);

    try {
        $mail->SMTPDebug = 2;
        $mail->isSMTP();
        $mail->SMTPAuth   = true;
        $mail->SMTPSecure = 'ssl';
        $mail->Host       = 'mail.mustafabukulmez.com';
        $mail->Port       = 465;
        $mail->Username   = 'info@mustafabukulmez.com';
        $mail->Password   = 'şifreniz';
        $mail->From  = "info@mustafabukulmez.com";
        $mail->FromName  = "Mustafa BÜKÜLMEZ";

        $mail->addAddress('mustafabukulmez3446@gmail.com');
        $mail->CharSet = "utf-8";

        $mail->isHTML(true);
        $mail->Subject = 'Konu';
        $mail->Body    = 'HTML Mesajı. <b>Kalın ifade ve <i>italik</i> ifade </b> ';
        $mail->AltBody = 'HTML olmayan posta istemcileri için düz metin gövdesi';
        $mail->Send();

        echo "Posta başarıyla gönderildi!";
    } catch (Exception $e) {
        echo "Mesaj gönderilemedi. Posta Hatası: {$mail->ErrorInfo}";
    }
}
?>
<html>

<body>
    <h1>Selam</h1>
    <form method="post" action="">
        <input type="submit" value="Send" />
        <input type="hidden" name="button_pressed" value="1" />
    </form>
</body>

</html>

Button’a tıkladığımda mailin gönderildiğini görebiliyorum.

phpmailer send mail success 7 phpmailer send mail success 8

Gördüğünüz gibi mail başarı ile geldi.

 

Yazıyı bitirirken birkaç özet bilgi vermek istiyorum.

  1. Localhost ‘ta çalışırken, yerel posta sunucusu kurmadan e-posta gönderimi yapamazsınız. Bunun için Postfix öneriliyor. Ben kullanmadım. Yukarıda linkleri bulabilirsiniz.
  2. SSL ile s-posta göndermek için SSL kurulu olması gerekiyor. Projenizi Subdomain’e kurduysanız hosting firmanızdan SSL kurulumu talep ediniz.
  3. PHPMailer, çok fazla güvenlik önlemi içerdiği için kullanımı şiddetle tavsiye edilir.
  4. PHPMailer’i Composer kullanarak rahatlıkla kurabilirsiniz. Özellikle web tarafında kendinizi geliştirmek istiyorsanız ilk öğrenmeniz gereken şeylerden birisi composer kullanımıdır.

 


PHP PHPMailer Kullanarak Mail Gönderme yazımız da bu kadardı arkadaşlar. PHPMailer kullanarak mail gönderme işlemini başarı ile gerçekleştirdik. Diğer yazılarımızda görüşmek üzere….

PHP Dersleri için başlattığım repoya bağlantıya tıklayarak ulaşabilirsiniz. Tüm PHP yazılarım için tıklayabilirsiniz. Bu dersin kodlarına da bu bağlantıya tıklayarak ulaşabilirsiniz. Burada PHPMailer kodları yer almıyor. Siz onu composer ile kuracaksınız. Yukarıda zaten anlattım.

Kodla kalın. :)

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)

Yorumlar (1)

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.