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.

  • ???? Vestavěná knihovna: Knihovna pro e-maily odesílá poštu s minimálním kódem a podporuje transport pošty přes SMTP, Sendmail a PHP.
  • ⚙️ Centrální konfigurace: Vlastní konfigurační soubor email.php ukládá protokol, hostitele, port, uživatele a heslo, takže nastavení zůstávají na jednom místě.
  • 🔓 SMTP přihlašovací údaje: Jsou povinné platné hodnoty smtp_host, smtp_user a smtp_pass; fiktivní parametry nikdy nedoručí skutečný e-mail.
  • ???? Formulář pro kontrolora: Pohled kontaktu shromažďuje příjemce, předmět a zprávu, které kontroler načte pomocí vstupní knihovny.
  • 📤 Odeslat tok: Kontroler nastaví odesílatele, komu, předmět a zprávu, poté zavolá funkci send() a v případě selhání vypíše zprávu o debuggeru.
  • 📎 HTML a soubory: Přepnutím mailtype na html a zavoláním attach() můžete odesílat formátované zprávy s přílohami souborů.
  • 🤖 AI Assist: Nástroje umělé inteligence dokáží generovat e-mailový kontroler, ověřovat vstupy z formuláře a diagnostikovat chyby připojení SMTP z výstupu ladicího programu.

CodeZapalovač odesílá e-mail

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

E-mailové trasy

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.

Nejčastější dotazy

Localhost obvykle nemá poštovní server, takže poštovní protokol selže tiše. Přepněte protokol na smtp a zadejte skutečného SMTP hostitele, uživatele a heslo, nebo použijte službu, jako například Mailpast pro lokální testování.

Nastavte smtp_host na smtp.gmail.com, smtp_port na 465 s SSL a smtp_user na váš Gmail adresu. Použijte Google Heslo aplikace namísto běžného hesla, protože Gmail blokuje základní přihlášení heslem.

Poštovní protokol používá funkci mail() v PHP, sendmail volá lokální binární soubor serveru a smtp se připojuje k externímu poštovnímu serveru s přihlašovacími údaji. SMTP je nejspolehlivější pro doručování a ověřování.

Ano. Umělá inteligence dokáže vytvořit kontroler, přidat ověření formuláře pro příjemce a předmět a zahrnout ošetření úspěšných a chybových hlášení. RevPřed použitím v produkčním prostředí si prohlédněte nastavení SMTP a přidejte omezení rychlosti.

Ano. Vložte výstup funkce print_debugger() a umělá inteligence dokáže interpretovat selhání handshake protokolu SMTP, chyby ověřování nebo problémy s portem a poté doporučit opravené hodnoty hostitele, portu nebo šifrování, které je třeba vyzkoušet.

Shrňte tento příspěvek takto: