Hur man skickar e-post med hjälp av Codeigniter

⚡ Smart sammanfattning

CodeIgniter Sending Email förlitar sig på ramverkets inbyggda e-postbibliotek för att leverera meddelanden via SMTP eller den lokala e-postservern. Det här exemplet skapar en e-postkonfigurationsfil, en kontaktformulärsvy och en kontrollant som läser formulärindata och skickar meddelandet.

  • 📧 Inbyggt bibliotek: E-postbiblioteket skickar e-post med minimal kod och stöder SMTP-, Sendmail- och PHP-e-posttransporter.
  • ⚙️ Central konfiguration: En anpassad email.php-konfigurationsfil lagrar protokoll, värd, port, användare och lösenord så att inställningarna finns på ett ställe.
  • 🔓 SMTP-inloggningsuppgifter: Giltiga värden för smtp_host, smtp_user och smtp_pass krävs; dummyparametrar kommer aldrig att leverera ett riktigt e-postmeddelande.
  • 📝 Blankett till kontrollanten: En kontaktvy samlar in mottagaren, ämnet och meddelandet, som kontrollanten läser med indatabiblioteket.
  • 📤 Skicka flöde: Styrenheten anger from, to, subject och message, anropar sedan send() och skriver ut en felsökningsrapport vid fel.
  • 📎 HTML och filer: Genom att byta mailtype till html och anropa attach() kan du skicka formaterade meddelanden med bifogade filer.
  • 🤖 AI Assist: AI-verktyg kan generera e-postkontrollanten, validera formulärinmatning och diagnostisera SMTP-anslutningsfel från felsökarens utdata.

CodeIgniter skickar e-post

E-post är mycket viktigt i webbapplikationer. När en användare registrerar sig kan vi vilja skicka ett e-postmeddelande för att verifiera deras e-postadress och låta användaren bekräfta prenumerationen. Vi använder även e-post för att återställa glömda lösenord och skicka fakturor och kvitton till kunder. CodeIgniter gör det superenkelt för oss att skicka e-postmeddelanden från vår applikation med hjälp av en mängd olika alternativ.

CodeIgniter har ett inbyggt e-postbibliotek som vi kan arbeta med när vi skickar e-post.

CodeKonfiguration av Igniter-e-post

Vi behöver ha en central plats där vi kan hantera e-postinställningarna. CodeIgniter levereras inte med en konfigurationsfil för e-postmeddelanden, så vi måste skapa en själva.

Skapa en fil email.php i katalogapplikationen/config

Lägg till följande kod till 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
);

HÄR,

  • 'protocol' => 'smtp', anger vilket protokoll du vill använda när du skickar e-post. Detta kan vara Gmail SMTP-inställningar eller SMTP-inställningar från din värd
  • 'smtp_host' => 'smtp.example.com' anger SMTP-värden. Om du till exempel vill använda Gmail då skulle du ha något i stil med smtp.gmail.com
  • 'smtp_port' => 465, en öppen port på den angivna SMTP-värden som har konfigurerats för SMTP-e-post
  • 'smtp_user' => 'no-reply@example.com', e-postadressen som kommer att användas som avsändare när du skickar e-post. Detta bör vara en giltig e-postadress som finns på servern
  • 'smtp_pass' => '12345!', lösenordet till den angivna SMTP-användarens e-postadress
  • 'smtp_crypto' => 'ssl', anger vilken krypteringsmetod som ska användas, dvs. ssl, tls etc.
  • 'mailtype' => 'text', anger vilken e-posttyp som ska användas. Detta kan vara antingen vanlig text eller HTML beroende på dina behov.
  • 'smtp_timeout' => '4', anger tiden i sekunder som ska förflyta när man försöker ansluta till värden innan ett timeout-undantag kastas.
  • 'charset' => 'iso-8859-1', definierar teckenuppsättningen som ska användas när du skickar e-post.
  • 'wordwrap' => TRUE, om satt till TRUE är ordbrytning aktiverad. Om det är satt till FALSE är ordbrytning inte aktiverad

Anmärkningar: för att skicka e-postmeddelanden till jobbet bör du ange giltiga konfigurationsparametrar. Dummy-parametrar kommer inte att kunna skicka e-post.

CodeIgniter e-postvy

I det här avsnittet skapar vi vyn som skickar e-postmeddelandet till mottagaren.

Skapa en ny katalogmail i applikation/vyer

Skapa en ny fil contact.php i application/views/email

Lägg till följande kod till 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>

HÄR,

  • Vi har ett enkelt HTML-formulär som accepterar e-postadress, ämne och meddelande och sedan skickar parametrarna till e-postrutten.

