Как отправить электронное письмо с помощью 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' => '[email protected]',
    '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' => '[email protected]' — адрес электронной почты, который будет использоваться в качестве отправителя при отправке электронных писем. Это должен быть действительный адрес электронной почты, существующий на сервере.
  • 'smtp_pass' => '12345!', пароль к указанному адресу электронной почты smtp-пользователя.
  • 'smtp_crypto' => 'ssl' указывает используемый метод шифрования, например SSL, TLS и т. д.
  • 'тип электронной почты' => 'текст', устанавливает тип используемой почты. Это может быть обычный текст или HTML в зависимости от ваших потребностей.
  • 'smtp_timeout' => '4' указывает время в секундах, которое должно пройти при попытке подключения к хосту, прежде чем будет выдано исключение тайм-аута.
  • 'charset' => 'iso-8859-1' определяет набор символов, который будет использоваться при отправке электронных писем.
  • 'wordwrap' => TRUE установлено в TRUE, тогда перенос слов включен. Если установлено значение FALSE, перенос слов не включен.

Внимание: для отправки электронных писем в работу необходимо указать действительные параметры конфигурации. Фиктивные параметры не смогут отправлять электронные письма.

Просмотр электронной почты CodeIgniter

В этом разделе мы создадим представление, которое будет отправлять электронное письмо получателю.

Создайте новый адрес электронной почты в каталоге application/views.

Создайте новый файл 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.
  • public function __construct() {…} определяет дочерний конструктор, который вызывает метод родительского конструктора.
  • публичная функция index() {…} определяет метод индекса, который отображает контактную форму
  • функция send() {…} определяет метод, который отправляет электронное письмо
    • $this->load->config('электронная почта'); загружает настройки конфигурации электронной почты
    • $this->load->library('электронная почта'); загружает библиотеку электронной почты
    • $from = $this->config->item('smtp_user'); получает идентификатор отправителя из файла конфигурации электронной почты, который мы определили.
    • $to = $this->input->post('to'); получает значение из отправленной формы
    • $subject = $this->input->post('subject'); устанавливает адрес электронной почты, отправленный из формы
    • $message = $this->input->post('сообщение'); устанавливает сообщение электронной почты из формы
    • $this->email->set_newline("\r\n"); определяет символы новой строки для электронных писем
    • $this->email->from($from); устанавливает адрес электронной почты отправителя
    • $this->email->to($to); устанавливает адрес электронной почты получателя
    • $this->электронная почта->тема($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

Вы должны увидеть следующую форму

Маршруты электронной почты

Введите адрес электронной почты получателя, тему и сообщение электронной почты, затем нажмите «Отправить электронное письмо». Если настройки электронной почты настроены правильно, вы сможете увидеть успешное сообщение.

Резюме

Встроенная библиотека электронной почты позволяет нам легко отправлять электронные письма с минимальным количеством кода. Библиотека также очень гибкая в том смысле, что вы можете настроить ее в соответствии со своими требованиями.

Подведем итог этой публикации следующим образом: