Как да изпратите имейл с помощта на CodeIgniter
Имейлът е много важен в уеб приложенията. Когато потребител се регистрира, може да искаме да му изпратим имейл, за да потвърдим имейл адреса си и да позволим на потребителя да потвърди абонамента. Ние също така използваме имейл за възстановяване на забравени пароли, изпращане на фактури и разписки до клиенти и т.н. CodeIgniter ни улеснява изключително лесно да изпращаме имейли от нашето приложение, като използваме различни опции.
CodeIgniter има вградена имейл библиотека, с която можем да работим, когато изпращаме имейли.
Конфигурация на имейл на CodeIgniter
Трябва да имаме централно място, където можем да управляваме имейл настройките. CodeIgniter не идва с конфигурационен файл за имейли, така че ще трябва да създадем такъв сами.
Създайте файл email.php в директорията application/config
Добавете следния код към email.php
<?php defined('BASEPATH') OR exit('No direct script access allowed'); $config = array( 'protocol' => 'smtp', // 'mail', 'sendmail', or 'smtp' 'smtp_host' => 'smtp.example.com', 'smtp_port' => 465, 'smtp_user' => 'no-reply@example.com', 'smtp_pass' => '12345!', 'smtp_crypto' => 'ssl', //can be 'ssl' or 'tls' for example 'mailtype' => 'text', //plaintext 'text' mails or 'html' 'smtp_timeout' => '4', //in seconds 'charset' => 'iso-8859-1', 'wordwrap' => TRUE );
ТУК,
- 'protocol' => 'smtp', указва протокола, който искате да използвате, когато изпращате имейл. Това може да са smtp настройки на Gmail или smtp настройки от вашия хост
- 'smtp_host' => 'smtp.example.com', указва smtp хоста. Например, ако искате да използвате Gmail, тогава ще имате нещо като smtp.gmail.com
- 'smtp_port' => 465, отворен порт на посочения smtp хост, който е конфигуриран за smtp поща
- 'smtp_user' => 'no-reply@example.com', имейл адресът, който ще се използва като подател при изпращане на имейли. Това трябва да е валиден имейл адрес, който съществува на сървъра
- 'smtp_pass' => '12345!', паролата за посочения smtp потребителски имейл
- 'smtp_crypto' => 'ssl', указва метода на криптиране, който да се използва, т.е. ssl, tls и т.н.
- 'email type' => 'text', задава вида на пощата, който да се използва. Това може да бъде обикновен текст или HTML в зависимост от вашите нужди.
- 'smtp_timeout' => '4', указва времето в секунди, което трябва да изтече при опит за свързване с хоста, преди да бъде хвърлено изключение за изчакване.
- 'charset' => 'iso-8859-1', дефинира набора от знаци, който да се използва при изпращане на имейли.
- 'wordwrap' => TRUE е зададено на TRUE, след което пренасянето на думи е разрешено. Ако е настроено на FALSE, пренасянето на думи не е разрешено
Забележка: за да изпращате имейли за работа, трябва да предоставите валидни конфигурационни параметри. Фиктивните параметри няма да могат да изпращат имейли.
Имейл изглед на CodeIgniter
В този раздел ще създадем изгледа, който ще изпрати имейла до получателя.
Създайте нов имейл указател в приложение/изгледи
Създайте нов файл contact.php application/views/email
Добавете следния код към application/views/email/contact.php
<!DOCTYPE html> <html> <head> <title>CodeIgniter Send Email</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <div> <h3>Use the form below to send email</h3> <form method="post" action="<?=base_url('email')?>" enctype="multipart/form-data"> <input type="email" id="to" name="to" placeholder="Receiver Email"> <br><br> <input type="text" id="subject" name="subject" placeholder="Subject"> <br><br> <textarea rows="6" id="message" name="message" placeholder="Type your message here"></textarea> <br><br> <input type="submit" value="Send Email" /> </form> </div> </body> </html>
ТУК,
- Имаме основен HTML формуляр, който приема имейла, темата и съобщението, след което предава параметрите към имейл маршрута.
Имейл контролер на CodeIgniter
Нека сега създадем контролера, който ще управлява изпращането на имейл
Създайте нов файл EmailController.php в application/controllers/EmailController.php
Добавете следния код към EmailController.php
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class EmailController extends CI_Controller { public function __construct() { parent:: __construct(); $this->load->helper('url'); } public function index() { $this->load->view('email/contact'); } function send() { $this->load->config('email'); $this->load->library('email'); $from = $this->config->item('smtp_user'); $to = $this->input->post('to'); $subject = $this->input->post('subject'); $message = $this->input->post('message'); $this->email->set_newline("\r\n"); $this->email->from($from); $this->email->to($to); $this->email->subject($subject); $this->email->message($message); if ($this->email->send()) { echo 'Your Email has successfully been sent.'; } else { show_error($this->email->print_debugger()); } } }
ТУК,
- клас EmailController разширява CI_Controller {…} дефинира нашия имейл контролер, който разширява родителския контролер CodeIgniter.
- публична функция __construct() {…} дефинира дъщерния конструктор, който извиква метода на родителския конструктор.
- публична функция index() {…} дефинира индексния метод, който показва формата за контакт
- функция send() {…} дефинира метода, който изпраща имейла
- $this->load->config('email'); зарежда настройките за конфигурация на имейл
- $this->load->library('имейл'); зарежда имейл библиотеката
- $from = $this->config->item('smtp_user'); получава идентификатора на изпращача от имейл конфигурационния файл, който сме дефинирали.
- $to = $this->input->post('to'); получава стойността на to от изпратения формуляр
- $subject = $this->input->post('subject'); задава имейла подложен от формуляра
- $message = $this->input->post('message'); задава имейл съобщението от формата
- $this->email->set_newline(“\r\n”); дефинира символите на новия ред за имейли
- $това->имейл->от($от); задава имейл адреса на изпращача
- $това->имейл->до($до); задава имейл адреса на получателя
- $това->имейл->тема($тема); задава темата на имейла
- $this->email->message($message); настройва имейл съобщението
- if ($this->email->send()) {…} се опитва да изпрати имейла. Ако имейлът е изпратен успешно, тогава съобщението Вашият имейл е изпратен успешно, друга информация за отстраняване на грешки се отпечатва върху това, което може да се е объркало.
Нека сега дефинираме имейл маршрутите
Имейл маршрути
Добавете следните маршрути към application/config/routes.php
$route['send-email'] = 'EmailController'; $route['email'] = 'EmailController/send';
Вече можем да заредим формата за контакти в уеб браузъра
Нека стартираме вградения PHP сървър
Отворете терминала/командния ред и прегледайте корена на вашето приложение. В моя случай коренът се намира в устройство C:\Sites\ci-app
cd C:\Sites\ci-app
стартирайте сървъра, като използвате следната команда
php -S localhost:3000
Заредете следния URL адрес във вашия уеб браузър: http://localhost:3000/send-email
Трябва да можете да видите следния формуляр
Въведете имейла на получателя, темата и имейл съобщението, след което щракнете върху Изпращане на имейл. Ако вашите имейл конфигурации са зададени правилно, тогава трябва да можете да видите успешното съобщение.
Oбобщение
Вградената имейл библиотека ни улеснява да изпращаме имейли с минимален код. Библиотеката също е много гъвкава в смисъл, че можете да я конфигурирате, за да отговаря на вашите изисквания.