CodeIgniter e-postkontrollant

Låt oss nu skapa kontrollanten som ska hantera att skicka e-post.

Skapa en ny fil EmailController.php i application/controllers/EmailController.php

Lägg till följande kod till 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());
}
}
}

HÄR,

  • klassen EmailController extends CI_Controller {…} definierar vår e-postkontroller som utökar föräldern CodeTändningskontroll.
  • public funktion __construct() {...} definierar den underordnade konstruktorn som anropar den överordnade konstruktormetoden.
  • public function index() {...} definierar indexmetoden som visar kontaktformuläret
  • function send() {...} definierar metoden som skickar e-postmeddelandet
    • $this->load->config('e-post'); laddar e-postkonfigurationsinställningarna
    • $this->load->library('e-post'); laddar e-postbiblioteket
    • $from = $this->config->item('smtp_user'); hämtar avsändar-id från e-postkonfigurationsfilen som vi definierade.
    • $to = $this->input->post('to'); får värdet från det inskickade formuläret
    • $subject = $this->input->post('subject'); anger e-postens ämne från formuläret
    • $message = $this->input->post('meddelande'); ställer in e-postmeddelandet från formuläret
    • $this->email->set_newline(“\r\n”); definierar de nya radtecknen för e-postmeddelanden
    • $this->email->from($from); ställer in avsändarens e-postadress
    • $this->email->to($to); ställer in mottagarens e-postadress
    • $this->email->subject($subject); ställer in e-postämnet
    • $this->email->message($message); ställer in e-postmeddelandet
    • om ($this->email->send()) {…} försöker skicka e-postmeddelandet. Om e-postmeddelandet skickas visas meddelandet "Ditt e-postmeddelande har skickats", annars skrivs felsökningsinformation ut om vad som kan ha gått fel.

Låt oss nu definiera e-postrutterna.

E-postrutter

Lägg till följande rutter till application/config/routes.php

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

Vi kan nu ladda kontaktformuläret i webbläsaren.

Låt oss starta den inbyggda PHP-servern.

Öppna terminalen eller kommandoraden och bläddra till rotfilen för ditt program. I mitt fall finns rotfilen på enhet C:\Sites\ci-app

cd C:\Sites\ci-app

Starta servern med följande kommando

php -S localhost:3000

Ladda följande URL i din webbläsare: http://localhost:3000/send-email

Du bör kunna se följande formulär

E-postrutter

Ange mottagarens e-postadress, ämne och e-postmeddelande och klicka sedan på Skicka e-post. Om din e-postkonfiguration är korrekt inställd bör du kunna se meddelandet om att överföringen lyckades.

Hur man skickar HTML-e-postmeddelanden och bilagor i Codeigniter

Samma e-postbibliotek kan skicka meddelanden och filer i rikt formaterade format. Två små ändringar omvandlar exemplet med vanlig text ovan till ett HTML-e-postmeddelande med en bilaga.

$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'): talar om för biblioteket att brödtexten innehåller HTML, så taggar som rubriker och länkar visas i mottagarens inkorg.
  • bifoga(): lägger till en fil från en serversökväg till meddelandet; anropa den en gång för varje fil innan send().

Kom ihåg att HTML-e-postmeddelanden fortfarande bör innehålla ett alternativ till vanlig text, och stora bilagor kan avvisas av strikta e-postservrar.

Vanliga frågor

Localhost har vanligtvis ingen e-postserver, så e-postprotokollet misslyckas i tysthet. Byt protokoll till smtp och ange en riktig SMTP-värd, användare och lösenord, eller använd en tjänst som Mailfälla för lokal testning.

Sätt smtp_host till smtp.gmail.com, smtp_port till 465 med ssl och smtp_user till din Gmail adress. Använd en Google Applösenord istället för ditt vanliga lösenord, eftersom Gmail blockerar grundläggande lösenordsinloggningar.

E-postprotokollet använder PHP:s funktion mail(), sendmail anropar serverns lokala binärfil och smtp ansluter till en extern e-postserver med inloggningsuppgifter. SMTP är det mest tillförlitliga protokollet för leverans och autentisering.

Ja. AI kan bygga kontrollenheten, lägga till formulärvalidering för mottagaren och ämnet, och inkludera hantering av lyckade och fel. RevVisa SMTP-inställningarna och lägg till hastighetsbegränsning innan du använder den i produktion.

Ja. Klistra in utdata från print_debugger(), så kan AI tolka SMTP-handskakningsfel, autentiseringsfel eller portproblem och sedan rekommendera korrigerade värd-, port- eller krypteringsvärden att prova.

Sammanfatta detta inlägg med: