PHP ile SMTP’den Mail Gönderimi – PHPMailer

PHP SMTP PHPMailer Mail Gönderimi

PHP SMTP PHPMailer Mail Gönderimi

Açıklama:

Nasıl yapılır kısmına geçmeden önce PHPMailer sınıfı ve özellikleri ile alakalı ufak bir girizgah yapıyorum, ilgisini çekmeyenler yapılandırma kısmına geçebilir.

PHPMailer, bir web sunucusundan PHP kodu aracılığıyla mailleri güvenli ve kolay bir şekilde göndermek için oluşturulmuş olan bir kod kitaplığıdır. PHP uygulamanıza mail işlevselliği eklemek söz konusu olduğunda, PHPMailer en iyi seçim olacaktır. PHP frameworklerinin çoğu ile uyumlu olmak ile beraber içerik yönetim sistemi olarak adlandırılan (CMS) bir çok açık kaynak kodlu projelerde de kullanılmıştır (WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla ve diğerleri…). PHPMailer, eklerle HTML e-mailleri oluşturmak ve bunları birden çok alıcıya göndermek için güçlü işlevsellik sağlar.

 

Özellikleri:

  • SMTP kimlik doğrulaması
  • Güvenli / MIME şifreleme
  • TLS ve SSL protokolleri desteği
  • Düz metinle birlikte HTML desteği
  • Bir veya birden fazla ek ve gömülü görüntü desteği
  • Birden çok Alıcı, CC, BCC ve Yanıt adresi içeren e-postalar
  • UTF-8 içeriği ve 8 bit, base64, ikili ve alıntılı yazdırılabilir kodlamalar için destek
  • E-posta adreslerini otomatik olarak doğrular
  • Başlık ekleme saldırılarına karşı koruma
  • 50 farklı dilde hata mesajları
  • PHP 5.5 ve üst versiyonlar ile uyumlu
  • Ve daha fazlası…

 

Yapılandırma:

Bu yazıyı yazarken PHPMailer’in son kararlı versiyonu 6.1.8 idi. Aşağıdaki linkten PHPMailer’i direkt bilgisayarınıza indirebilir ya da güncel sürüm kontrolü yapmak için github sayfasına göz atabilirsiniz.

PHPMailer-6.1.8.zip

 

Büyük olasılıkla, e-posta bildiriminizi tasarlamak için HTML kullanacaksınız. Öyleyse, HTML yöntemlerini ve özelliklerini kullanmaya ilişkin bazı örnekleri inceleyelim.

Ben burada  Composer ile değil de direkt olarak  PHPMailer’ın kaynak kodunu indirip projeme dahil ediyorum. Zipten çıkarmış olduğum PHPMailer-6.1.8 isimli klasörümün adını basit olması açısından PHPMailer olarak değiştirip kullanacağım. Kütüphaneleri projemin başına dahil ettim. Dilerseniz yazının sonundaki örnek proje dosyasını indirebilirsiniz.

require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';

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

 

Son durum aşağıdaki gibi olmalıdır. İlgili class’a ait kullanım örneklerin açıklamalarını yorum satırı olarak belirttim. Kullanmadığınız kısımları kaldırabilir ya da  true  değerinden  false  değerine çevirebilirsiniz.

<?php
// PHPMailer sınıflarını global namespace alanına içe aktarın
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;


