İnternet siteleri üye olan ziyaretçilerinin çalışan e-posta adreslerini denetlemek için aktivasyon e-postası gönderirler. Böylece aktivasyon mesajındaki linki tıklayan ziyaretçi web sitesine geri döndüğünde site için yaşayan bir üye kaydının yapıldığı kabul edilir. Bu yazımda CodeIgniter ile e-posta göndermeye ve aktivasyon işleminin nasıl yapıldığına değineceğim.

Yazıda daha önce burada anlattığım auth.php isimli kütüphaneyi kullandığım için, önce o yazıyı okumanızı öneririm. E-posta yollayabilmek için önce içinde gerekli sabitlerin yer aldığı email.php isimli dosyamızı application/config dizini altına kayıt ediyoruz. Dosyamızın içeriği alttadır:

<?php if (!defined(‘BASEPATH’)) exit(‘No direct script access allowed’);$config[‘protocol’] = ‘smtp’;$config[‘smtp_host’] = ‘mail.siteminadresi.com’;$config[‘smtp_user’] = ‘[email protected]’;$config[‘smtp_pass’] = ‘mailimin_sifresi’;$config[‘charset’] = ‘utf8’;$config[‘wordwrap’] = TRUE;

Yukarıdaki email.php dosyamda yapılan ayarlara kısaca değinelim: “Protocol” değişkeni postanın gideceği protokolü göstermektedir. Apache sunucuda SMTP protokolü ile gönderildiğini kabul ediyoruz. “SMTP_HOST” değişkeni bu protokole ulaşmak için gerekli sunucu adresini gösterir. “SMTP_USER” ve “SMTP_PASS” şifresini bildiğiniz geçerli adresi ve şifresini gösterir. Bir çok sunucu istenmeyen postaların gönderilmesini önlemek için bu tür bir önlemi şart koşmaktadır. “CHARSET” göndereceğimiz metnin karakter setini işaret eder. “WORDWRAP” uzun metinlerin bağlanmasını istediğimizi gösterir.

Şimdi aplication/libraries dizini altında bulunan auth.php isimli dosyamızı açalım ve ziyaretçimizin kayıt olması durumunda çalışacak fonksiyonu yazalım:

function create_user($user = array(),) {$this->CI =& get_instance();// Insert account into the databaseif(!$this->CI->db->insert(‘users’,$user)) {return 1; // users tablosuna ekleyemedi hatası.} else {$user_id = $this->CI->db->insert_id();$user_ip = $this->CI->input->ip_address();$first_date = date(‘Y-m-d h:m:s’);$code = $this->random_string();$arr = array(“user_id”=> $user_id,’first_date’=> $first_date,”ip_no”=> $user_ip,”code”=>$code,);if(!$this->CI->db->insert(‘user_info’,$arr)) {return 2; // user_info tablosuna ekleyemedi hatası.} else {$subject = “Kullanıcı aktivasyon maili”;$message = “Sevgili “.$user[‘name’].”Üyeliğinizi başlatmak için lütfen aşağıdaki linki tıklayın:nn “.base_url().”user/activate/$user_id/$code”;if (!$this->send_mail($user[’email’],$subject,$message)) return 3;else return 3;}return 4; // Başarıldı.}}

Bu kod ile user_info tablosuna kayıt yapılması durumunda oluşturulan aktivasyon e-postası kullanıcının adresine gönderilmektedir. Bundan sonraki aşamamız controller dosyası içinde ziyaretçinin formu doldurmasının ardından çağrılan metodun yazılması olsun:

class User extends Controller {function User(){parent::Controller();}function index(){}function form(){$this->load->view(‘signupform_view’);}function create(){$this->load->helper(‘form’);$this->form_validation->set_rules(‘name’, ‘İsminiz’, ‘trim|required|min_length[5]|max_length[12]|xss_clean’);$this->form_validation->set_rules(‘password’, ‘Şifreniz’, ‘trim|required|matches[passconf]’);$this->form_validation->set_rules(‘passconf’, ‘Şifrenizin tekrarı’, ‘trim|required’);$this->form_validation->set_rules(’email’, ‘Şifrenizin tekrarı’, ‘trim|required|valid_email|xss_clean’);$this->form_validation->set_message(‘required’, ‘%s değerini girmelisiniz.’);$this->form_validation->set_error_delimiters(‘

‘, ‘

‘);if ($this->form_validation->run() == FALSE){$this->load->view(‘signupform_view’, $data);} else {$password = dohash($this->input->post(‘password’), ‘md5′);$email = $this->input->post(’email’);$name = $this->input->post(‘name’);$data[‘error’] = $this->auth->create_user(array(‘name’=>$name,’email’ => $email, ‘pass’ => $password));$this->load->view(‘signok_view’, $data);}}

Yukarıdaki dosya applicaiton/controllers dizini altında user.php ismi ile kayıtlıdır. user/form metodu ile form yüklendikten sonra ziyaretçi doldurup user/create metodunu çağırır. Kayıt yapıldığında auth kütüphanesindeki create_user fonksiyonu çalışır ve kullanıcı kayıt edildiyse aktivasyona mesajı gönderilir.

Aktivasyon mesajı alan kullanıcı, gelen link tıklayınca application/controllers dizini altındaki user.php dosyası içindeki user/activate metodunu çalıştırır. Bu metod ile gelen linkteki user_id ve code değişkenleri alınarak, veritabanındaki user_info tablosunda bulunan değerler ile karşılaştırılır.

function activate() {$this->load->model(‘User_model’);$user_id = $this->uri->segment(3);$code = $this->uri->segment(4);$data[‘title’]= “Activation E-postası Sonucu”;$rtn = $this->User_model->add_active($user_id,$code);if ($rtn) {$data[‘message’] = “Hesabınız aktive edildi.”;$this->load->view(‘main_view’, $data);} else {$data[‘message’] = “Hata! Hesabınızı aktive edemediniz. Lütfen linki tekrar kontrol ediniz!”;$this->load->view(‘error_view’, $data);}}

Yukarıda anlattığm kısımları ile basit bir aktivasyon maili işleminin nasıl yapıldığını ve CodeIgniter`da mail kullanımının nasıl olduğunu göstermeye çalıştım. Model dosyalarında yer alan veritabanı kayıtları, sorgularını ve View dosylarının içeriğini fazla kafa karıştırmaması için anlatmadım.