コードイグナイター フォーム入力とメール送信機能

コードイグナイター
フォームに入力をして送信ボタンを押す。
コントローラで受け取り、バリデーション。さらに、グーグルを経由してメール送信を送ります。
つまり、メールフォームを作っていきます。
■流れ
・PHPで基本的な流れをみる
・send_mail()関数について知る
・メールフォームの作り方
・バリデーション
・XAMPPでの送信方法をについて学ぶ
・グーグル経由でsendmail()
・アプリパスワードを発行する
|
コードについて
フォームを作る時に、考えておくことは、以下の事です。
■Controller/contact.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Contact extends CI_Controller {
public function __construct(){
parent::__construct();
$this->load->database();
$this->load->helper(array('form','url'));
$this->load->library('form_validation');
$this->load->helper('array');
/*Emailを使うのに書く*/
$this->load->library('email');
}
public function index($param=null){
$this->load->helper(array('form','url'));
$this->load->library('form_validation');
$this->form_validation->set_error_delimiters('<p class="red">', '</p>');
//バリデーションのルールを作る
$this->form_validation->set_rules('name', '名前', 'required|max_length[10]',array('required' => '%s を入力してください'));
$this->form_validation->set_rules('address', '住所', 'required|max_length[40]',array('required' => '%s は必須です。'));
$this->form_validation->set_rules('tel', '電話番号','regex_match[/^0[0-9]{1,4}-[0-9]{1,4}-[0-9]{3,4}\z/]','required',array('required' => '%s は必須です。'));
$this->form_validation->set_rules('email', 'メールアドレス','required',array('required' => '%s は必須です。'));
$this->form_validation->set_rules('comment_txt', 'コメント', 'required',array('required' => '%s は必須です。'));
/*バリデーションの*/
if ($this->form_validation->run() == FALSE){
$this->load->view('contact/index.php');
}else{/*成功した時*/
/*set_valueはバリデーションを経た値のみOk*/
$name=set_value('name');
$address=set_value('address');
$tel=set_value('tel');
$email=set_value('email');
$comment_txt=set_value('comment_txt');
$options_select=$this->input->post('toiawase_naiyo');
/*$options_select=set_value('toiawase_naiyo');/*これだとvalueの値になってしまう*/
$this->email->from('makio88@gmail.com', 'Hironori Maki');
$this->email->to('maki@plus-work.jp');
/*$this->email->cc('maki@plus-work.jp');
$this->email->bcc('maki@plus-work.jp');*/
$this->email->subject('テスト送信をしています');
$mail_body = 'お客様からメールが届いています。'."\n"
.'■■問い合わせ内容■■'."\n"
.'名前:'.$name. "\n"
.'住所:'.$address. "\n"
.'電話:'.$tel. "\n"
.'メール:'.$email. "\n"
.'内容:'.$options_select. "\n"
.'コメント:'.$comment_txt.'になります';
$this->email->message($mail_body);
if($this->email->send()){
echo "Your email was sent.";
$this->load->view('form/formsuccess');
}else{
echo $this->email->print_debugger();
$this->load->view('contact/index.php');
} }}}
|
大まかには、こんなイメージです。
■View/contact/index.php (ビューにcontactフォルダを作り、ファイルを作っています)
<!--どこに飛ばすか指定 -->
<?php echo form_open('contact'); //コントローラへ飛ばす。?>
<input type="hidden" name="act" value="_input">
<p class="lt"><label for="name">お名前<span class="red">※</span></label></p>
<div class="form_box">
<p class="fbox01">
<input type="text" name="name" id="name" required placeholder="10文字以内で入力" value="<?php echo set_value('name'); ?>" /><?php echo form_error('name'); ?>
</p>
</div>
<p class="lt"><label for="address">住所</label></p>
<div class="form_box02">
<p class="fbox02">
<input type="text" name="address" id="address" required placeholder="住所を入力してください" value="<?php echo set_value('address'); ?>" /><?php echo form_error('address'); ?>
</p>
<p class="zirei">例:東京都品川区5-5-15 虎ノ門ビル7F</p>
</div>
<p class="lt"><label for="tel">電話番号<span class="red">※</span></label></p>
<div class="form_box">
<p class="fbox01">
<input type="text" name="tel" id="tel" required placeholder="090-1234-5678" value="<?php echo set_value('tel'); ?>" /><?php echo form_error('tel'); ?>
</p>
<p class="zirei">090-1234-5678(ハイフンが必要)</p>
</div>
<p class="lt"><label for="email">メールアドレス<span class="red">※</span></label></p>
<div class="form_box02">
<p class="fbox02">
<input type="text" name="email" id="email" placeholder="info@gmail.com" value="<?php echo set_value('email'); ?>" /><?php echo form_error('email'); ?>
</p>
</div>
<p>お問い合わせ内容<span class="red">※</span></p>
<div class="form_box03">
<p class="fbox3">
<?php
$options = array(
'select' => '選んでください',
'ご相談・質問' => 'ご相談・質問',
'無料診断' => '無料診断',
'資料請求' => '資料請求',
);
echo form_dropdown('toiawase_naiyo', $options,'select');
?>
</p>
</div>
<p>ご意見・ご相談</p>
<div class="textbox">
<?php
echo form_error('comment_txt');
//エラー表示が出ない^^;
$userts_comment['name'] = 'comment_txt';
//$userts_comment['row'] = '4';
//$userts_comment['cols'] = '40';
$userts_comment['value'] = set_value('comment_txt');
$userts_comment['placeholder'] = 'コメントを書いてください';
$userts_comment['required'] = 'required';
echo form_textarea($userts_comment); ?>
</div>
<p> </p>
<p align="center">
<input id="submit_button" type="submit" name="submit" value="送信する">
</p>
</form>
|
分からない場合、質問してください!!
Xampp環境でメール送信を行う
Postfixは使っていません。
XAMPPインストール時に、付属しているソフトを利用します。