$mail = new PHPMailer(true);
// Eğer bir hata ile karşılaşırsak yakalamak için
// Kodlarımızı try catch blogunda yazıyoruz.
try {
    //Sunucu ayarları
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;           // Hata ayıklamak için debug etkin
    $mail->isSMTP();                                 // SMTP kullanarak gönderim
    $mail->Host       = 'smtp1.ornek.com';           // SMTP sunucusu
    $mail->SMTPAuth   = true;                        // SMTP kimlik doğrulaması etkin
    $mail->Username   = '[email protected]';       // SMTP kullanıcısı
    $mail->Password   = 'smtp şifre';                     // SMTP şifre
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;   // TLS ile şifreleme etkin
    $mail->Port       = 587;                              // SMTP port
    
    //Karakter ayarları
    $mail->CharSet  ="utf-8";         //Türkçe karakter sorununun önüne geçecektir.
    $mail->Encoding="base64";
    
    // Alıcılar
    $mail->setFrom('[email protected]', 'Mailer');
    $mail->addAddress('[email protected]', 'Ahmet');     // Alıcı
    $mail->addAddress('[email protected]');             // Ad kısmı opsiyoneldir.
    $mail->addReplyTo('[email protected]', 'Bilgi');
    $mail->addCC('[email protected]');
    $mail->addBCC('[email protected]');
    // Ekler
    $mail->addAttachment('/var/tmp/file.tar.gz');         // Ek kısmı
    $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Ek ismi opsiyoneldir.
    // İçerik
    $mail->isHTML(true);                                  // Mail HTML formatında olacaktır.
    $mail->Subject = 'Mailin Konusu';
    $mail->Body    = 'Burası mesajın gövdesidir. <b>burası bold!</b>';
    $mail->AltBody = 'non-HTML mail istemcileri için mesaj gövdesidir.';
    $mail->send();
    echo 'Mesajınız gönderildi';
} catch (Exception $e) {
    echo "Mesajınız gönderilemedi. Mailer Hata: {$mail->ErrorInfo}";
}
?>

 

 

PHPMailer varsayılan olarak İngilizce’dir ancak karşılaşabileceğiniz PHPMailer hata mesajlarının birçok çevirisini language klasöründe bulabilirsiniz. Örneğin Türkçe dilini belirtmek için, PHPMailer’a aşağıdaki şekilde söylemeniz gerekir:

$mail->setLanguage('tr', 'PHPMailer/language/phpmailer.lang-tr.php');

 

Test:

phpMailer.php’yi çalıştırdığımda  $mail->SMTPDebug = SMTP::DEBUG_SERVER;  aktif olduğundan dolayı mail gönderimin başarılı olup olmadığını ve gönderim aşamalarını aşağıdaki gibi göreceksiniz. Dilerseniz bu satırı kod bloğundan kaldırıp debug’ı kapatabilirsiniz. Unutmayın ki test sırasında debug açılması sizin için faydalı olacaktır.

