Come inviare e-mail utilizzando CodeIgniter

L'email è molto importante nelle applicazioni web. Quando un utente si registra, potremmo volergli inviare un'email per verificare il suo indirizzo email e consentirgli di confermare l'iscrizione. Utilizziamo l'email anche per reimpostare le password dimenticate, inviare fatture e ricevute ai clienti, ecc. CodeIgniter ci semplifica l'invio di email dalla nostra applicazione utilizzando una varietà di opzioni.

CodeIgniter ha una libreria di posta elettronica integrata con cui possiamo lavorare quando inviamo email.

Configurazione e-mail di CodeIgniter

Abbiamo bisogno di un posto centrale dove poter gestire le impostazioni email. CodeIgniter non è dotato di un file di configurazione per le email, quindi dovremo crearne uno noi stessi.

Creare un file email.php nella directory application/config

Aggiungere il seguente codice a 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
);

QUI,

  • 'protocol' => 'smtp', specifica il protocollo che vuoi usare quando invii email. Potrebbero essere le impostazioni smtp di Gmail o le impostazioni smtp del tuo host
  • 'smtp_host' => 'smtp.example.com', specifica l'host smtp. Ad esempio, se vuoi usare Gmail, dovresti avere qualcosa come smtp.gmail.com
  • 'smtp_port' => 465, una porta aperta sull'host smtp specificato che è stata configurata per la posta smtp
  • 'smtp_user' => 'no-reply@example.com', l'indirizzo email che verrà utilizzato come mittente quando si inviano email. Dovrebbe essere un indirizzo email valido presente sul server
  • 'smtp_pass' => '12345!', la password per l'indirizzo email dell'utente smtp specificato
  • 'smtp_crypto' => 'ssl', specifica il metodo di crittografia da utilizzare, ovvero ssl, tls ecc.
  • 'email type' => 'text', imposta il tipo di email da usare. Può essere testo normale o HTML, a seconda delle tue esigenze.
  • 'smtp_timeout' => '4', specifica il tempo in secondi che dovrebbe trascorrere quando si tenta di connettersi all'host prima che venga generata un'eccezione di timeout.
  • 'charset' => 'iso-8859-1', definisce il set di caratteri da utilizzare durante l'invio di e-mail.
  • 'wordwrap' => TRUE è impostato su TRUE quindi il ritorno a capo è abilitato. Se è impostato su FALSE, il ritorno a capo automatico non è abilitato

Note:: per far funzionare l'invio di email, dovresti fornire parametri di configurazione validi. I parametri fittizi non saranno in grado di inviare email.

Visualizzazione e-mail di CodeIgniter

In questa sezione creeremo la vista che invierà l'email al destinatario.

Crea una nuova directory email in applicazione/viste

Crea un nuovo file contact.php application/views/email

Aggiungere il seguente codice a 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>

QUI,

  • Abbiamo un modulo HTML di base che accetta l'email, l'oggetto e il messaggio, quindi passa i parametri al percorso dell'email.

Controller di posta elettronica CodeIgniter

Creiamo ora il controller che gestirà l'invio delle email

Crea un nuovo file EmailController.php in application/controllers/EmailController.php

Aggiungere il seguente codice a 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());
        }
    }
}

QUI,

  • la classe EmailController estende CI_Controller {…} definisce il nostro controller di posta elettronica che espande il controller CodeIgniter padre.
  • la funzione pubblica __construct() {…} definisce il costruttore figlio che chiama il metodo del costruttore genitore.
  • public function index() {…} definisce il metodo di indice che visualizza il modulo di contatto
  • la funzione send() {…} definisce il metodo che invia l'email
    • $this->load->config('email'); carica le impostazioni di configurazione dell'email
    • $this->load->library('email'); carica la libreria email
    • $from = $this->config->item('smtp_user'); ottiene l'ID del mittente dal file di configurazione email che abbiamo definito.
    • $a = $questo->input->post('a'); ottiene il valore dal modulo inviato
    • $subject = $this->input->post('subject'); imposta l'email come oggetto del modulo
    • $message = $this->input->post('message'); imposta il messaggio e-mail dal modulo
    • $this->email->set_newline(“\r\n”); definisce i caratteri di nuova riga per le email
    • $this->email->from($from); imposta l'indirizzo email del mittente
    • $this->email->to($to); imposta l'indirizzo email del destinatario
    • $this->email->subject($subject); imposta l'oggetto dell'email
    • $this->email->message($message); imposta il messaggio email
    • if ($this->email->send()) {…} tenta di inviare l'email. Se l'email viene inviata correttamente, viene visualizzato il messaggio Your Email has successfully sent else debug information su cosa potrebbe essere andato storto.

Definiamo ora i percorsi di posta elettronica

Percorsi di posta elettronica

Aggiungere i seguenti percorsi a application/config/routes.php

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

Ora possiamo caricare il modulo dei contatti nel browser web

Avviamo il server PHP integrato

Apri il terminale/riga di comando e vai alla radice della tua applicazione. Nel mio caso, la radice si trova nell'unità C:\Sites\ci-app

cd C:\Sites\ci-app

avviare il server utilizzando il seguente comando

php -S localhost:3000

Carica il seguente URL nel tuo browser web: http://localhost:3000/send-email

Dovresti essere in grado di vedere il seguente modulo

Percorsi di posta elettronica

Inserisci l'email del destinatario, l'oggetto e il messaggio email, quindi fai clic su Invia email. Se le tue configurazioni email sono impostate correttamente, dovresti essere in grado di vedere il messaggio di successo.

Sintesi

La libreria email integrata ci consente di inviare email con un codice minimo. La libreria è anche molto flessibile, nel senso che puoi configurarla per soddisfare i tuoi requisiti.