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ář
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.