2020-11-13 19:57:24 SERVER -> CLIENT: 220-srvc70.turhost.com ESMTP Exim 4.93 #2 Fri, 13 Nov 2020 22:56:44 +0300 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail.
2020-11-13 19:57:24 CLIENT -> SERVER: EHLO localhost
2020-11-13 19:57:24 SERVER -> CLIENT: 250-turhost.com Hello localhost []250-SIZE 52428800250-8BITMIME250-PIPELINING250-AUTH PLAIN LOGIN250-STARTTLS250 HELP
2020-11-13 19:57:24 CLIENT -> SERVER: STARTTLS
2020-11-13 19:57:24 SERVER -> CLIENT: 220 TLS go ahead
2020-11-13 19:57:24 CLIENT -> SERVER: EHLO localhost
2020-11-13 19:57:24 SERVER -> CLIENT: 250-.turhost.com Hello localhost []250-SIZE 52428800250-8BITMIME250-PIPELINING250-AUTH PLAIN LOGIN250 HELP
2020-11-13 19:57:24 CLIENT -> SERVER: AUTH LOGIN
2020-11-13 19:57:24 SERVER -> CLIENT: 334 VXNlcm5hbWU6
2020-11-13 19:57:24 CLIENT -> SERVER: [credentials hidden]
2020-11-13 19:57:24 SERVER -> CLIENT: 334 UGFzc3dvcmQ6
2020-11-13 19:57:24 CLIENT -> SERVER: [credentials hidden]
2020-11-13 19:57:24 SERVER -> CLIENT: 235 Authentication succeeded
2020-11-13 19:57:24 CLIENT -> SERVER: MAIL FROM:<[email protected]>
2020-11-13 19:57:24 SERVER -> CLIENT: 250 OK
2020-11-13 19:57:24 CLIENT -> SERVER: RCPT TO:<[email protected]>
2020-11-13 19:57:24 SERVER -> CLIENT: 250 Accepted
2020-11-13 19:57:24 CLIENT -> SERVER: DATA
2020-11-13 19:57:24 SERVER -> CLIENT: 354 Enter message, ending with "." on a line by itself
2020-11-13 19:57:24 CLIENT -> SERVER: Date: Fri, 13 Nov 2020 19:57:24 +0000
2020-11-13 19:57:24 CLIENT -> SERVER: To: Serdar KURT <[email protected]>
2020-11-13 19:57:24 CLIENT -> SERVER: From: Mailer <[email protected]>
2020-11-13 19:57:24 CLIENT -> SERVER: Reply-To: Reply To <[email protected]>
2020-11-13 19:57:24 CLIENT -> SERVER: Subject: Mailin Konusu
2020-11-13 19:57:24 CLIENT -> SERVER: Message-ID: <[email protected]>
2020-11-13 19:57:24 CLIENT -> SERVER: X-Mailer: PHPMailer 6.1.8 (https://github.com/PHPMailer/PHPMailer)
2020-11-13 19:57:24 CLIENT -> SERVER: MIME-Version: 1.0
2020-11-13 19:57:24 CLIENT -> SERVER: Content-Type: multipart/alternative;
2020-11-13 19:57:24 CLIENT -> SERVER: boundary="b1_yCjgKC8bBIIt85ezgYNFzvkSXCDXa0fNEPYMcLr5sjY"
2020-11-13 19:57:24 CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
2020-11-13 19:57:24 CLIENT -> SERVER:
2020-11-13 19:57:24 CLIENT -> SERVER: This is a multi-part message in MIME format.
2020-11-13 19:57:24 CLIENT -> SERVER:
2020-11-13 19:57:24 CLIENT -> SERVER: --b1_yCjgKC8bBIIt85ezgYNFzvkSXCDXa0fNEPYMcLr5sjY
2020-11-13 19:57:24 CLIENT -> SERVER: Content-Type: text/plain; charset=utf-8
2020-11-13 19:57:24 CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
2020-11-13 19:57:24 CLIENT -> SERVER:
2020-11-13 19:57:24 CLIENT -> SERVER: non-HTML mail istemcileri için mesaj gövdesidir.
2020-11-13 19:57:24 CLIENT -> SERVER:
2020-11-13 19:57:24 CLIENT -> SERVER: --b1_yCjgKC8bBIIt85ezgYNFzvkSXCDXa0fNEPYMcLr5sjY
2020-11-13 19:57:24 CLIENT -> SERVER: Content-Type: text/html; charset=utf-8
2020-11-13 19:57:24 CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
2020-11-13 19:57:24 CLIENT -> SERVER:
2020-11-13 19:57:24 CLIENT -> SERVER: Burası mesajın gövdesidir. <b>burası bold!</b>
2020-11-13 19:57:24 CLIENT -> SERVER:
2020-11-13 19:57:24 CLIENT -> SERVER:
2020-11-13 19:57:24 CLIENT -> SERVER: --b1_yCjgKC8bBIIt85ezgYNFzvkSXCDXa0fNEPYMcLr5sjY--
2020-11-13 19:57:24 CLIENT -> SERVER:
2020-11-13 19:57:24 CLIENT -> SERVER: .
2020-11-13 19:57:25 SERVER -> CLIENT: 250 OK id=1kdfBc-000SFR-P9
2020-11-13 19:57:25 CLIENT -> SERVER: QUIT
2020-11-13 19:57:25 SERVER -> CLIENT: 221 turhost.com closing connection
Mesajınız gönderildi

 

PHPMailer ile göndermiş olduğum test maili, posta kutuma başarılı bir şekilde gelmiş bulunmaktadır:

PHPMailer Test

PHPMailer Test

 

Örnek Proje Dosyası

Örnek Gmail SMTP Entegrasyonu

 


Abone ol
Bildir
guest
0 Yorum
Satır İçi Geri Bildirimler
Tüm yorumları görüntüle