Jak odeslat e-mail pomocí CodeZapalovač
⚡ Chytré shrnutí
CodeOdesílání e-mailů v Igniteru se spoléhá na vestavěnou knihovnu e-mailů v rámci frameworku k doručování zpráv prostřednictvím protokolu SMTP nebo lokálního poštovního serveru. Tento příklad vytvoří konfigurační soubor e-mailu, zobrazení kontaktního formuláře a kontroler, který čte vstup z formuláře a odesílá zprávu.

E-mail je ve webových aplikacích velmi důležitý. Když se uživatel zaregistruje, můžeme mu chtít poslat e-mail, abychom ověřili jeho e-mailovou adresu a umožnili mu potvrdit odběr. E-mail také používáme k resetování zapomenutých hesel a k zasílání faktur a účtenek zákazníkům. CodeIgniter nám velmi usnadňuje odesílání e-mailů z naší aplikace pomocí různých možností.
CodeIgniter má vestavěnou knihovnu e-mailů, se kterou můžeme pracovat při odesílání e-mailů.
CodeKonfigurace e-mailu zapalovače
Potřebujeme mít centrální místo, kde můžeme spravovat nastavení e-mailu. CodeIgniter neobsahuje konfigurační soubor pro e-maily, takže si ho 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-mailů. Může to být Gmail Nastavení SMTP nebo nastavení SMTP od vašeho hostitele
- 'smtp_host' => 'smtp.example.com' určuje hostitele SMTP. Například pokud chcete použít Gmail pak byste měli něco jako smtp.gmail.com
- 'smtp_port' => 465, otevřený port na zadaném hostiteli SMTP, který byl nakonfigurován pro SMTP poštu
- '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 k zadanému e-mailu uživatele SMTP
- 'smtp_crypto' => 'ssl', určuje použitou metodu šifrování, např. ssl, tls atd.
- 'mailtype' => 'text', nastavuje typ e-mailu, který se má použít. Může to 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, pokud je nastaveno na TRUE, pak je zalamování slov povoleno. Pokud je nastaveno na FALSE, pak není zalamování slov povoleno.
Hodnocení: Aby odesílání e-mailů fungovalo, měli byste zadat platné konfigurační parametry. Falešné parametry nebudou moci odesílat e-maily.
CodeZobrazení e-mailu zapalovače
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 v adresáři 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(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>
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 do e-mailové trasy.
CodeŘídicí jednotka e-mailu zapalovače
Nyní si vytvořme kontroler, který bude odesílat e-maily.
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,
- třída EmailController extends CI_Controller {…} definuje náš e-mailový kontroler, který rozšiřuje rodičovskou třídu CodeOvladač zapalovače.
- 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
- $subject = $this->input->post('subject'); 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 ($this->email->send()) {…} se pokusí odeslat e-mail. Pokud je e-mail úspěšně odeslán, zobrazí se zpráva „Váš e-mail byl úspěšně odeslán“, v opačném případě se vypíší ladicí informace o tom, co se mohlo pokazit.
Nyní si definujme trasy e-mailů.
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ář do webového prohlížeče.
Spusťme vestavěný PHP server.
Otevřete terminál nebo příkazový řádek a přejděte do kořenového adresáře vaší aplikace. V mém případě se kořenový adresář nachází na disku 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 následující URL ve vašem webovém prohlížeči: 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 tlačítko Odeslat e-mail. Pokud je vaše e-mailová konfigurace správně nastavena, měla by se zobrazit zpráva o úspěšném odeslání.
Jak odesílat HTML e-maily a přílohy v CodeZapalovač
Stejná knihovna pro e-maily dokáže odesílat bohatě formátované zprávy a soubory. Dvě malé změny promění výše uvedený příklad prostého textu v e-mail ve formátu HTML s přílohou.
$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'): informuje knihovnu, že tělo zprávy obsahuje HTML, takže se tagy, jako jsou nadpisy a odkazy, zobrazují v doručené poště příjemce.
- připojit(): přidá do zprávy soubor z cesty na serveru; před send() jej zavolejte jednou pro každý soubor.
Nezapomeňte, že e-maily ve formátu HTML by měly stále obsahovat alternativu prostého textu a velké přílohy mohou být striktními poštovními servery odmítnuty.

