Home / Programmazione / PHP / Inviare email con CodeIgniter
Mattepuffo

Inviare email con CodeIgniter

Inviare email con CodeIgniter

CodeIgniter è uno dei framewrok PHP più utilizzati; io lo stesso su due progetti e mi ci trovo bene.

Ne ho già parlato in altri articoli, e oggi vediamo come sia semplice inviare email.

Supponiamo di voler inviare dopo che l'utente ha inviato un form; nel caso specifico l'utente dovrà inserire la propria email con la quale si è registrato in modo da potergli reinviare la password (che si è dimenticato)

<div id="login">
    <?php echo validation_errors('<p class="error">', '</p>'); ?>
    <?php echo form_open('pwdrecovery/dorecover'); ?>
    <dl>
        <dt><label for="cl_email">Email:</label></dt>
        <dd><input type="text" name="cl_email" value="<?php echo set_value('cl_email'); ?>" autofocus /></dd>
    </dl>
    <dl>
        <dd><input type="submit" value="Send" name="submit" /></dd>
    </dl>
</form>
</div>

Viene richiamata la funzione doRecover del controller PwdRecovery:

public function doRecover() {
        $this->load->library('form_validation');
        $this->form_validation->set_rules('cl_email', 'Email', 'required|trim|valid_email');
        if ($this->form_validation->run() == FALSE) {
            $data = array();
            $data['title'] = 'Login';
            $this->load->view('header', $data);
            $this->load->view('pwd_recovery_view', $data);
            $this->load->view('footer');
        } else {
            $this->load->model('email_model');
            $this->email_model->sendEmail($this->input->post('cl_email'), 'Password', 'La tua nuova password è NUOVA_PASSWORD');
            redirect('home');
        }
    }

Carico la libreria form_validation per validare il form (è obbligatorio mettere una email ben formata).

 

Se la validazione va a buon fine richiamo il model creato per l'invio di email e la sua funzione sendEmail.

Ecco il model:

<?php

class Email_model extends CI_Model {

    public function sendEmail($to, $subject, $message) {
        $this->load->library('email');
        $this->email->from('sito@sito.com', 'Sito.com');
        $this->email->to($to);
        $this->email->subject($subject);
        $this->email->message($message);
        $this->email->send();
    }

}

Usando un model (o anche una libreria propria) evitiamo di dovere riscrivere ogni volta tutte queste righe.

Alla funzione passiamo i classici parametri

  • indirizzo
  • soggetto della email
  • messaggio

Si potrebbe migliorare la funzione trasformando il parametro $to in array, in modo da poter eventualmente inviare la stessa email a più destinatari.

Prima di tutto carichiamo la libreria per gestire le email.

Poi impostiamo le varie opzioni che non penso abbiano bisogno di molti commenti.