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.
bu sayede bu klasöre adreslenmiş bir cmd ekranı açılıyor.
burada da code . yazıyorum ve enter diyorum. Böylece VSCODE uygulamasını açmış oluyorum.
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.
Ş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
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.
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?
- 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)
- An itibari ile dosyalarım burada https://mustafabukulmez.com/PHPMailerDeneme/ . Ancak sileceğim.
- 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.
Gördüğünüz gibi mail başarı ile geldi.
Yazıyı bitirirken birkaç özet bilgi vermek istiyorum.
- 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.
- SSL ile s-posta göndermek için SSL kurulu olması gerekiyor. Projenizi Subdomain’e kurduysanız hosting firmanızdan SSL kurulumu talep ediniz.
- PHPMailer, çok fazla güvenlik önlemi içerdiği için kullanımı şiddetle tavsiye edilir.
- 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. :)
Yorumlar (1)