Először is telepítsük a sendmail levélszervert és a mail levelező programot, hogy legalább localhost-on le tudjuk tesztelni a levélküldést. Nagyon nem lesz nehéz dolgunk a CodeIgniter-t illetőleg, mivel támogatja a sendmail levelező csomagot.
root@gergo1:~# apt install sendmail
root@gergo1:~# apt-get install mailutils
Ezután teszteljük le a levélküldést. Tegyük fel, hogy fut a sendmail felépítmény (szerver, leírás https://en.wikipedia.org/wiki/Sendmail).
gvamosi@gergo1:/var/www/html/apartman/application$ mail -s "Teszt levél" gvamosi@localhost < /dev/null
mail: Null message body; hope that's ok
gvamosi@gergo1:/var/www/html/apartman/application$ mail
"/var/mail/gvamosi": 1 message 1 new
>N 1 gvamosi Fri Aug 7 00:46 14/520 Teszt levél
? q
Held 1 message in /var/mail/gvamosi
Láthatjuk, hogy a levelünk “Teszt levél” tárggyal és üres tartalommal elküldésre került és szerencsésen meg is érkezett. 🙂 Helyben került kézbesítve, helyi feladótól. Ne ijedjünk meg, ha picit lassú a kézbesítés, a névfeloldás megy nehezen a sendmail-ünknek, mivel nem vagyunk internetre kötött ún. SMTP host, azaz hivatalos levélküldő szerver. Attól sem kell félnünk, hogy igazi levelet tudunk küldeni a nagyvilágba, ez így lehetetlen. 🙂
Részleteket az internetes levelezésről az alábbi címen találhatunk https://hu.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol.
Mindez szép és jó, de hogyan küldjük el akkor egy webes form-ból a levelet az adminisztrátornak, tehát a kapcsolatfelvételi formot hogyan is programozzuk le?
Vegyünk egy sima, nem JavaScript-es form-ot az egyszerűség kedvéért, majd használjuk a CodeIgniter email könyvtárát. Annyi lesz az egész, hogy be kell konfiguráljuk a sendmail-ünket, és meg kell hívnunk a megfelelő rutinokat a controller-ünkben űrlapküldés után.
Elsőnek hozzuk létre a kapcsolati űrlapot views/contact.php
néven!
<?php
$my_base_url = '/apartman/';
?>
<div class="row">
<div class="col-sm-2">
<div id="fh5co-logo"><a href="index.html">Apartman<span>.</span></a></div>
</div>
<div class="col-sm-10 text-right menu-1">
<ul>
<li><a href="photos"><?php echo $this->lang->line('menu_photos'); ?></a></li>
<li><a href="booking"><?php echo $this->lang->line('menu_booking'); ?></a></li>
<li class="active"><a href="contact"><?php echo $this->lang->line('menu_contact'); ?></a></li>
</ul>
</div>
</div>
</div>
</div>
</nav>
<div class="container">
<div id="fh5co-intro">
<div class="row animate-box">
<div class="col-md-8 col-md-offset-2 col-md-pull-2">
<h2><?php echo $this->lang->line('menu_contact'); ?></h2>
</div>
</div>
</div>
<div id="fh5co-contact">
<div class="row">
<div class="col-md-8 animate-box">
<div class="form-wrap">
<div class="row">
<form action="send" method="POST">
<div class="col-md-12">
<div class="form-group">
<input type="text" name="name" class="form-control" placeholder="Your name">
</div>
</div>
<div class="col-md-12">
<div class="form-group">
<input type="text" name="email" class="form-control" placeholder="Your email">
</div>
</div>
<div class="col-md-12">
<div class="form-group">
<textarea id="message" name="message" class="form-control" id="" cols="30" rows="15" placeholder="Your message"></textarea>
</div>
</div>
<div class="col-md-12">
<div class="form-group">
<input type="submit" value="Send message" class="btn btn-primary btn-modify">
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div><!-- END container -->
Látható, hogy ez egy sima form. Nem is fűzök hozzá magyarázatot.
Majd hozzük létre a visszajelző oldalt views/contact_sent.php
néven!
<?php
$my_base_url = '/apartman/';
?>
<div class="row">
<div class="col-sm-2">
<div id="fh5co-logo"><a href="index.html">Apartman<span>.</span></a></div>
</div>
<div class="col-sm-10 text-right menu-1">
<ul>
<li><a href="photos"><?php echo $this->lang->line('menu_photos'); ?></a></li>
<li><a href="booking"><?php echo $this->lang->line('menu_booking'); ?></a></li>
<li class="active"><a href="contact"><?php echo $this->lang->line('menu_contact'); ?></a></li>
</ul>
</div>
</div>
</div>
</div>
</nav>
<div class="container">
<div id="fh5co-intro">
<div class="row animate-box">
<div class="col-md-8 col-md-offset-2 col-md-pull-2">
<h2><?php echo $this->lang->line('menu_contact'); ?></h2>
</div>
</div>
</div>
<div id="fh5co-contact">
<div class="row">
<div class="col-md-8 animate-box">
<div class="form-wrap">
<div class="row">
<div class="col-md-12">
<div class="form-group">
<h3><font color="red">Thank you for contacting us!</font></h3>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div><!-- END container -->
Ez is beton egyszerű.
Nézzük meg azt a három metódust, amivel a controllers/Apartments.php
vezérlőnket bővítettük!
public function contact() {
$data = array();
$this->template->set('title', $this->lang->line('menu_contact'));
$this->template->load('menu_layout', 'contents', 'contact', $data);
}
public function send() {
$this->load->library('email');
$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
$config['charset'] = 'utf-8';
$this->email->initialize($config);
$this->email->from($this->input->post('email'), $this->input->post('name'));
// mail of administrator
$this->email->to('gvamosi@localhost');
$this->email->subject('Mail from booking site');
$this->email->message($this->input->post('message'));
$this->email->send();
redirect(base_url('index.php/apartments/contact_sent'));
}
public function contact_sent() {
$data = array();
$this->template->set('title', $this->lang->line('menu_contact'));
$this->template->load('menu_layout', 'contents', 'contact_sent', $data);
}
A contact()
metódus csupán kirajzol egy oldalt, ahogy a contact_sent()
is. Az érdekesebb metódusunk a send()
, amiben a tulajdonképpeni levélküldés történik. Ennyi az egész! 🙂 A valóságban persze az adminisztrátorok és a fejlesztők együttműködésére és közreműködésére van szükség mind fejlesztés, mind pedig a webalkalmazás telepítése során.
És akkor nézzük a http://localhost/apartman/index.php/apartments/contact oldalunkat!

Kis várakozás után megkapjuk a levelünket. Kettes sorszámmal látható a parancssori levelezőnkben. 🙂
gvamosi@gergo1:/var/www/html/apartman/application$ mail
"/var/mail/gvamosi": 2 messages 1 new 1 unread
U 1 gvamosi Fri Aug 7 00:46 17/564 Teszt levél
>N 2 Teszt Elek Fri Aug 7 01:14 23/823 Mail from booking site
? q
Held 2 messages in /var/mail/gvamosi