PHP ile Mail Nasıl Gönderilir? PHPMailer Kullanımı
PHPMailer günümüzde PHP de yer alan “mail()” fonksiyonu yerine tercih ediliyor. Mail() fonksiyonu birçok sunucuda Hosting firmaları tarafından devre dışı bırakılmakta. Bu nedenle ve avantajlarından ötürü SMTP sınıfı tercih edilmektedir. Başta WordPress olmak üzere birçok CMS sisteminde PHPMailer kullanılmakta.
Bu yazıda HTML formu üzerinden alacağımız veriler ile mail gönderimi yapacağız. Tüm dosyaları makalenin sonunda paylaşacağım. HTML formumuzu oluşturarak başlayalım.
<form action="gonder.php" method="post"> <label for="sunucu">Mail Sunucu Adresi</label><br> <input type="text" name="sunucu" required/> <label for="port">Port</label><br> <input type="number" name="port" required/> <label for="protokol">Protokol (SSL/TLS) </label><br> <input type="text" name="protokol" required/> <label for="kullanici_adi">Kullanıcı Adı</label><br> <input type="email" name="kullanici_adi" required/> <label for="pass">Şifre</label><br> <input type="password" name="pass" required /> <label for="isim">Gönderici Adı</label><br> <input type="text" name="isim" required /> <label for="Başlık">Şifre</label><br> <input type="text" name="baslik" required/> <textarea name="icerik" cols="30" rows="10" required></textarea> <input type="submit"> </form>
Formumuzu oluşturduk. Sunucu adresi, port numarası, protokol türü, e-posta kullanıcı adı / şifresini ve mail içeriğiyle ilgili bilgileri formumuza girip “gonder.php” dosyamıza “post” metodu ile göndereceğiz. Şimdi “gonder.php” dosyamızı oluşturalım.
<?php require_once 'src/Exception.php'; require_once 'src/PHPMailer.php'; require_once 'src/SMTP.php'; // Mail sınıfımızın kaynak dosyalarını dahil ettik. Konu altında hepsini paylaşacağım. if ($_POST) { // post işlemi varsa mail gönderimine devam ediyoruz. $sunucu = strip_tags($_POST['sunucu']); //strip_tags ile html etiketlerini veriden silerek güvenliğimizi arttırıyoruz.Kullanıclardan gelen veriler veritabanı işlemlerinde sorun yaratmaması için kullanılan yöntemlerden biridir. $port = strip_tags($_POST['port']); $protokol = strip_tags($_POST['protokol']); $kullanici_adi = strip_tags($_POST['kullanici_adi']); $pass = strip_tags($_POST['pass']); $isim = strip_tags($_POST['isim']); $baslik = strip_tags($_POST['baslik']); $icerik = $_POST['icerik']; // Burada mail içeriğinde HTML kullanabilmek için herhangi bir filtre uygulamıyoruz. Ancak veritabanına kayıt yapacaksanız htmlspecialchars() fonksiyonunu kullanabilirsiniz. // Mailer sınıfı oluşturuyoruz. $mail = new PHPMailer(true); try { //Server settings $mail->CharSet = 'UTF-8'; $mail->SMTPDebug = 0; $mail->isSMTP(); $mail->Host = $sunucu; $mail->SMTPAuth = true; $mail->Username = $kullanici_adi; $mail->Password = $pass; $mail->SMTPSecure = $protokol; $mail->Port = $port; $mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) ); //Gönderici ayarları $mail->setfrom($kullanici_adi, $isim); $mail->isHTML(true); //HTML içerikler kullanabilmek için. $mail->Subject = $baslik; $mail->Body = $icerik; $mail->AddAdress = $alici; $mail->send(); // Gönderiliyor... echo "Mail başarıyla gönderildi."; } catch (Exception $e) { // Hata varmı? echo 'E-Postalar gönderilemedi. Hata: ', $mail->ErrorInfo; } } ?>
Gönder butonuna bastıktan sonra “Mail başarıyla gönderildi.” ibaresini gördüyseniz başardınız demektir 🙂 . İşlem başarısız ise, hata mesajı karşınıza çıkacaktır.
Kaynak dosyalarını indirmek için tıklayınız.
PHP ile ilgili diğer yazılar için tıklayınız.
Kodların ham hali;
<form action=”gonder.php” method=”post”>
<label for=”sunucu”>Mail Sunucu Adresi</label><br>
<input type=”text” name=”sunucu” required/>
<label for=”port”>Port</label><br>
<input type=”number” name=”port” required/>
<label for=”protokol”>Protokol (SSL/TLS) </label><br>
<input type=”text” name=”protokol” required/>
<label for=”kullanici_adi”>Kullanıcı Adı</label><br>
<input type=”email” name=”kullanici_adi” required/>
<label for=”pass”>Şifre</label><br>
<input type=”password” name=”pass” required />
<label for=”isim”>Gönderici Adı</label><br>
<input type=”text” name=”isim” required />
<label for=”Başlık”>Şifre</label><br>
<input type=”text” name=”baslik” required/>
<textarea name=”icerik” cols=”30″ rows=”10″ required></textarea>
<input type=”submit”>
</form>
<?php
require_once ‘src/Exception.php’;
require_once ‘src/PHPMailer.php’;
require_once ‘src/SMTP.php’;
// Mail sınıfımızın kaynak dosyalarını dahil ettik. Konu altında hepsini paylaşacağım.
if ($_POST) { // post işlemi varsa mail gönderimine devam ediyoruz.
$sunucu = strip_tags($_POST[‘sunucu’]); //strip_tags ile html etiketlerini veriden silerek güvenliğimizi arttırıyoruz.Kullanıclardan gelen veriler veritabanı işlemlerinde sorun yaratmaması için kullanılan yöntemlerden biridir.
$port = strip_tags($_POST[‘port’]);
$protokol = strip_tags($_POST[‘protokol’]);
$kullanici_adi = strip_tags($_POST[‘kullanici_adi’]);
$pass = strip_tags($_POST[‘pass’]);
$isim = strip_tags($_POST[‘isim’]);
$baslik = strip_tags($_POST[‘baslik’]);
$icerik = $_POST[‘icerik’]; // Burada mail içeriğinde HTML kullanabilmek için herhangi bir filtre uygulamıyoruz. Veritabanına kayıt yapacaksanız htmlspecialchars() fonksiyonunu kullanabilirsiniz.
// Mailer sınıfı oluşturuyoruz.
$mail = new PHPMailer(true);
try {
//Server settings
$mail->CharSet = ‘UTF-8’;
$mail->SMTPDebug = 0;
$mail->isSMTP();
$mail->Host = $sunucu;
$mail->SMTPAuth = true;
$mail->Username = $kullanici_adi;
$mail->Password = $pass;
$mail->SMTPSecure = $protokol;
$mail->Port = $port;
$mail->SMTPOptions = array(
‘ssl’ => array(
‘verify_peer’ => false,
‘verify_peer_name’ => false,
‘allow_self_signed’ => true
)
);
//Gönderici ayarları
$mail->setfrom($kullanici_adi, $isim);
$mail->isHTML(true); //HTML içerikler kullanabilmek için.
$mail->Subject = $baslik;
$mail->Body = $icerik;
$mail->AddAdress = $alici;
$mail->send(); // Gönderiliyor…
echo “Mail başarıyla gönderildi.”;
} catch (Exception $e) { // Hata varmı?
echo ‘E-Postalar gönderilemedi. Hata: ‘, $mail->ErrorInfo;
}
}
?>