Kako poslati e-poštu pomoću CodeIgnitera

E-pošta je vrlo važna u web aplikacijama. Kada se korisnik prijavi, možda ćemo mu htjeti poslati e-poštu da potvrdimo njegovu adresu e-pošte i omogućimo korisniku da potvrdi pretplatu. Također koristimo e-poštu za poništavanje zaboravljenih lozinki, slanje faktura i potvrda kupcima itd. CodeIgniter nam izuzetno olakšava slanje e-pošte iz naše aplikacije pomoću raznih opcija.

CodeIgniter ima ugrađenu biblioteku e-pošte s kojom možemo raditi prilikom slanja e-pošte.

CodeIgniter konfiguracija e-pošte

Moramo imati središnje mjesto gdje možemo upravljati postavkama e-pošte. CodeIgniter ne dolazi s konfiguracijskom datotekom za e-poštu pa ćemo je morati sami izraditi.

Napravite datoteku email.php u direktoriju application/config

Dodajte sljedeći kod u 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
);

OVDJE,

  • 'protocol' => 'smtp', specificira protokol koji želite koristiti prilikom slanja e-pošte. To mogu biti SMTP postavke za Gmail ili SMTP postavke vašeg hosta
  • 'smtp_host' => 'smtp.example.com', navodi smtp host. Na primjer, ako želite koristiti Gmail tada biste imali nešto poput smtp.gmail.com
  • 'smtp_port' => 465, otvoreni port na navedenom smtp hostu koji je konfiguriran za smtp poštu
  • 'smtp_user' => 'no-reply@example.com', adresa e-pošte koja će se koristiti kao pošiljatelj prilikom slanja e-pošte. Ovo bi trebala biti važeća adresa e-pošte koja postoji na poslužitelju
  • 'smtp_pass' => '12345!', lozinka za navedeni smtp korisnički email
  • 'smtp_crypto' => 'ssl', navodi metodu šifriranja koja će se koristiti, npr. ssl, tls itd.
  • 'email type' => 'text', postavlja vrstu pošte koja će se koristiti. To može biti običan tekst ili HTML, ovisno o vašim potrebama.
  • 'smtp_timeout' => '4', specificira vrijeme u sekundama koje bi trebalo proteći prilikom pokušaja spajanja na glavno računalo prije nego što se izbaci iznimka vremenskog ograničenja.
  • 'charset' => 'iso-8859-1', definira skup znakova koji će se koristiti prilikom slanja e-pošte.
  • 'wordwrap' => TRUE je postavljeno na TRUE tada je omogućeno prelamanje riječi. Ako je postavljeno na FALSE, prijelom riječi nije omogućen

bilješke: za slanje e-pošte na posao, trebali biste dati valjane konfiguracijske parametre. Dummy parametri neće moći slati e-poštu.

Prikaz e-pošte CodeIgniter

U ovom odjeljku izradit ćemo prikaz koji će poslati e-poštu primatelju.

Stvorite novi imenik e-pošte u aplikaciji/prikazima

Napravite novu datoteku contact.php application/views/email

Dodajte sljedeći kod u 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>

OVDJE,

  • Imamo osnovni HTML obrazac koji prihvaća e-poštu, predmet i poruku, a zatim prosljeđuje parametre na rutu e-pošte.

Kontroler e-pošte CodeIgniter

Kreirajmo sada kontroler koji će upravljati slanjem e-pošte

Napravite novu datoteku EmailController.php u application/controllers/EmailController.php

Dodajte sljedeći kod u 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());
        }
    }
}

OVDJE,

  • class EmailController extends CI_Controller {…} definira naš kontroler e-pošte koji proširuje nadređeni CodeIgniter kontroler.
  • javna funkcija __construct() {…} definira podređeni konstruktor koji poziva roditeljsku metodu konstruktora.
  • javna funkcija index() {…} definira metodu indeksiranja koja prikazuje obrazac za kontakt
  • funkcija send() {…} definira metodu koja šalje e-poštu
    • $this->load->config('email'); učitava postavke konfiguracije e-pošte
    • $this->load->library('email'); učitava biblioteku e-pošte
    • $from = $this->config->item('smtp_user'); dobiva ID pošiljatelja iz konfiguracijske datoteke e-pošte koju smo definirali.
    • $to = $this->input->post('to'); dobiva vrijednost do iz poslanog obrasca
    • $subject = $this->input->post('subject'); postavlja predmet e-pošte iz obrasca
    • $message = $this->input->post('message'); postavlja poruku e-pošte iz obrasca
    • $this->email->set_newline(“\r\n”); definira znakove novog retka za e-poštu
    • $this->e-mail->from($from); postavlja adresu e-pošte pošiljatelja
    • $this->e-mail->to($to); postavlja adresu e-pošte primatelja
    • $this->e-mail->subject($subject); postavlja predmet e-pošte
    • $this->e-mail->message($message); postavlja poruku e-pošte
    • ako ($this->email->send()) {…} pokuša poslati e-poštu. Ako je e-pošta uspješno poslana, poruka Vaša e-pošta je uspješno poslana inače se ispisuje informacija o otklanjanju pogrešaka na onome što je možda pošlo po zlu.

Definirajmo sada rute e-pošte

Rute e-pošte

Dodajte sljedeće rute u application/config/routes.php

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

Sada možemo učitati obrazac za kontakte u web pregledniku

Pokrenimo ugrađeni PHP poslužitelj

Otvorite terminal/naredbeni redak i potražite korijen svoje aplikacije. U mom slučaju, root se nalazi u disku C:\Sites\ci-app

cd C:\Sites\ci-app

pokrenite poslužitelj pomoću sljedeće naredbe

php -S localhost:3000

Učitajte sljedeći URL u svoj web preglednik: http://localhost:3000/send-email

Trebali biste moći vidjeti sljedeći obrazac

Rute e-pošte

Unesite e-poštu primatelja, predmet i poruku e-pošte, a zatim kliknite na Pošalji e-poštu. Ako su vaše konfiguracije e-pošte ispravno postavljene, trebali biste moći vidjeti uspješnu poruku.

rezime

Ugrađena biblioteka e-pošte olakšava nam slanje e-pošte s minimalnim kodom. Knjižnica je također vrlo fleksibilna u smislu da je možete konfigurirati kako bi zadovoljila vaše zahtjeve.