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
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.