「php.ini」ファイルを編集します。
sendmail_path ="\"C:\xampp\sendmail\sendmail.exe\" -t"
smtp_server=smtp.gmail.com
auth_username=自分のGmailアドレスを入れる
auth_password=アプリパスワード
smtp_ssl=auto |
こんな感じです。
アプリパスワードは下で解説します。
【参照】
詳しくはこちらを参照してください>>
sendmail.iniの設定
sendmail.iniの編集
「sendmail.exe」と同じ場所にある「sendmail.ini」ファイルを、メモ帳などで開きます。
smtp_server=smtp.gmail.com
smtp_port=587
auth_username=自分のGmailアドレスを入れる
auth_password=アプリパスワード
|
1.「smtp_server=」→メールサーバを指定します。
2.「;smtp_port=25」→「smtp_port=587」
3.「;auth_username= ;auth_password=」→自身のアカウントとパスワード
この3つを設定する必要があります。
グーグルの設定(アプリパスワードを発行)
sendmailを安全性の高いアプリにしてあげる必要があります。これをしないと、グーグルにはじかれてしまいます。
必要なのは、グーグルのアカウントです。
1.二段階認証をする
2.アプリパスワードを作成する
3.コピーして使う
という流れになります。

二段階認証プロセスを「オン」にします。

1.アプリを選択
2.その他➡send_mailと打ち込む
3.パスワードが生成
4.パスワードをコピーして使う
参照
【参照】
【コードイグナイター】emailクラスを使う>>
【sendmail】gmailアカウントの設定で安全性の低いアプリ(sendmail)を登録して、安全性を上げる>>
【Postfix】PHPのmail関数で送信できないときに確認したいPostfixの設定>>
【基本】Xamppのsendmailとgmailでメール送信フォームを作りましょう>>
これらを確認すると作れるようになります。
ご質問などありましたら、お気軽にご相くださいませ

コードイグナイターの勉強方法
この記事を読んだ人は、こんな記事も読んでいます