Sådan sender du e-mail ved hjælp af CodeIgniter

E-mail er meget vigtig i webapplikationer. Når en bruger tilmelder sig, vil vi måske sende dem en e-mail for at bekræfte deres e-mailadresse og tillade brugeren at bekræfte abonnementet. Vi bruger også e-mail til at nulstille glemte adgangskoder, sende faktura og kvitteringer til kunder osv. CodeIgniter gør det super nemt for os at sende e-mails fra vores applikation ved hjælp af en række muligheder.

CodeIgniter har et indbygget e-mail-bibliotek, som vi kan arbejde med, når vi sender e-mails.

CodeIgniter e-mail-konfiguration

Vi skal have et centralt sted, hvor vi kan administrere e-mail-indstillingerne. CodeIgniter kommer ikke med en konfigurationsfil til e-mails, så vi bliver nødt til at oprette en selv.

Opret en fil email.php i mappeapplikationen/config

Tilføj følgende kode til 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
);

HER,

  • 'protocol' => 'smtp', angiver den protokol, du vil bruge, når du sender e-mail. Dette kan være Gmail smtp-indstillinger eller smtp-indstillinger fra din vært
  • 'smtp_host' => 'smtp.example.com', specificerer smtp-værten. For eksempel, hvis du vil bruge Gmail, vil du have noget som smtp.gmail.com
  • 'smtp_port' => 465, en åben port på den angivne smtp-vært, der er konfigureret til smtp-mail
  • 'smtp_user' => 'no-reply@example.com', den e-mailadresse, der vil blive brugt som afsender ved afsendelse af e-mails. Dette bør være en gyldig e-mailadresse, der findes på serveren
  • 'smtp_pass' => '12345!', adgangskoden til den angivne smtp-bruger-e-mail
  • 'smtp_crypto' => 'ssl', angiver den krypteringsmetode, der skal bruges, dvs. ssl, tls osv.
  • 'email type' => 'tekst', indstiller den mailtype, der skal bruges. Dette kan være enten almindelig tekst eller HTML afhængigt af dine behov.
  • 'smtp_timeout' => '4', specificerer den tid i sekunder, der skal gå, når du forsøger at oprette forbindelse til værten, før en timeout-undtagelse udløses.
  • 'charset' => 'iso-8859-1', definerer det tegnsæt, der skal bruges ved afsendelse af e-mails.
  • 'wordwrap' => TRUE er sat til TRUE, hvorefter word-wrap er aktiveret. Hvis den er sat til FALSK, er ordombrydning ikke aktiveret

Bemærk: for at sende e-mails på arbejde, skal du angive gyldige konfigurationsparametre. Dummy-parametre vil ikke være i stand til at sende e-mails.

CodeIgniter e-mailvisning

I dette afsnit vil vi oprette den visning, der sender e-mailen til modtageren.

Opret en ny adressebogs-e-mail i applikation/visninger

Opret en ny fil contact.php application/views/email

Tilføj følgende kode til 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>

HER,

  • Vi har en grundlæggende HTML-formular, der accepterer e-mailen, emnet og meddelelsen og sender derefter parametrene til e-mail-ruten.

CodeIgniter e-mail-controller

Lad os nu oprette den controller, der skal håndtere afsendelse af e-mail

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

Tilføj følgende kode til 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());
        }
    }
}

HER,

  • class EmailController udvider CI_Controller {...} definerer vores e-mail-controller, der udvider den overordnede CodeIgniter-controller.
  • public funktion __construct() {...} definerer den underordnede konstruktør, der kalder den overordnede konstruktørmetode.
  • public function index() {...} definerer indeksmetoden, der viser kontaktformularen
  • funktion send() {...} definerer metoden, der sender e-mailen
    • $this->load->config('e-mail'); indlæser e-mail-konfigurationsindstillingerne
    • $this->load->library('e-mail'); indlæser e-mail-biblioteket
    • $from = $this->config->item('smtp_user'); får afsender-id'et fra e-mail-konfigurationsfilen, som vi har defineret.
    • $to = $this->input->post('to'); får værdien fra den indsendte formular
    • $subject = $this->input->post('emne'); angiver den e-mail, der er genstand for fra formularen
    • $message = $this->input->post('besked'); indstiller e-mail-beskeden fra formularen
    • $this->email->set_newline(“\r\n”); definerer de nye linjetegn for e-mails
    • $this->e-mail->fra($fra); indstiller afsenderens e-mailadresse
    • $this->email->to($to); indstiller modtagerens e-mailadresse
    • $this->email->subject($subject); indstiller e-mail-emnet
    • $this->email->message($message); indstiller e-mail-beskeden
    • hvis ($this->email->send()) {...} forsøger at sende e-mailen. Hvis e-mailen er sendt med succes, er meddelelsen Din e-mail er blevet sendt, ellers udskrives fejlretningsoplysninger om, hvad der kunne være gået galt.

Lad os nu definere e-mail-ruterne

E-mail ruter

Tilføj følgende ruter til application/config/routes.php

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

Vi kan nu indlæse kontaktformularen i webbrowseren

Lad os starte den indbyggede PHP-server

Åbn terminalen/kommandolinjen, og søg til roden af ​​din applikation. I mit tilfælde er roden placeret i drev C:\Sites\ci-app

cd C:\Sites\ci-app

start serveren ved hjælp af følgende kommando

php -S localhost:3000

Indlæs følgende URL i din webbrowser: http://localhost:3000/send-email

Du bør kunne se følgende formular

E-mail ruter

Indtast modtagerens e-mail, emne og e-mail, og klik derefter på Send e-mail. Hvis dine e-mail-konfigurationer er indstillet korrekt, bør du kunne se den vellykkede meddelelse.

Resumé

Det indbyggede e-mail-bibliotek gør det nemt for os at sende e-mails med minimal kode. Biblioteket er også meget fleksibelt i den forstand, at du kan konfigurere det til at opfylde dine krav.