Domain & Hosting E-Posta Yazılım Pratikleri

PHPMailer ile SMTP E-posta Gönderimi

Güncelleme: Nisan 2024
Sürümü: PHPMailer 6.9.1

Gönderimlerinizde subject (konu) bölümünde veya gövdede Türkçe karakter sorunu yaşıyorsanız çözümü için güncel kütüphaneyi kullanmanız gerekir. Güncel kütüphaneyi bu linkten indirebilirsiniz.

Web sunucular üzerinde e-posta gönderimleri iyi kurgulanması gereken bir detaydır. Bu nedenle hemen tüm barındırma sağlayıcılarda olduğu gibi Domainhizmetleri paylaşımlı hosting sunucularında da SPAM tehlikesinin önüne geçmek amacıyla sadece SMTP ile doğrulanan gönderimler çalışmaktadır. PHPmail() olan (doğrulamasız çalışan) fonksiyon kötüye kullanıma açıktır ve engellenmiş durumdadır. Hem bulunduğunuz sunucunun hem de alan adınızın kara listeye girmesine sebep olmaktadır.

Çözüm, dünyanın en yaygın kütüphanesi: PHPMailer


1) PHP Composer olmadan kullanım

PHPMailer Kütüphanesini İndir

ZIP içerisindeki /PHPMailer klasörünü, mail gönderimi yapılacak sayfanın bulunduğu klasör içerisine yükleyin:

Exception.php
PHPMailer.php
SMTP.php

Aynı ZIP içerisindeki Mail_Test.php dosyası aşağıdaki gibidir. Bu değişkenleri kendinize ait bilgilerle düzenleyin:

<?php

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

// Gerekli dosyaları include ediyoruz
require 'PHPMailer/PHPMailer.php';
require 'PHPMailer/Exception.php';
require 'PHPMailer/SMTP.php';

$mail = new PHPMailer(true);

try {
    //SMTP Sunucu Ayarları
    $mail->SMTPDebug = 0; // DEBUG Kapalı: 0, DEBUG Açık: 2
    $mail->isSMTP();
    $mail->Host       = 'mail.domainadi.com'; // Email sunucu adresi.
    $mail->SMTPAuth   = true; // SMTP kullanici dogrulama kullan
    $mail->Username   = '[email protected]'; // SMTP sunucuda tanimli email adresi
    $mail->Password   = 'mailsifresi'; // SMTP email sifresi
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // SSL icin `PHPMailer::ENCRYPTION_SMTPS` kullanin. SSL olmadan 587 portundan gönderim icin `PHPMailer::ENCRYPTION_STARTTLS` kullanin
    $mail->Port       = 587; // Eger yukaridaki deger `PHPMailer::ENCRYPTION_SMTPS` ise portu 465 olarak guncelleyin. Yoksa 587 olarak birakin
    $mail->setFrom('[email protected]', 'Gonderen Ad Soyad'); // Gonderen bilgileri yukaridaki $mail->Username ile aynı deger olmali

    //Alici Ayarları
    $mail->addAddress('[email protected]', 'Alıcı Ad Soyad'); // Alıcı bilgileri
    $mail->addAddress('[email protected]'); // İkinci alıcı bilgileri
    //$mail->addReplyTo('[email protected]'); // Alıcı'nın emaili yanıtladığında farklı adrese göndermesini istiyorsaniz aktif edin
    //$mail->addCC('[email protected]');
    //$mail->addBCC('[email protected]');

    // Mail Ekleri
    //$mail->addAttachment('/var/tmp/file.tar.gz'); // Attachment ekleme
    //$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Opsiyonel isim degistirerek Attachment ekleme

    // İçerik
    $mail->isHTML(true); // Gönderimi HTML türde olsun istiyorsaniz TRUE ayarlayin. Düz yazı (Plain Text) icin FALSE kullanin
    $mail->CharSet = 'utf-8';
    $mail->Subject = 'Email Konusu';
    $mail->Body    = 'Bu bölüm mailin <b>HTML türde</b> içeriğidir';

    $mail->send();
    echo 'Tebrikler! Email başarıyla gönderildi!';
} catch (Exception $e) {
    echo "Ops! Email iletilemedi. Hata: {$mail->ErrorInfo}";
}

2) PHP Composer ile kullanım

Github'ta Görüntüle

<?php

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

// Load Composer's autoloader
require 'vendor/autoload.php';

$mail = new PHPMailer(true);

try {
    //SMTP Sunucu Ayarları
    $mail->SMTPDebug = 0; // DEBUG Kapalı: 0, DEBUG Açık: 2
    $mail->isSMTP();
    $mail->Host       = 'mail.domainadi.com'; // Email sunucu adresi.
    $mail->SMTPAuth   = true; // SMTP kullanici dogrulama kullan
    $mail->Username   = '[email protected]'; // SMTP sunucuda tanimli email adresi
    $mail->Password   = 'mailsifresi'; // SMTP email sifresi
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // SSL icin `PHPMailer::ENCRYPTION_SMTPS` kullanin. SSL olmadan 587 portundan gönderim icin `PHPMailer::ENCRYPTION_STARTTLS` kullanin
    $mail->Port       = 587; // Eger yukaridaki deger `PHPMailer::ENCRYPTION_SMTPS` ise portu 465 olarak guncelleyin. Yoksa 587 olarak birakin
    $mail->setFrom('[email protected]', 'Gonderen Ad Soyad'); // Gonderen bilgileri yukaridaki $mail->Username ile aynı deger olmali

    //Alici Ayarları
    $mail->addAddress('[email protected]', 'Alıcı Ad Soyad'); // Alıcı bilgileri
    $mail->addAddress('[email protected]'); // İkinci alıcı bilgileri
    //$mail->addReplyTo('[email protected]'); // Alıcı'nın emaili yanıtladığında farklı adrese göndermesini istiyorsaniz aktif edin
    //$mail->addCC('[email protected]');
    //$mail->addBCC('[email protected]');

    // Mail Ekleri
    //$mail->addAttachment('/var/tmp/file.tar.gz'); // Attachment ekleme
    //$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Opsiyonel isim degistirerek Attachment ekleme

    // İçerik
    $mail->isHTML(true); // Gönderimi HTML türde olsun istiyorsaniz TRUE ayarlayin. Düz yazı (Plain Text) icin FALSE kullanin
    $mail->CharSet = 'utf-8';
    $mail->Subject = 'Email Konusu';
    $mail->Body    = 'Bu bölüm mailin <b>HTML türde</b> içeriğidir';

    $mail->send();
    echo 'Tebrikler! Email başarıyla gönderildi!';
} catch (Exception $e) {
    echo "Ops! Email iletilemedi. Hata: {$mail->ErrorInfo}";
}
Subscribe
Bildir
guest
13 Yorum
En Yeniler Eskiler
Inline Feedbacks
View all comments