Πώς να στείλετε email χρησιμοποιώντας CodeIgniter

⚡ Έξυπνη Σύνοψη

CodeΤο Igniter Sending Email βασίζεται στην ενσωματωμένη βιβλιοθήκη email του framework για την παράδοση μηνυμάτων μέσω SMTP ή του τοπικού διακομιστή αλληλογραφίας. Αυτό το παράδειγμα δημιουργεί ένα αρχείο διαμόρφωσης email, μια προβολή φόρμας επικοινωνίας και έναν ελεγκτή που διαβάζει την εισαγωγή φόρμας και αποστέλλει το μήνυμα.

  • 📧 Ενσωματωμένη βιβλιοθήκη: Η βιβλιοθήκη ηλεκτρονικού ταχυδρομείου αποστέλλει αλληλογραφία με ελάχιστο κώδικα και υποστηρίζει μεταφορές αλληλογραφίας SMTP, Sendmail και PHP.
  • ⚙️ Κεντρική διαμόρφωση: Ένα προσαρμοσμένο αρχείο ρυθμίσεων email.php αποθηκεύει το πρωτόκολλο, τον κεντρικό υπολογιστή, τη θύρα, τον χρήστη και τον κωδικό πρόσβασης, ώστε οι ρυθμίσεις να παραμένουν σε ένα μέρος.
  • 🔓 Διαπιστευτήρια SMTP: Απαιτούνται έγκυρες τιμές smtp_host, smtp_user και smtp_pass. Οι εικονικές παράμετροι δεν θα παραδώσουν ποτέ ένα πραγματικό μήνυμα ηλεκτρονικού ταχυδρομείου.
  • 📝 Φόρμα προς τον ελεγκτή: Μια προβολή επαφής συλλέγει τον παραλήπτη, το θέμα και το μήνυμα, τα οποία ο ελεγκτής διαβάζει με τη βιβλιοθήκη εισόδου.
  • 📤 Αποστολή ροής: Ο ελεγκτής ορίζει τις συναρτήσεις from, to, subject και message, στη συνέχεια καλεί την send() και εκτυπώνει μια αναφορά εντοπισμού σφαλμάτων σε περίπτωση αποτυχίας.
  • 📎 HTML και Αρχεία: Η αλλαγή του τύπου αλληλογραφίας σε html και η κλήση της συνάρτησης attach() σάς επιτρέπει να στέλνετε μορφοποιημένα μηνύματα με συνημμένα αρχεία.
  • 🤖 AI Assist: Τα εργαλεία τεχνητής νοημοσύνης μπορούν να δημιουργήσουν τον ελεγκτή email, να επικυρώσουν την εισαγωγή φόρμας και να διαγνώσουν σφάλματα σύνδεσης SMTP από την έξοδο του προγράμματος εντοπισμού σφαλμάτων.

CodeΤο Igniter στέλνει email

Το email είναι πολύ σημαντικό στις εφαρμογές ιστού. Όταν ένας χρήστης εγγράφεται, ίσως θελήσουμε να του στείλουμε ένα email για να επαληθεύσουμε τη διεύθυνση email του και να του επιτρέψουμε να επιβεβαιώσει τη συνδρομή. Χρησιμοποιούμε επίσης email για να επαναφέρουμε ξεχασμένους κωδικούς πρόσβασης και να στείλουμε τιμολόγια και αποδείξεις στους πελάτες. CodeΤο Igniter μας διευκολύνει πολύ να στέλνουμε email από την εφαρμογή μας χρησιμοποιώντας μια ποικιλία επιλογών.

CodeΤο Igniter διαθέτει μια ενσωματωμένη βιβλιοθήκη email με την οποία μπορούμε να εργαστούμε κατά την αποστολή email.

CodeΡύθμιση παραμέτρων email του Igniter

