Hoe u e-mail kunt verzenden met CodeIgniter

E-mail is erg belangrijk in webapplicaties. Wanneer een gebruiker zich aanmeldt, willen we hem of haar misschien een e-mail sturen om zijn of haar e-mailadres te verifiëren en de gebruiker de mogelijkheid te geven om het abonnement te bevestigen. We gebruiken e-mail ook om vergeten wachtwoorden opnieuw in te stellen, facturen en ontvangstbewijzen naar klanten te sturen, etc. CodeIgniter maakt het supergemakkelijk voor ons om e-mails te versturen vanuit onze applicatie met behulp van verschillende opties.

CodeIgniter heeft een ingebouwde e-mailbibliotheek waarmee u kunt werken bij het verzenden van e-mails.

CodeIgniter e-mailconfiguratie

We hebben een centrale plek nodig waar we de e-mailinstellingen kunnen beheren. CodeIgniter wordt niet geleverd met een configuratiebestand voor e-mails, dus we zullen er zelf een moeten maken.

Maak een bestand email.php in de map application/config

Voeg de volgende code toe aan 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
);

HIER,

  • 'protocol' => 'smtp', specificeert het protocol dat u wilt gebruiken bij het verzenden van e-mail. Dit kunnen Gmail smtp-instellingen of smtp-instellingen van uw host zijn
  • 'smtp_host' => 'smtp.example.com', specificeert de smtp-host. Als u bijvoorbeeld Gmail wilt gebruiken, dan zou u zoiets als smtp.gmail.com hebben
  • 'smtp_port' => 465, een open poort op de opgegeven smtp-host die is geconfigureerd voor smtp-mail
  • 'smtp_user' => 'no-reply@example.com', het e-mailadres dat als afzender wordt gebruikt bij het verzenden van e-mails. Dit moet een geldig e-mailadres zijn dat op de server bestaat
  • 'smtp_pass' => '12345!', het wachtwoord voor het opgegeven smtp-gebruikers-e-mailadres
  • 'smtp_crypto' => 'ssl', specificeert de te gebruiken versleutelingsmethode, dwz ssl, tls enz.
  • 'email type' => 'text', stelt het te gebruiken mailtype in. Dit kan platte tekst of HTML zijn, afhankelijk van uw behoeften.
  • 'smtp_timeout' => '4', specificeert de tijd in seconden die moet verstrijken wanneer wordt geprobeerd verbinding te maken met de host voordat er een time-outuitzondering wordt gegenereerd.
  • 'charset' => 'iso-8859-1', definieert de tekenset die moet worden gebruikt bij het verzenden van e-mails.
  • 'word-wrap' => TRUE is ingesteld op TRUE en word-wrap is ingeschakeld. Als deze is ingesteld op FALSE, is tekstomloop niet ingeschakeld

Note: om e-mails te kunnen verzenden, moet u geldige configuratieparameters opgeven. Dummy-parameters kunnen geen e-mails verzenden.

CodeIgniter E-mailweergave

In dit gedeelte maken we de weergave waarmee de e-mail naar de ontvanger wordt verzonden.

Maak een nieuw directory-e-mailadres in de toepassing/weergaven

Maak een nieuw bestand contact.php application/views/email

Voeg de volgende code toe aan 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>

HIER,

  • We hebben een eenvoudig HTML-formulier dat de e-mail, het onderwerp en het bericht accepteert en vervolgens de parameters doorgeeft aan de e-mailroute.

CodeIgniter E-mailcontroller

Laten we nu de controller maken die het verzenden van e-mails zal afhandelen

Maak een nieuw bestand EmailController.php in application/controllers/EmailController.php

Voeg de volgende code toe aan 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());
        }
    }
}

HIER,

  • klasse EmailController extends CI_Controller {…} definieert onze e-mailcontroller die de bovenliggende CodeIgniter-controller uitbreidt.
  • public function __construct() {…} definieert de onderliggende constructor die de ouderconstructormethode aanroept.
  • public function index() {…} definieert de indexmethode die het contactformulier weergeeft
  • functie send() {…} definieert de methode die de e-mail verzendt
    • $this->load->config('email'); laadt de e-mailconfiguratie-instellingen
    • $this->load->library('email'); laadt de e-mailbibliotheek
    • $from = $this->config->item('smtp_user'); haalt de afzender-id op uit het e-mailconfiguratiebestand dat we hebben gedefinieerd.
    • $to = $dit->invoer->post('naar'); haalt de to-waarde uit het ingediende formulier
    • $subject = $this->input->post('subject'); stelt het e-mailadres in dat aan het formulier is onderworpen
    • $message = $this->input->post('message'); stelt het e-mailbericht in van het formulier
    • $this->email->set_newline(“\r\n”); definieert de nieuwe regeltekens voor e-mails
    • $this->email->from($from); stelt het e-mailadres van de afzender in
    • $this->email->to($to); stelt het e-mailadres van de ontvanger in
    • $this->email->subject($subject); stelt het e-mailonderwerp in
    • $this->email->message($message); stelt het e-mailbericht in
    • als ($this->email->send()) {…} probeert de e-mail te verzenden. Als de e-mail succesvol is verzonden, dan verschijnt het bericht Uw e-mail is succesvol verzonden, anders wordt er foutinformatie afgedrukt over wat er mis kan zijn gegaan.

Laten we nu de e-mailroutes definiëren

E-mailroutes

Voeg de volgende routes toe aan application/config/routes.php

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

We kunnen nu het contactformulier in de webbrowser laden

Laten we de ingebouwde PHP-server starten

Open de terminal/opdrachtregel en blader naar de hoofdmap van uw toepassing. In mijn geval bevindt de root zich in station C:\Sites\ci-app

cd C:\Sites\ci-app

start de server met de volgende opdracht

php -S localhost:3000

Laad de volgende URL in uw webbrowser: http://localhost:3000/send-email

U zou het volgende formulier moeten kunnen zien

E-mailroutes

Voer het e-mailadres van de ontvanger, het onderwerp en het e-mailbericht in en klik op E-mail verzenden. Als uw e-mailconfiguraties correct zijn ingesteld, zou u het succesvolle bericht moeten kunnen zien.

Samenvatting

De ingebouwde e-mailbibliotheek maakt het voor ons gemakkelijk om e-mails te versturen met minimale code. De bibliotheek is ook erg flexibel in de zin dat u deze kunt configureren om aan uw vereisten te voldoen.