수업소개
이번 수업에서는 토픽을 추가 할 때 모든 회원에게 토픽이 추가 되었음을 알리는 이메일을 발송하는 방법을 알아본다. 이 과정에서 CodeIgniter의 이메일 라이브러리 클래스의 사용방법을 알아보고, 개발환경에서는 실제 사용자에게 이메일을 보내는 것이 아니라 지정된 개발자에게 이메일을 전송 할 수 있게 Email 라이브러리를 확장하는 방법을 알아본다.
이메일 발송
토픽을 작성하면 이메일을 모든 회원들에게 발송하는 로직을 만들어보자. CodeIgniter는 이메일을 전송할 수 있는 라이브러리를 제공한다. 이에 대한 자세한 사용법은 공식 메뉴얼을 참고한다. Email Class 바로기기
토픽을 작성했을 때 이메일을 발송하기 위해서는 이메일 로직이 동작할 적절한 포인트를 찾아야 한다. 글 작성 후에 이메일 발송 로직을 위치시키는 것이 바람직해보인다. 우선 모든 사용자를 가져오는 로직을 user_model에 추가한다.
/application/models/user_model.php
function gets(){ return $this->db->query("SELECT * FROM user")->result(); }
gets() 메소드를 실행해서 이메일 수신자의 리스트를 알아낸다. $this->load->library('email')을 통해서 이메일 라이브러리 클래스를 로드한다. 로드 후에는 $this->email을 통해서 이 클래스에 접근이 가능하다. 자세한 내용은 예제에 주석으로 표시했다. 코드를 참조한다.
if ($this->form_validation->run() == FALSE) { $this->load->view('add'); } else { $topic_id = $this->topic_model->add($this->input->post('title'), $this->input->post('description')); $this->load->model('user_model'); $users = $this->user_model->gets(); $this->load->library('email'); // 전송할 데이터가 html 문서임을 옵션으로 설정 $this->email->initialize(array('mailtype'=>'html')); $this->load->helper('url'); foreach($users as $user){ // 송신자의 이메일과 이름 정보 $this->email->from('master@ooo2.org', 'master'); // 이메이 제목 $this->email->subject('글을 발행 됐습니다.'); // 이메일 본문 $this->email->message('<a href="'.site_url().'index.php/topic/get/'.$topic_id.'">'.$this->input->post('title').'</a>'); // 이메일 수신자. $this->email->to($user->email); // 이메일 발송 $this->email->send(); } redirect('/topic/get/'.$topic_id); } $this->_footer(); }
개발용 이메일 설정 & 라이브러리 확장
CodeIgniter는 웹개발에 필요한 유용한 라이브러리들을 제공하고 있다. 그런데 라이브러리의 기본 동작 방법을 변경하고 싶다면 어떻게 해야 할까? 코어를 직접 변경할 수도 있겠지만, 이것은 추후 업그레이드시에 많은 문제를 유발한다. 공식적인 방법은 라이브러리 클래스를 상속하는 것이다.
코어 라이브러리를 상속하기 위해서는 몇가지 규칙을 이해해야 한다. Email Class를 확장하고 싶다면 /application/libraries/ 디렉토리에 MY_Email.php 라는 이름의 파일을 만든다. MY_ 는 규칙사항이다. CI는 Email 클래스를 실행할 때 MY_Email.php 파일이 존재하는지 확인한다. MY_Email 파일에는 MY_Email 클래스를 만들고 CI_Email 클래스를 상속해야 한다.
다음 예제는 /application/config/config.php 에 dev_receive_email 설정이 존재한다면 이 값으로 모든 이메일을 전송하는 방법이다. 이메일은 한번 발송되면 주어담을 수 없는 커뮤니케이션 도구이기 때문에 개발 시에 상당히 까다로운 시스템이다. 개발환경에서는 무조건 특정 이메일로 전송되게 한다면 보다 안심하고 개발 할 수 있을 것이다.
/application/libraries/MY_Email.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class MY_Email extends CI_Email { public function to($to) { $this->ci = &get_instance(); $_to = $this->ci->config->item('dev_receive_email'); $to = $_to ? $_to : $to; return parent::to($to); } }
태그
- 태그명 : email2
- 태그주소 : https://github.com/egoing/codeigniter_codeingeverbody/tree/email2