1. Ana Sayfa
  2. PHP

PHP’de mail() kullanarak Sendmail, Phpmailer ile SMTP

PHP’de mail() kullanarak Sendmail, Phpmailer ile SMTP
+ - 0

PHP’de Sendmail sadece tek satır kod ile mümkündür. PHP, posta göndermek için yerleşik posta işlevleri içerir.

Bu PHP özelliğiyle kucaklanmış hissetmemin nedenleri var. Çünkü düzenli olarak mail göndermek için çok fazla kod yazıyorum. PHP, yerleşikleri ile gerçekten zaman kazandırır.

<?php mail('recipient@domain.com', 'Mail Subject', 'Mail test content'); ?>
Code language: HTML, XML (xml)

PHP’de sendmail’e nasıl kod ekleneceğini göreceğiz. Özellikleri daha fazla destekle zenginleştirmek için bu konuda birkaç örnek göreceğiz.

Aşağıda göreceğimiz aşağıdaki liste örnekleri. PHP’de sendmail için temelden tam teşekküllü desteği kapsayacaktır.

  1. PHP mail() ile basit metin postası.
  2. Zengin metin içeriğini posta yoluyla gönderin .
  3. PHP’de ekleri olan Sendmail.
  4. SMTP ile PHPMailer kullanarak Sendmail.

PHP mail()

PHP mail(), bir uygulamadan posta göndermek içindir. mail() fonksiyonunun çalışması için gerekli PHP konfigürasyonlarını görelim. Ayrıca, bu PHP fonksiyonunun ortak sözdizimini ve parametrelerini aşağıda göreceğiz.

mail( string $recipient_email, string $subject, string $message, array|string $headers = [], string $additional_params = "" )
Code language: PHP (php)

parametreler

$recipient_email Hedef posta adresleri olan
bir veya daha fazla virgülle ayrılmış değer . Değerlerin örnek formatı,

  • ad@etkialanı.com
  • Ad <ad@domain.com>
  • ad@alan.com, ad2.alan.com
  • Ad <ad@domain.com>, Ad2 <ad2@domain.com>

$konu
Posta konusu. RFC 2047’yi karşılamalıdır .

$message
Posta içeriği gövdesi. Çok satırlı bir metni iletmek için \r\n kullanır. Bir satır için 70 karakter sınırı vardır. Ekstra başlıktaki spesifikasyona bağlı olarak çeşitli içerik türlerini kabul eder.

$headers
Bu, posta başlığına eklenen fazladan bir dize veya dizidir. İçerik türü, karakter kümesi ve daha fazlası gibi belirtim dizisini iletmek için kullanın. İsteğe bağlı bir parametredir. Birden çok üstbilgi eklemek için \r\n kullanır . Başlık dizisi, sırasıyla başlık adını ve belirtimi belirtmek için anahtar/değer çifti içerir.

$additional_params
Bu da isteğe bağlıdır. Komut satırı seçeneği ile zarf gönderen adresi gibi ekstra bayraklar iletmek içindir.

Dönüş Değerleri

Bu işlev , postanın gönderilen durumuna göre boolean true veya false döndürür. Boole değerini doğru almak , postanın başarıyla gönderildiği anlamına gelmez. Bunun yerine, yalnızca posta gönderme isteğinin sunucuya gönderildiğini temsil eder.

PHP sendmail – konfigürasyonlar

Posta betiğinin ortamınızda çalışması için bazı yönergeleri yapılandırmamız gerekiyor.

php.ini dosyanızı bulun ve posta işlevi özniteliklerini ayarlayın. Aşağıdaki resim, posta işlevinin PHP yapılandırmasını göstermektedir.

php yapılandırmasında sendmail

Bu php.ini bölümü ile posta sunucusu yapılandırmasını ve sendmail yolunu ayarlayın. Ardından web sunucusunu yeniden başlatın ve ayarların phpinfo() aracılığıyla etkinleştirildiğinden emin olun .

PHP’de Sendmail’e Örnekler

Düz metin içeriği göndermek için PHP’de Sendmail

Bu, PHP Script aracılığıyla düz metin içeriği göndermenin kısa bir örneğidir. PHP’de posta konusunu, mesajı ve alıcı e-posta parametresini sendmail olarak ayarlar.

Bu program, mail() işlevi tarafından döndürülen boole dayalı yanıt metnini yazdırır.

