電子メールで送信する

ポイント
confirmとsendとの受け渡しにsessionを使っています。

Filename: config/autoload.php に追加

$autoload['libraries'] = array('form_validation', 'session');

Filename: controller/sendmail.phpを変更

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

class Sendmail extends CI_Controller {

        public function _set_validation() {
                $vconfig = array(
                        array(
                                'field' => 'name',
                                'label' => 'お名前',
                                'rules' => 'trim|required|max_length[20]|xss_clean'
                        ),
                        array(
                                'field' => 'mail',
                                'label' => 'メール',
                                'rules' => 'trim|required|valid_email'
                        ),
                        array(
                                'field' => 'subject',
                                'label' => '題名',
                                'rules' => 'trim|required|max_length[40]|xss_clean'
                        ),
                        array(
                                'field' => 'body',
                                'label' => 'お取り合わせ',
                                'rules' => 'trim|required|xss_clean'
                        ),
                );
                $this->form_validation->set_rules($vconfig);
                $this->form_validation->set_error_delimiters('<div class="error">', '</div>');
        }

        public function index() {
                $data['title']='メールフォーム';
                $data['description']='メールフォームです。';
                $this->load->view('mailform',$data);
        }

        public function confirm() {
                self::_set_validation();
                if ($this->form_validation->run() == FALSE)
                {
                        self::index();
                }
                else
                {
                        $sdata['mail'] = array(
                                'name' => $this->input->post('name'),
                                'mail' => $this->input->post('mail'),
                                'subject' => $this->input->post('subject'),
                                'body' =>  $this->input->post('body')
                        );
                        $this->session->set_userdata($sdata);
                        $data['title']='メール確認';
                        $data['name'] = htmlentities(
                                $this->input->post('name'),ENT_COMPAT,"UTF-8"
                                );
                        $data['mail'] = $this->input->post('mail');
                        $data['subject'] = htmlentities(
                                $this->input->post('subject'),ENT_COMPAT,"UTF-8"
                                );
                        $data['body'] = nl2br(htmlentities(
                                $this->input->post('body'),ENT_COMPAT,"UTF-8"
                                ));
                        $this->load->view('confirm',$data);
                }
        }

        public function send() {
                $data['title']='お問い合わせ完了';
                if(self::_send()) {
                        $data['messages'] = 'お問い合わせを承りました。';
                } else {
                        $data['messages'] = '申し訳ございません。<br />電話にて 連絡をお願いいたします。';
                }
                $this->load->view('send',$data);
        }

        public function _send() {
                $sdata = $this->session->userdata('mail');
                if(empty($sdata['name'])) return FALSE;
                $this->session->unset_userdata('mail');

                $FromName = "自動送信";
                $From = "yamanoi@tsukuba-g.ac.jp";
                $To = "yamanoi@tsukuba-g.ac.jp";
                $Subject = "問い合わせメール";
                $Body = <<<EOLN
お名前:{$sdata['name']}
メールアドレス:{$sdata['mail']}
題名:{$sdata['subject']}
内容:
{$sdata['body']}
EOLN;

                $this->load->library('email');
                $config['protocol'] = 'mail';
                $config['charset'] = 'ISO-2022-JP';
                $config['wordwrap'] = FALSE;
                $this->email->initialize($config);
                $from_name = $FromName;
                $from      = $From;
                $to        = $To;
                $subject   = $Subject;
                $body      = $Body;
                $from_name = mb_encode_mimeheader($from_name, 'ISO-2022-JP','Q');
                $subject   = mb_convert_encoding($subject, 'ISO-2022-JP', 'UTF-8');
                $body = mb_convert_encoding($body, 'ISO-2022-JP', 'UTF-8');
                $this->email->from($from,$from_name);
                $this->email->to($to);
                $this->email->subject($subject);
                $this->email->message($body);
                if( $this->email->send() ) {
                        return TRUE;
                } else {
                        return FALSE;
                }
        }
}

Filename: views/send.phpを変更

<?php $this->load->view('elements/header');?>
<h1>お問い合わせありがとうございます。</h1>
<div id="message">
<?php echo $messages; ?>
</div>
<?php $this->load->view('elements/footer');?>