Χρειαζόμαστε ένα κεντρικό σημείο όπου μπορούμε να διαχειριζόμαστε τις ρυθμίσεις email. CodeΤο Igniter δεν συνοδεύεται από αρχείο ρυθμίσεων για email, επομένως θα πρέπει να δημιουργήσουμε ένα μόνοι μας.

Δημιουργήστε ένα αρχείο email.php στην εφαρμογή/config καταλόγου

Προσθέστε τον παρακάτω κώδικα στο 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
);

ΕΔΩ,

  • 'protocol' => 'smtp', καθορίζει το πρωτόκολλο που θέλετε να χρησιμοποιήσετε κατά την αποστολή email. Αυτό θα μπορούσε να είναι Gmail Ρυθμίσεις SMTP ή ρυθμίσεις SMTP από τον κεντρικό υπολογιστή σας
  • 'smtp_host' => 'smtp.example.com', καθορίζει τον κεντρικό υπολογιστή SMTP. Για παράδειγμα, αν θέλετε να χρησιμοποιήσετε Gmail τότε θα έχετε κάτι σαν smtp.gmail.com
  • 'smtp_port' => 465, μια ανοιχτή θύρα στον καθορισμένο κεντρικό υπολογιστή SMTP που έχει ρυθμιστεί για αλληλογραφία SMTP
  • 'smtp_user' => 'no-reply@example.com', η διεύθυνση email που θα χρησιμοποιηθεί ως αποστολέας κατά την αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου. Αυτή θα πρέπει να είναι μια έγκυρη διεύθυνση email που υπάρχει στον διακομιστή
  • 'smtp_pass' => '12345!', ο κωδικός πρόσβασης για την καθορισμένη διεύθυνση email χρήστη SMTP
  • 'smtp_crypto' => 'ssl', καθορίζει τη μέθοδο κρυπτογράφησης που θα χρησιμοποιηθεί, π.χ. ssl, tls κ.λπ.
  • 'mailtype' => 'κείμενο', ορίζει τον τύπο αλληλογραφίας που θα χρησιμοποιηθεί. Αυτός μπορεί να είναι είτε απλό κείμενο είτε HTML ανάλογα με τις ανάγκες σας.
  • 'smtp_timeout' => '4', καθορίζει το χρόνο σε δευτερόλεπτα που πρέπει να μεσολαβήσει κατά την προσπάθεια σύνδεσης με τον κεντρικό υπολογιστή πριν από τη δημιουργία εξαίρεσης χρονικού ορίου.
  • 'charset' => 'iso-8859-1', ορίζει το σύνολο χαρακτήρων που θα χρησιμοποιείται κατά την αποστολή email.
  • 'wordwrap' => TRUE, εάν οριστεί σε TRUE, τότε η αναδίπλωση λέξεων είναι ενεργοποιημένη. Εάν οριστεί σε FALSE, τότε η αναδίπλωση λέξεων δεν είναι ενεργοποιημένη

Σημείωση: για την αποστολή email στην εργασία, θα πρέπει να παρέχετε έγκυρες παραμέτρους διαμόρφωσης. Οι εικονικές παράμετροι δεν θα μπορούν να στείλουν μηνύματα ηλεκτρονικού ταχυδρομείου.

CodeΠροβολή email του Igniter

Σε αυτήν την ενότητα, θα δημιουργήσουμε την προβολή που θα στείλει το email στον παραλήπτη.

Δημιουργήστε ένα νέο email καταλόγου σε εφαρμογή/προβολές

Δημιουργήστε ένα νέο αρχείο contact.php στο application/views/email

Προσθέστε τον ακόλουθο κώδικα στο 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(0)?>" 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>

ΕΔΩ,

  • Έχουμε μια βασική φόρμα HTML που δέχεται το email, το θέμα και το μήνυμα και, στη συνέχεια, μεταβιβάζει τις παραμέτρους στη διαδρομή email.

CodeΕλεγκτής email Igniter