sendmail-with-plain-text.php

<?php $to = 'recipient@email.com'; $subject = 'Mail sent from sendmail PHP script'; $message = 'Text content from sendmail code.'; // Sendmail in PHP using mail() if (mail($to, $subject, $message,)) { echo 'Mail sent successfully.'; } else { echo 'Unable to send mail. Please try again.'; } ?>
Code language: HTML, XML (xml)

HTML içeriği göndermek için PHP Sendmail kodu

Yukarıdaki örnekte olduğu gibi, bu program da e-posta göndermek için PHP mail() işlevini kullanır. HTML içeriğini posta işlevine iletir.

HTML içeriği göndermek için, posta başlığı ile içerik türünü ve diğer başlık değerlerini ayarlar.

php-mail-with-html-content.php

<?php $to = 'recipient@email.com'; $subject = 'Mail sent from sendmail PHP script'; $from = 'test@testmail.com'; $headers = "From: $from"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; $message = '<p><strong>Sendmail in PHP with HTML content. </strong></p>'; if (mail($to, $subject, $message, $headers)) { echo 'Mail sent successfully.'; } else { echo 'Unable to send mail. Please try again.'; } ?>
Code language: HTML, XML (xml)

Dosyaları eklemek için PHP’de Sendmail

Bu program, e-posta içeriğine sahip bir metin dosyası ekler. PHP file_get_contents() kullanarak bir kaynak dosyayı okur . Dosya içeriğini kodlar ve bir dosya eklemek için bir posta başlığı hazırlar.

İçerik türünü ayarlar, çalışmasını sağlamak için mesaj gövdesiyle kodlar. Bu komut dosyası, PHP’de sendmail yürütülürken isteğe bağlı  $header değişkenini kullanır.

sendmail-with-attachment.php

<?php $file = "example.txt"; $to = 'recipient@email.com'; $subject = 'Mail sent from sendmail PHP script'; $content = file_get_contents($file); $encodedContent = chunk_split(base64_encode($content)); $divider = md5(time()); $headers = "From: TestSupport <example@email.com>\r\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"" . $divider . "\"\r\n"; $headers .= "Content-Transfer-Encoding: 7bit\r\n"; // prepare mail body with attachment $message = "--" . $divider. "\r\n"; $message .= "Content-Type: application/octet-stream; name=\"" . $file . "\"\r\n"; $message .= "Content-Transfer-Encoding: base64\r\n"; $message .= "Content-Disposition: attachment\r\n"; $message .= $encodedContent. "\r\n"; $message .= "--" . $divider . "--"; //sendmail with attachment if (mail($to, $subject, $message, $headers)) { echo 'Mail sent successfully.'; } else { echo 'Unable to send mail. Please try again.'; } ?>
Code language: HTML, XML (xml)
dosya eklemek için php'de sendmail

Form gönderiminde Sendmail

Statik değerler yerine, kullanıcı tarafından girilen değerleri PHP sendmail’e de iletebiliriz. Bir HTML formu, posta göndermek için kullanıcıdan değerleri alabilir. Form aracılığıyla bir iletişim e-postasının nasıl gönderileceğini zaten gördük .

Bu örnek, kullanıcıdan gelen ad, e-posta ve iletiyi toplayan bir formu gösterir. Gönderme eyleminde form verilerini PHP’ye gönderir.

PHP form verilerini okur ve bunları posta gönderme isteği parametrelerini hazırlamak için kullanır. Başlığı ‘from’ e-postasıyla hazırlar. Kullanıcı tarafından girilen mesaj ile posta gövdesini ayarlar.

Tüm form alanları zorunludur ve doğrulama , tarayıcının varsayılan özelliği tarafından yapılır.

sendmail-on-form-submit.php

<?php if (isset($_POST["submit_btn"])) { $to = "recipient@email.com"; $subject = 'Mail sent from sendmail PHP script'; $from = $_POST["email"]; $message = $_POST["msg"]; $headers = "From: $from"; // Sendmail in PHP using mail() if (mail($to, $subject, $message, $headers)) { $responseText = 'Mail sent successfully.'; } else { $responseText = 'Unable to send mail. Please try again.'; } } ?> <html> <head> <style> body { font-family: Arial; width: 550px; } .response-ribbon { padding: 10px; background: #ccc; border: #bcbcbc 1px solid; margin-bottom: 15px; border-radius: 3px; } input, textarea { padding: 8px; border: 1px solid #ccc; border-radius: 5px; } #Submit-btn { background: #1363cc; color: #FFF; width: 150px; } #email-form { border: 1px solid #ccc; padding: 20px; } .response-ribbon { } </style> </head> <body> <?php if(!empty($responseText)) { ?> <div class="response-ribbon"><?php echo $responseText; ?></div> <?php } ?> <form id="email-form" name="email-form" method="post" action=""> <table width="100%" border="0" align="center" cellpadding="4" cellspacing="1"> <tr> <td> <div class="label">Name:</div> <div class="field"> <input name="name" type="text" id="name" required> </div> </td> </tr> <tr> <td><div class="label">E-mail:</div> <div class="field"> <input name="email" type="text" id="email" required> </div></td> </tr> <tr> <td><div class="label">Message:</div> <div class="field"> <textarea name="msg" cols="45" rows="5" id="msg" required></textarea> </div></td> </tr> <tr> <td> <div class="field"> <input name="submit_btn" type="submit" id="submit-btn" value="Send Mail"> </div> </td> </tr> </table> </form> </body> </html>
Code language: HTML, XML (xml)

SMTP aracılığıyla PHP sendmail

PHP mail() işlevinin bazı sınırlamaları vardır. PHP’de sendmail’in tam teşekküllü bir işlevselliğine sahip olmak için PHPmailer kitaplığını kullanmayı tercih ederim.

Bu kitaplık, gelişmiş postalama yardımcı programları sağlayan en iyilerden biridir. PHP’de SMTP aracılığıyla PHPMailer kullanarak posta göndermek için örnekler gördük . OAuth belirteci kullanarak sendmail kodunu arıyorsanız , bağlantılı makalenin bir örneği vardır.

Bu örnek, PHP’de SMTP aracılığıyla PHPMailer ile posta göndermek için minimal bir komut dosyası kullanır. Posta nesnesini oluşturmak ve ayarlamak için PHPMailer kitaplığını yükler.

Posta nesnesi, posta parametrelerini yapılandırmak için kullanılır. Ardından,  posta göndermek için PHPMailer sınıfının send()  yöntemini çağırır.

Github’dan PHPMailer’i indirin ve bu örnek dizinin satıcısına koyun. Bu posta komut dosyasının çalışması için aşağıdaki komut dosyasındaki SMTP yapılandırmalarını değiştirin.

sendmail-in-php-via-smtp.php

<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; require_once __DIR__ . '/vendor/phpmailer/phpmailer/src/Exception.php'; require_once __DIR__ . '/vendor/phpmailer/phpmailer/src/PHPMailer.php'; require_once __DIR__ . '/vendor/phpmailer/phpmailer/src/SMTP.php'; $mail = new PHPMailer(true); $mail->SMTPDebug = 0; $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = ""; $mail->Password = ""; $mail->SMTPSecure = "ssl"; $mail->Port = 465; $mail->From = "test@testmail.com"; $mail->FromName = "Full Name"; $mail->addAddress("recipient@email.com", "recipient name"); $mail->isHTML(true); $mail->Subject = "Mail sent from php send mail script."; $mail->Body = "<i>Text content from send mail.</i>"; $mail->AltBody = "This is the plain text version of the email content"; try { $mail->send(); echo "Message has been sent successfully"; } catch (Exception $e) { echo "Mailer Error: " . $mail->ErrorInfo; } ?>
Code language: HTML, XML (xml)

PHP’de sendmail ile ilgili işlev

PHP, sendmail’e alternatif posta işlevleri sağlar. Bunlar aşağıda listelenmiştir.

  • mb_send_mail() – mb_language() ayarı ile yapılandırılan dile göre kodlanmış posta gönderir.
  • imap_mail() – CC, BCC alıcılarının doğru işlenmesiyle PHP’de posta göndermeye izin verir.

Çözüm

Yukarıdaki posta gönderme örnekleri PHP’de sendmail için kod sağlar. Postada çeşitli içerik türleri, dosya ekleri göndermeyi destekler.

PHP’nin yerleşik mail() işlevindeki ayrıntılandırma, bu işlevin gücünü vurgular.

Bu makalenin PHP’de nasıl sendmail gönderileceği hakkında daha fazla bilgi edinmenize yardımcı olacağını umuyoruz.

Yorum Yap