Как да изпратите имейл с помощта на Codeподпалвач
⚡ Умно обобщение
CodeИзпращането на имейл от Igniter разчита на вградената библиотека за имейл на платформата, за да доставя съобщения чрез SMTP или локалния пощенски сървър. Този пример създава конфигурационен файл за имейл, изглед на формуляр за контакт и контролер, който чете входните данни от формуляра и изпраща съобщението.
Имейлът е много важен в уеб приложенията. Когато потребител се регистрира, може да поискаме да му изпратим имейл, за да потвърдим имейл адреса му и да му позволим да потвърди абонамента. Също така използваме имейл, за да възстановим забравени пароли и да изпращаме фактури и касови бележки на клиентите. CodeIgniter ни улеснява изключително много да изпращаме имейли от нашето приложение, използвайки различни опции.
CodeIgniter има вградена имейл библиотека, с която можем да работим, когато изпращаме имейли.
CodeКонфигурация на имейла на запалителя
Трябва да имаме централизирано място, където да можем да управляваме настройките на имейла. 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“ указва протокола, който искате да използвате при изпращане на имейл. Това може да бъде Gmail SMTP настройки или 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 и др.
- „mailtype“ => „text“ задава типа на имейла, който ще се използва. Това може да бъде обикновен текст или HTML, в зависимост от вашите нужди.
- 'smtp_timeout' => '4', указва времето в секунди, което трябва да изтече при опит за свързване с хоста, преди да бъде хвърлено изключение за изчакване.
- 'charset' => 'iso-8859-1', дефинира набора от знаци, който да се използва при изпращане на имейли.
- „wordwrap“ => TRUE, ако е зададено на TRUE, пренасянето на думи е активирано. Ако е зададено на FALSE, пренасянето на думи не е активирано
Забележка: за да изпращате имейли за работа, трябва да предоставите валидни конфигурационни параметри. Фиктивните параметри няма да могат да изпращат имейли.
CodeПреглед на имейла на Igniter
В този раздел ще създадем изгледа, който ще изпрати имейла до получателя.
Създайте нов имейл указател в приложение/изгледи
Създайте нов файл 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(0)?>" 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 форма, която приема имейла, темата и съобщението, след което предава параметрите към имейл маршрута.
CodeКонтролер за имейл на запалител
Нека сега създадем контролера, който ще обработва изпращането на имейли.
Създайте нов файл 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()); } } }
ТУК,
- class EmailController extends CI_Controller {…} дефинира нашия имейл контролер, който разширява родителския клас CodeКонтролер на запалката.
- публична функция __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); настройва имейл съобщението
- ако ($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
Трябва да можете да видите следния формуляр
Въведете имейл адреса на получателя, темата и имейл съобщението, след което кликнете върху „Изпращане на имейл“. Ако конфигурацията на имейла ви е зададена правилно, тогава би трябвало да можете да видите съобщението за успех.
Как да изпращате HTML имейли и прикачени файлове в Codeподпалвач
Същата библиотека за имейли може да изпраща богато форматирани съобщения и файлове. Две малки промени превръщат примера с обикновен текст по-горе в HTML имейл с прикачен файл.
$this->email->set_mailtype('html'); $this->email->message('<h3>Welcome</h3><p>Thanks for joining us.</p>'); $this->email->attach('/path/to/report.pdf');
- set_mailtype('html'): казва на библиотеката, че тялото съдържа HTML, така че тагове като заглавия и връзки се показват във входящата поща на получателя.
- прикачи(): добавя файл от пътя на сървъра към съобщението; извикайте го веднъж за всеки файл преди send().
Не забравяйте, че HTML имейлите все пак трябва да включват алтернатива с обикновен текст, а големите прикачени файлове може да бъдат отхвърлени от строгите пощенски сървъри.


