Jak odeslat e-mail pomocí CodeIgniter

E-mail je ve webových aplikacích velmi důležitý. Když se uživatel zaregistruje, můžeme mu poslat e-mail, abychom ověřili jeho e-mailovou adresu a umožnili uživateli potvrdit odběr. E-mail také používáme k resetování zapomenutých hesel, odesílání faktur a účtenek zákazníkům atd. CodeIgniter nám velmi usnadňuje odesílání e-mailů z naší aplikace pomocí různých možností.

CodeIgniter má vestavěnou e-mailovou knihovnu, se kterou můžeme pracovat při odesílání e-mailů.

Konfigurace e-mailu CodeIgniter

Potřebujeme mít centrální místo, kde můžeme spravovat nastavení e-mailu. CodeIgniter nepřichází s konfiguračním souborem pro e-maily, takže si jej budeme muset vytvořit sami.

Vytvořte soubor email.php v adresáři application/config

Přidejte následující kód do 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
);

TADY,

  • 'protocol' => 'smtp', určuje protokol, který chcete použít při odesílání e-mailu. Může to být nastavení smtp Gmailu nebo nastavení smtp z vašeho hostitele
  • 'smtp_host' => 'smtp.example.com', určuje hostitele smtp. Pokud například chcete používat Gmail, měli byste něco jako smtp.gmail.com
  • 'smtp_port' => 465, otevřený port na zadaném hostiteli smtp, který byl nakonfigurován pro poštu smtp
  • 'smtp_user' => 'no-reply@example.com', e-mailová adresa, která bude použita jako odesílatel při odesílání e-mailů. Mělo by se jednat o platnou e-mailovou adresu, která existuje na serveru
  • 'smtp_pass' => '12345!', heslo pro zadaný e-mail uživatele smtp
  • 'smtp_crypto' => 'ssl', určuje metodu šifrování, která se má použít, tj. ssl, tls atd.
  • 'email type' => 'text', nastavuje typ pošty, který se má použít. To může být buď prostý text nebo HTML v závislosti na vašich potřebách.
  • 'smtp_timeout' => '4', určuje čas v sekundách, který by měl uplynout při pokusu o připojení k hostiteli, než je vyvolána výjimka časového limitu.
  • 'charset' => 'iso-8859-1', definuje znakovou sadu, která se má použít při odesílání e-mailů.
  • 'wordwrap' => TRUE je nastaveno na TRUE, pak je zalamování slov povoleno. Pokud je nastavena na FALSE, pak zalamování slov není povoleno

Pozor: Aby odesílání e-mailů fungovalo, měli byste zadat platné konfigurační parametry. Falešné parametry nebudou moci odesílat e-maily.

Zobrazení e-mailu CodeIgniter

V této sekci vytvoříme pohled, který odešle e-mail příjemci.

Vytvořte nový e-mail adresáře v aplikaci/pohledech

Vytvořte nový soubor contact.php application/views/email

Přidejte následující kód do 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>

TADY,

  • Máme základní HTML formulář, který přijímá e-mail, předmět a zprávu a poté předává parametry e-mailové trase.

E-mailový ovladač CodeIgniter

Nyní vytvoříme ovladač, který bude zpracovávat odesílání e-mailů

Vytvořte nový soubor EmailController.php v application/controllers/EmailController.php

Přidejte následující kód do 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());
        }
    }
}

TADY,

  • class EmailController rozšiřuje CI_Controller {…} definuje náš e-mailový řadič, který rozšiřuje nadřazený řadič CodeIgniter.
  • veřejná funkce __construct() {…} definuje podřízený konstruktor, který volá metodu nadřazeného konstruktoru.
  • public function index() {…} definuje metodu indexu, která zobrazí kontaktní formulář
  • funkce send() {…} definuje metodu, která odesílá e-mail
    • $this->load->config('email'); načte nastavení konfigurace e-mailu
    • $this->load->library('email'); načte e-mailovou knihovnu
    • $from = $this->config->item('smtp_user'); získá ID odesílatele z konfiguračního souboru e-mailu, který jsme definovali.
    • $to = $this->input->post('to'); získá hodnotu to z odeslaného formuláře
    • $předmět = $toto->vstup->příspěvek('předmět'); nastaví předmět e-mailu z formuláře
    • $message = $this->input->post('message'); nastaví e-mailovou zprávu z formuláře
    • $this->email->set_newline(“\r\n”); definuje znaky nového řádku pro e-maily
    • $this->e-mail->from($from); nastaví e-mailovou adresu odesílatele
    • $this->e-mail->to($to); nastaví e-mailovou adresu příjemce
    • $this->e-mail->předmět($předmět); nastavuje předmět e-mailu
    • $this->email->message($message); nastaví e-mailovou zprávu
    • pokud se ($this->email->send()) {…} pokusí odeslat e-mail. Pokud je e-mail úspěšně odeslán, pak se na tom, co se mohlo pokazit, vytiskne zpráva Váš e-mail byl úspěšně odeslán, jinak ladicí informace.

Pojďme nyní definovat e-mailové trasy

E-mailové trasy

Přidejte následující trasy do application/config/routes.php

$route['send-email'] = 'EmailController';
$route['email'] = 'EmailController/send';

Nyní můžeme načíst kontaktní formulář ve webovém prohlížeči

Spustíme vestavěný PHP server

Otevřete terminál/příkazový řádek a přejděte do kořenového adresáře vaší aplikace. V mém případě je root umístěn na jednotce C:\Sites\ci-app

cd C:\Sites\ci-app

spusťte server pomocí následujícího příkazu

php -S localhost:3000

Načtěte do webového prohlížeče následující URL: http://localhost:3000/send-email

Měli byste vidět následující formulář

E-mailové trasy

Zadejte e-mail příjemce, předmět a e-mailovou zprávu a poté klikněte na Odeslat e-mail. Pokud jsou vaše e-mailové konfigurace správně nastaveny, měli byste vidět úspěšnou zprávu.

Shrnutí

Vestavěná e-mailová knihovna nám usnadňuje odesílání e-mailů s minimálním kódem. Knihovna je také velmi flexibilní v tom smyslu, že ji můžete nakonfigurovat tak, aby vyhovovala vašim požadavkům.