21150


こんにちは！ヒロと申します。早速質問があります。

入力したメールアドレスに送信したメールが来ません。参考書をそのまま写したので、どこが間違っているのかわかりません。タグがいっぱいですがよろしくお願い致します。  
codeigniterをxampp上に設定しました。  
<http://localhost/develop2/index.php/form/>  
ながながすいません。

\-------/controllers/form.php/--------

[code]

    <?php
    class Form extends CI_Controller{
    
        function Form()
        {
            parent::__construct();
    
            $this->load->helper(array('form', 'url'));
    
            $this->load->library('session');
    
            $this->output->set_header('Content-Type: text/html; charset=UTF-8');
    
            $this->load->library('form_validation');
    
            $this->form_validation->set_error_delimiters('<div class="">','</div>');
    
    //      $fields['name'] = '名前';
    //      $fields['email'] = 'メールアドレス';
    //      $fields['comment'] = 'コメント';
    //      $this->form_validation->set_rules($fields);
    //      $rules['name'] = "trim|request|max_length[20]";
    //      $rules['email'] = "trim|request|valid_email";
    //      $rules['comment'] = "required|max_length[200]";
    //      $this->form_validation->set_rules($rules);
            //$this->output->enable_profiler(TRUE);
    
            $this->form_validation->set_rules('name', 'ユーザ名', 'trim|required|max_length[5]');
            $this->form_validation->set_rules('email', 'メールアドレス', 'trim|required');
            $this->form_validation->set_rules('comment', 'コメント', 'required|max_length[200]');
    
    $this->form_validation->set_message('required', '%sは、必須項目です');
    $this->form_validation->set_message('max_length', '%sは、%s文字以内で入力してください');
    $this->form_validation->set_message('valid_email', '正しいメールアドレスを指定してください');
    
        }
        function index()
        {
            $this->ticket = md5(uniqid(mt_rand(), TRUE));
            $this->session->set_userdata('ticket', $this->ticket);
    
            $this->form_validation->run();
    
            $this->load->view('form');
        }
        function confirm()
        {
            $this->ticket = $this->session->userdata('ticket');
            if (! $this->input->post('ticket')
            || $this->input->post('ticket') !== $this->ticket )
            {
                echo 'クッキーを有効にしてください。クッキーが有効な場合は、不正な操作が行われました。';
                exit;
            }
    
            if ($this->form_validation->run() == TRUE)
            {
                $this->load->view('form_confirm');
            }
            else
            {
                $this->load->view('form');
            }
        }
        function send()
        {
            $this->ticket = $this->session->userdata('ticket');
            if (! $this->input->post('ticket')
                    || $this->input->post('ticket') !== $this->ticket )
            {
                echo 'クッキーを有効にしてください。クッキーが有効な場合は、不正な操作が行われました。';
                exit;
            }
            if ($this->form_validation->run() == TRUE)
            {
                $mail['from_name'] = $this->validation->name;
                $mail['from'] = $this->validation->email;
                $mail['to'] = 'hironori.inoue@yahoo.com';
                $mail['subject'] = 'ｺﾝﾀｸﾄﾌｫｰﾑ';
                $mail['body'] = $this->validation->comment;
    
                if($this->_sendmail($mail))
                {
                    $this->load->view('form_end');
                    $this->session->sess_destroy();
                }
                else
                {
                    echo 'ﾒｰﾙ送信ｴﾗｰ';
                }
            }
            else
            {
                $this->load->view('form');
            }
        }
        function _sendmail($mail)
        {
            $this->load->library();
            $config['protocol'] = 'mail';
    
            $config['charset'] = 'ISO-2022-JP';
            $config['wordwrap'] = FALSE;
            $this->email->initialize($config);
    
            $from_name = $mail['from_name'];
            $from = $mail['from'];
            $to = $mail['to'];
            $subject = $mail['subject'];
            $body = $mail['body'];
    
            $from_name = mb_encode_mimeheader($from_name, 'ISO-2022-JP', 'UTF-8');
            $subject = mb_encode_mimeheader($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;
            }
        }
    }
    --------------------------------------------------
    --------------views/form_confirm.php--------------
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link rel="stylesheet" href="<?=base_url();?>css/form.css" type="text/css" />
        <title>コンタクトフォーム</title>
        <style type="text/css"></style>
    </head>
    <body>
     <?=$this->load->view('form_header')?>
    
    <div id="main">
    <div class="title_banner">
    <img src="<?=base_url();?>images/icons/form_titile.jpg" alt="お問い合わせ" width="580" height="70" />
    </div>
    
    <div class="outer_frame">
    <p class="center">お問い合わせ内容の確認</p>
    <table>
    <tr><th>名前</th>
    <td>
        <?php /*echo form_prep('name', set_value('name'));*/ ?>
        <?php echo form_prep(set_value('name'));?>
    </td>
    </tr>
    <tr><th>メールアドレス</th>
    <td>
        <?php /*echo form_prep('name', set_value('email'));*/ ?>
        <?php echo form_prep(set_value('email')); ?>
    </td>
    </tr>
    <tr><th>コメント</th>
    <td>
        <?php /*echo form_prep('name', set_value('comment'));*/ ?>
        <?php echo form_prep(set_value('comment')); ?>
    </td>
    </tr>
    <tr><td></td>
    <td class="center">
        <?=form_open('form');?>
        <?=form_hidden('ticket', $this->ticket);?>
        <?=form_hidden('name', set_value('name'));?>
        <?=form_hidden('email', set_value('email'));?>
        <?=form_hidden('comment', set_value('comment'));?>
        <input class="button" type="submit" value="修正" />
        <?=form_close();?>
    
        <?=form_open('form/send');?>
        <?=form_hidden('ticket', $this->ticket);?>
        <?=form_hidden('name', set_value('name'));?>
        <?=form_hidden('email', set_value('email'));?>
        <?=form_hidden('comment', set_value('comment'));?>
        <input class="button" type="submit" value="送信" />
        <?=form_close();?>
    </td>
    </tr>
    </table>
    
    </div>
    </div>
    
     <?=$this->load->view('ci_footer');?>
    </body>
    </html>
    --------------------------------------------------
    ---------------view/form_end.php------------------
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <link rel="stylesheet" href="<?=base_url();?>css/form.css" type="text/css" />
      <style type="text/css"></style>
      <title>コンタクトフォーム(送信完了)</title>
    
    
    </head>
    <body>
    <!-- header -->
    <?=$this->load->view('form_header');?>
    
    <!-- main -->
    <div id="main">
    <div class="title_banner">
    <img src="<?=base_url();?>images/icons/form_title.jpg" alt="お問い合わせ" width="580" height="70" />
    </div>
    <div class="outer_frame">
    <p class="center">送信しました</p>
    <p>お問い合わせ、ありがとうございます。</p>
    </div>
    </div>
    
    <!-- footer -->
    <?=$this->load->view('ci_footer');?>
    </body>
    </html>
    
