Як надіслати електронний лист за допомогою 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());
        }
    }
}

ТУТ,

  • class EmailController extends CI_Controller {…} визначає наш контролер електронної пошти, який розширює батьківський контролер CodeIgniter.
  • публічна функція __construct() {…} визначає дочірній конструктор, який викликає метод батьківського конструктора.
  • публічна функція index() {…} визначає метод індексу, який відображає контактну форму
  • функція send() {…} визначає метод, який надсилає електронний лист
    • $this->load->config('email'); завантажує параметри конфігурації електронної пошти
    • $this->load->library('email'); завантажує бібліотеку електронної пошти
    • $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->from($from); встановлює електронну адресу відправника
    • $this->email->to($to); встановлює адресу електронної пошти одержувача
    • $this->email->subject($subject); встановлює тему електронного листа
    • $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

Ви повинні побачити наступну форму

Маршрути електронної пошти

Введіть електронну адресу одержувача, тему та повідомлення електронної пошти, а потім натисніть «Надіслати електронний лист». Якщо конфігурації вашої електронної пошти налаштовано належним чином, ви зможете побачити успішне повідомлення.

Підсумки

Вбудована бібліотека електронної пошти дозволяє нам легко надсилати електронні листи з мінімальним кодом. Бібліотека також є дуже гнучкою в тому сенсі, що ви можете налаштувати її відповідно до своїх вимог.