Hur man skickar e-post med CodeIgniter

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

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

CodeIgniter e-postkonfiguration

Vi behöver ha en central plats där vi kan hantera e-postinställningarna. CodeIgniter kommer inte med en konfigurationsfil för e-post 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 smtp-inställningar för Gmail eller smtp-inställningar från din värd
  • 'smtp_host' => 'smtp.example.com', specificerar smtp-värden. Om du till exempel vill använda Gmail skulle du ha något som smtp.gmail.com
  • 'smtp_port' => 465, en öppen port på den angivna smtp-värden som har konfigurerats för smtp-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.
  • 'email type' => '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 är inställt på TRUE och därefter aktiveras word-wrap. Om den är inställd på FALSE, är ordlindning 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 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('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>

HÄR,

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

CodeIgniter e-postkontroll

Låt oss nu skapa kontrollenheten som kommer att 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,

  • class EmailController utökar CI_Controller {...} definierar vår e-postkontroller som utökar den överordnade CodeIgniter-kontrollern.
  • 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'); ställer in e-postmeddelandet 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 framgångsrikt skrivs meddelandet Din e-post har skickats, annars skrivs felsökningsinformation ut om vad som kan ha gått fel.

Låt oss nu definiera e-postrutter

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/kommandoraden och bläddra till roten av din applikation. I mitt fall finns roten i 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-post, ämne och e-postmeddelande och klicka sedan på Skicka e-post. Om dina e-postkonfigurationer är korrekt inställda bör du kunna se det framgångsrika meddelandet.

Sammanfattning

Det inbyggda e-postbiblioteket gör det enkelt för oss att skicka e-postmeddelanden med minimal kod. Biblioteket är också mycket flexibelt i den meningen att du kan konfigurera det för att uppfylla dina krav.