Ας δημιουργήσουμε τώρα τον ελεγκτή που θα χειρίζεται την αποστολή email.

Δημιουργήστε ένα νέο αρχείο EmailController.php στο application/controllers/EmailController.php

Προσθέστε τον ακόλουθο κώδικα στο 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());
}
}
}

ΕΔΩ,

  • Η κλάση EmailController επεκτείνει το CI_Controller {…} ορίζει τον ελεγκτή email μας που επεκτείνει το γονικό στοιχείο. CodeΕλεγκτής ανάφλεξης.
  • Η δημόσια συνάρτηση __construct() {…} ορίζει τον θυγατρικό κατασκευαστή που καλεί τη γονική μέθοδο κατασκευής.
  • δημόσια συνάρτηση index() {…} ορίζει τη μέθοδο ευρετηρίου που εμφανίζει τη φόρμα επικοινωνίας
  • Η συνάρτηση send() {…} ορίζει τη μέθοδο που στέλνει το email
    • $this->load->config('email'); φορτώνει τις ρυθμίσεις διαμόρφωσης email
    • $this->load->library('email'); φορτώνει τη βιβλιοθήκη email
    • $from = $this->config->item('smtp_user'); παίρνει το αναγνωριστικό αποστολέα από το αρχείο διαμόρφωσης email που ορίσαμε.
    • $to = $this->input->post('to'); παίρνει την τιμή to από την υποβληθείσα φόρμα
    • $subject = $this->input->post('θέμα'); ορίζει το θέμα του email από τη φόρμα
    • $message = $this->input->post('message'); ορίζει το μήνυμα email από τη φόρμα
    • $this->email->set_newline(“\r\n”); ορίζει τους νέους χαρακτήρες γραμμής για τα email
    • $this->email->from($from); ορίζει τη διεύθυνση email του αποστολέα
    • $this->email->to($to); ορίζει τη διεύθυνση email του παραλήπτη
    • $this->email->subject($subject); ορίζει το θέμα του email
    • $this->email->message($message); ορίζει το μήνυμα email
    • αν ($this->email->send()) {…} επιχειρήσει να στείλει το email. Εάν το email αποσταλεί με επιτυχία, τότε εμφανίζεται το μήνυμα "Το email σας στάλθηκε με επιτυχία", διαφορετικά εκτυπώνονται πληροφορίες εντοπισμού σφαλμάτων σχετικά με το τι μπορεί να πήγε στραβά.

Ας ορίσουμε τώρα τις διαδρομές ηλεκτρονικού ταχυδρομείου.

Διαδρομές email

Προσθέστε τις ακόλουθες διαδρομές στο application/config/routes.php

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

Μπορούμε τώρα να φορτώσουμε τη φόρμα επικοινωνίας στο πρόγραμμα περιήγησης ιστού.

Ας ξεκινήσουμε τον ενσωματωμένο διακομιστή PHP.

Ανοίξτε το τερματικό ή τη γραμμή εντολών και μεταβείτε στη ρίζα της εφαρμογής σας. Στην περίπτωσή μου, η ρίζα βρίσκεται στη μονάδα δίσκου C:\Sites\ci-app.

cd C:\Sites\ci-app

Ξεκινήστε τον διακομιστή χρησιμοποιώντας την ακόλουθη εντολή

php -S localhost:3000

Φορτώστε τα ακόλουθα URL στο πρόγραμμα περιήγησής σας στο διαδίκτυο: http://localhost:3000/send-email

Θα πρέπει να μπορείτε να δείτε την παρακάτω φόρμα

Διαδρομές email

Εισαγάγετε το email του παραλήπτη, το θέμα και το μήνυμα email και, στη συνέχεια, κάντε κλικ στην επιλογή Αποστολή email. Εάν η ρύθμιση παραμέτρων email σας έχει ρυθμιστεί σωστά, τότε θα πρέπει να μπορείτε να δείτε το μήνυμα επιτυχίας.

Πώς να στείλετε μηνύματα ηλεκτρονικού ταχυδρομείου και συνημμένα HTML σε CodeIgniter

Η ίδια βιβλιοθήκη ηλεκτρονικού ταχυδρομείου μπορεί να στείλει μηνύματα και αρχεία με πλούσια μορφοποίηση. Δύο μικρές αλλαγές μετατρέπουν το παραπάνω παράδειγμα απλού κειμένου σε ένα μήνυμα ηλεκτρονικού ταχυδρομείου HTML με συνημμένο.

$this->email->set_mailtype('html');
$this->email->message('<h3>Welcome</h3><p>Thanks for joining us.</p>');
$this->email->attach('/path/to/report.pdf');
  • set_mailtype('html'): ενημερώνει τη βιβλιοθήκη ότι το σώμα περιέχει HTML, επομένως ετικέτες όπως επικεφαλίδες και σύνδεσμοι εμφανίζονται στα εισερχόμενα του παραλήπτη.
  • συνδέω(): προσθέτει ένα αρχείο από μια διαδρομή διακομιστή στο μήνυμα· καλέστε το μία φορά για κάθε αρχείο πριν από την send().

Να θυμάστε ότι τα μηνύματα ηλεκτρονικού ταχυδρομείου HTML θα πρέπει να εξακολουθούν να περιλαμβάνουν μια εναλλακτική λύση απλού κειμένου και ότι τα μεγάλα συνημμένα ενδέχεται να απορριφθούν από αυστηρούς διακομιστές αλληλογραφίας.

Συχνές Ερωτήσεις

Το Localhost συνήθως δεν έχει διακομιστή αλληλογραφίας, επομένως το πρωτόκολλο αλληλογραφίας αποτυγχάνει σιωπηλά. Αλλάξτε το πρωτόκολλο σε smtp και δώστε έναν πραγματικό κεντρικό υπολογιστή SMTP, χρήστη και κωδικό πρόσβασης ή χρησιμοποιήστε μια υπηρεσία όπως Mailπαγίδα για τοπικές δοκιμές.

Ορίστε το smtp_host σε smtp.gmail.com, το smtp_port σε 465 με ssl και το smtp_user σε δικό σας Gmail διεύθυνση. Χρησιμοποιήστε ένα Google Κωδικός πρόσβασης εφαρμογής αντί για τον κανονικό σας κωδικό πρόσβασης, καθώς Gmail μπλοκάρει τις βασικές συνδέσεις με κωδικό πρόσβασης.

Το πρωτόκολλο αλληλογραφίας χρησιμοποιεί τη συνάρτηση mail() της PHP, το sendmail καλεί το τοπικό δυαδικό αρχείο του διακομιστή και το smtp συνδέεται με έναν εξωτερικό διακομιστή αλληλογραφίας με διαπιστευτήρια. Το SMTP είναι το πιο αξιόπιστο για παράδοση και έλεγχο ταυτότητας.

Ναι. Η Τεχνητή Νοημοσύνη μπορεί να δημιουργήσει τον ελεγκτή, να προσθέσει επικύρωση φόρμας για τον παραλήπτη και το θέμα, και να συμπεριλάβει την επιτυχία και τον χειρισμό σφαλμάτων. RevΕλέγξτε τις ρυθμίσεις SMTP και προσθέστε περιορισμό ταχύτητας πριν το χρησιμοποιήσετε στην παραγωγή.

Ναι. Επικολλήστε την έξοδο της print_debugger() και η Τεχνητή Νοημοσύνη μπορεί να ερμηνεύσει αποτυχίες χειραψίας SMTP, σφάλματα ελέγχου ταυτότητας ή προβλήματα θύρας και, στη συνέχεια, να προτείνει τις διορθωμένες τιμές κεντρικού υπολογιστή, θύρας ή κρυπτογράφησης για δοκιμή.

Συνοψίστε αυτήν την ανάρτηση με: