CodeIgniter Kullanarak E-posta Nasıl Gönderilir

E-posta web uygulamalarında çok önemlidir. Bir kullanıcı kaydolduğunda, e-posta adresini doğrulamak ve kullanıcının aboneliği onaylamasına izin vermek için onlara bir e-posta göndermek isteyebiliriz. Ayrıca unutulan şifreleri sıfırlamak, müşterilere fatura ve makbuz göndermek vb. için e-postayı kullanırız. CodeIgniter, çeşitli seçenekler kullanarak uygulamamızdan e-posta göndermemizi çok kolaylaştırır.

CodeIgniter'ın e-posta gönderirken kullanabileceğimiz dahili bir e-posta kütüphanesi var.

CodeIgniter E-posta Yapılandırması

E-posta ayarlarını yönetebileceğimiz merkezi bir yere ihtiyacımız var. CodeIgniter e-postalar için bir yapılandırma dosyasıyla gelmiyor, bu yüzden kendimiz bir tane oluşturmamız gerekecek.

application/config dizininde email.php adlı bir dosya oluşturun

Aşağıdaki kodu email.php'ye ekleyin

<?php defined('BASEPATH') OR exit('No direct script access allowed');

$config = array(
    'protocol' => 'smtp', // 'mail', 'sendmail', or 'smtp'
    'smtp_host' => 'smtp.example.com', 
    'smtp_port' => 465,
    'smtp_user' => 'no-reply@example.com',
    'smtp_pass' => '12345!',
    'smtp_crypto' => 'ssl', //can be 'ssl' or 'tls' for example
    'mailtype' => 'text', //plaintext 'text' mails or 'html'
    'smtp_timeout' => '4', //in seconds
    'charset' => 'iso-8859-1',
    'wordwrap' => TRUE
);

İŞTE,

  • 'protokol' => 'smtp', e-posta gönderirken kullanmak istediğiniz protokolü belirtir. Bu, Gmail smtp ayarları veya ana makinenizin smtp ayarları olabilir
  • 'smtp_host' => 'smtp.example.com', smtp ana bilgisayarını belirtir. Örneğin, Gmail kullanmak istiyorsanız smtp.gmail.com gibi bir şeye sahip olursunuz
  • 'smtp_port' => 465, smtp postası için yapılandırılmış belirtilen smtp ana bilgisayarında açık bir port
  • 'smtp_user' => 'no-reply@example.com', e-posta gönderirken gönderici olarak kullanılacak e-posta adresi. Bu, sunucuda bulunan geçerli bir e-posta adresi olmalıdır
  • 'smtp_pass' => '12345!', belirtilen smtp kullanıcı e-postasının şifresi
  • 'smtp_crypto' => 'ssl', kullanılacak şifreleme yöntemini belirtir; yani ssl, tls vb.
  • 'email type' => 'text', kullanılacak mail türünü ayarlar. Bu, ihtiyaçlarınıza bağlı olarak düz metin veya HTML olabilir.
  • 'smtp_timeout' => '4', ana bilgisayara bağlanmaya çalışırken zaman aşımı istisnası atılmadan önce geçmesi gereken süreyi saniye cinsinden belirtir.
  • 'charset' => 'iso-8859-1', e-posta gönderirken kullanılacak karakter setini tanımlar.
  • 'wordwrap' => DOĞRU, DOĞRU olarak ayarlanır ve ardından sözcük kaydırma etkinleştirilir. YANLIŞ olarak ayarlanırsa sözcük kaydırma etkinleştirilmez

not: E-postaların işe yaraması için geçerli yapılandırma parametreleri sağlamalısınız. Sahte parametreler e-posta gönderemez.

CodeIgniter E-posta Görünümü

Bu bölümde e-postayı alıcıya gönderecek görünümü oluşturacağız.

Uygulama/görünümlerde yeni bir dizin e-postası oluşturun

Yeni bir dosya oluşturun contact.php application/views/email

Aşağıdaki kodu application/views/email/contact.php dosyasına ekleyin

<!DOCTYPE html>
<html>
    <head>
        <title>CodeIgniter Send Email</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div>
            <h3>Use the form below to send email</h3>
            <form method="post" action="<?=base_url('email')?>" enctype="multipart/form-data">
                <input type="email" id="to" name="to" placeholder="Receiver Email">
                <br><br>
                <input type="text" id="subject" name="subject" placeholder="Subject">
                <br><br>
                <textarea rows="6" id="message" name="message" placeholder="Type your message here"></textarea>
                <br><br>
                <input type="submit" value="Send Email" />
            </form>
        </div>
    </body>
</html>

İŞTE,

  • E-postayı, konuyu ve mesajı kabul eden ve ardından parametreleri e-posta yoluna geçiren basit bir HTML formumuz var.

CodeIgniter E-posta Denetleyicisi

Şimdi e-posta göndermeyi yönetecek denetleyiciyi oluşturalım

application/controllers/EmailController.php dosyasında yeni bir EmailController.php dosyası oluşturun

Aşağıdaki kodu EmailController.php'ye ekleyin

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class EmailController extends CI_Controller {

    public function __construct() {
        parent:: __construct();

        $this->load->helper('url');
    }

    public function index() {
        $this->load->view('email/contact');
    }

    function send() {
        $this->load->config('email');
        $this->load->library('email');
        
        $from = $this->config->item('smtp_user');
        $to = $this->input->post('to');
        $subject = $this->input->post('subject');
        $message = $this->input->post('message');

        $this->email->set_newline("\r\n");
        $this->email->from($from);
        $this->email->to($to);
        $this->email->subject($subject);
        $this->email->message($message);

        if ($this->email->send()) {
            echo 'Your Email has successfully been sent.';
        } else {
            show_error($this->email->print_debugger());
        }
    }
}

İŞTE,

  • class EmailController extends CI_Controller {…} ana CodeIgniter denetleyicisini genişleten e-posta denetleyicimizi tanımlar.
  • public function __construct() {…} ana yapıcı yöntemini çağıran alt yapıcıyı tanımlar.
  • public function index() {…} iletişim formunu görüntüleyen indeks yöntemini tanımlar
  • send() fonksiyonu {…} e-postayı gönderen yöntemi tanımlar
    • $this->load->config('email'); e-posta yapılandırma ayarlarını yükler
    • $this->load->library('email'); e-posta kitaplığını yükler
    • $from = $this->config->item('smtp_user'); tanımladığımız e-posta yapılandırma dosyasından gönderici kimliğini alır.
    • $to = $this->input->post('to'); gönderilen formdan to değerini alır
    • $subject = $this->input->post('subject'); formdan e-posta konusunu ayarlar
    • $message = $this->input->post('message'); formdan e-posta mesajını ayarlar
    • $this->email->set_newline(“\r\n”); e-postalar için yeni satır karakterlerini tanımlar
    • $this->email->from($from); gönderenin e-posta adresini ayarlar
    • $this->email->to($to); alıcının e-posta adresini ayarlar
    • $this->email->subject($subject); e-posta konusunu ayarlar
    • $this->email->message($message); e-posta mesajını ayarlar
    • if ($this->email->send()) {…} e-postayı göndermeye çalışır. Eğer e-posta başarıyla gönderilirse, o zaman Your Email has successfully been sent else debug information mesajı neyin yanlış gittiğine dair yazdırılır.

Şimdi e-posta rotalarını tanımlayalım

E-posta Rotaları

Aşağıdaki rotaları application/config/routes.php'ye ekleyin

$route['send-email'] = 'EmailController';
$route['email'] = 'EmailController/send';

Artık iletişim formunu web tarayıcısına yükleyebiliriz

Yerleşik PHP sunucusunu başlatalım

Terminali/komut satırını açın ve uygulamanızın köküne göz atın. Benim durumumda kök C:\Sites\ci-app sürücüsünde bulunuyor

cd C:\Sites\ci-app

Aşağıdaki komutu kullanarak sunucuyu başlatın

php -S localhost:3000

Aşağıdaki URL'yi web tarayıcınıza yükleyin: http://localhost:3000/send-email

Aşağıdaki formu görebilmelisiniz

E-posta Rotaları

Alıcı e-postasını, konuyu ve e-posta mesajını girin ve ardından E-posta Gönder'e tıklayın. E-posta yapılandırmalarınız düzgün bir şekilde ayarlanmışsa, başarılı mesajı görebilmeniz gerekir.

ÖZET

Dahili e-posta kütüphanesi, minimum kodla e-posta göndermemizi kolaylaştırır. Kütüphane ayrıca gereksinimlerinizi karşılayacak şekilde yapılandırabilmeniz anlamında oldukça esnektir.