[/code]


CC BY-SA 3.0
2016-01-21T06:50:12.837
21147
2016-02-20T11:59:16.963
2016-01-21T08:44:59.627
8000
14087
question
php xampp
コンタクトフォームについて "入力したアドレスに送信メールが来ない。"


CodeIgniterはデフォルトではPHPのメール送信機能を使うのですが、PHPはデフォルトで `sendmail`
という多くのLinuxに標準で入っているプログラムを利用するようになっています。Windowsにはこれがないので、別の方法を考えないといけません。

で、XAMPPに付属するPHPの場合、「送信したメールをファイルとして保存する」という設定がなされています。XAMPPのインストール先にある
`mailoutput` というフォルダに何か保存されていませんか？

もし実際に任意のアドレスに対してメールを送信したいのであれば、

  * 送信元となるメールアドレスをGmailなどで一つ用意して
  * `xampp\sendmail\sendmail.ini` にそのアカウント情報を設定し
  * `xampp\php\php.ini` の `sendmail_path` を、コメントアウトされている `sendmail.exe` に変更する

といった作業が必要になります。

参考： [「XAMPP for
Windows」の環境でsendmailの設定を行う。｜マコトのおもちゃ箱](http://piyopiyocs.blog115.fc2.com/blog-
entry-623.html)

[CodeIgniterでも同様の設定を行うことができます](http://manablog.org/codeigniter_gmail/)が、後でそのプログラムをレンタルサーバーなどに移したり、あるいは同じXAMPPで他のPHPプログラムも試されるのであれば、php.iniでまとめて設定しておくと楽かなと思います。


CC BY-SA 3.0
2016-01-21T08:59:07.680
21150
2016-01-21T08:59:07.680
8000
21147
answer