Cách gửi email bằng CodeIgniter

Email rất quan trọng trong các ứng dụng web. Khi người dùng đăng ký, chúng ta có thể muốn gửi cho họ một email để xác minh địa chỉ email của họ và cho phép người dùng xác nhận đăng ký. Chúng ta cũng sử dụng email để đặt lại mật khẩu đã quên, gửi hóa đơn và biên lai cho khách hàng, v.v. CodeIgniter giúp chúng ta dễ dàng gửi email từ ứng dụng của mình bằng nhiều tùy chọn khác nhau.

CodeIgniter có thư viện email tích hợp mà chúng ta có thể sử dụng khi gửi email.

Cấu hình Email CodeIgniter

Chúng ta cần có một nơi trung tâm để quản lý cài đặt email. CodeIgniter không có tệp cấu hình cho email nên chúng ta sẽ phải tự tạo một tệp.

Tạo một file email.php trong thư mục application/config

Thêm mã sau vào 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
);

ĐÂY,

  • 'protocol' => 'smtp', chỉ định giao thức mà bạn muốn sử dụng khi gửi email. Đây có thể là cài đặt smtp của Gmail hoặc cài đặt smtp từ máy chủ của bạn
  • 'smtp_host' => 'smtp.example.com', chỉ định máy chủ smtp. Ví dụ, nếu bạn muốn sử dụng Gmail thì bạn sẽ có thứ gì đó như smtp.gmail.com
  • 'smtp_port' => 465, một cổng mở trên máy chủ smtp được chỉ định đã được cấu hình cho thư smtp
  • 'smtp_user' => 'no-reply@example.com', địa chỉ email sẽ được sử dụng làm người gửi khi gửi email. Đây phải là địa chỉ email hợp lệ tồn tại trên máy chủ
  • 'smtp_pass' => '12345!', mật khẩu cho email người dùng smtp đã chỉ định
  • 'smtp_crypto' => 'ssl', chỉ định phương thức mã hóa sẽ được sử dụng, ví dụ như ssl, tls, v.v.
  • 'email type' => 'text', thiết lập loại email sẽ sử dụng. Có thể là văn bản thuần túy hoặc HTML tùy theo nhu cầu của bạn.
  • 'smtp_timeout' => '4', chỉ định thời gian tính bằng giây sẽ trôi qua khi cố gắng kết nối với máy chủ trước khi ngoại lệ hết thời gian chờ được đưa ra.
  • 'charset' => 'iso-8859-1', xác định bộ ký tự được sử dụng khi gửi email.
  • 'wordwrap' => TRUE được đặt thành TRUE sau đó tính năng ngắt từ được bật. Nếu nó được đặt thành FALSE thì tính năng ngắt từ không được bật

Lưu ý: để gửi email hoạt động, bạn phải cung cấp các tham số cấu hình hợp lệ. Các tham số giả sẽ không thể gửi email.

Xem Email CodeIgniter

Trong phần này, chúng ta sẽ tạo chế độ xem để gửi email đến người nhận.

Tạo một thư mục email mới trong ứng dụng/lượt xem

Tạo một tập tin mới contact.php application/views/email

Thêm mã sau vào 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>

ĐÂY,

  • Chúng tôi có một biểu mẫu HTML cơ bản chấp nhận email, chủ đề và tin nhắn sau đó truyền các tham số đến tuyến email.

Bộ điều khiển Email CodeIgniter

Bây giờ chúng ta hãy tạo bộ điều khiển sẽ xử lý việc gửi email

Tạo một file mới EmailController.php trong application/controllers/EmailController.php

Thêm mã sau vào 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());
        }
    }
}

ĐÂY,

  • lớp EmailController mở rộng CI_Controller {…} định nghĩa bộ điều khiển email của chúng ta để mở rộng bộ điều khiển CodeIgniter gốc.
  • public function __construct() {…} xác định hàm tạo con gọi phương thức hàm tạo gốc.
  • public function index() {…} xác định phương thức chỉ mục hiển thị biểu mẫu liên hệ
  • hàm send() {…} định nghĩa phương thức gửi email
    • $this->load->config('email'); tải các thiết lập cấu hình email
    • $this->load->library('email'); tải thư viện email
    • $from = $this->config->item('smtp_user'); lấy ID người gửi từ tệp cấu hình email mà chúng ta đã xác định.
    • $to = $this->input->post('to'); nhận được giá trị từ biểu mẫu đã gửi
    • $subject = $this->input->post('subject'); thiết lập email được chủ đề từ biểu mẫu
    • $message = $this->input->post('message'); thiết lập tin nhắn email từ biểu mẫu
    • $this->email->set_newline(“\r\n”); định nghĩa các ký tự dòng mới cho email
    • $this->email->from($from); thiết lập địa chỉ email của người gửi
    • $this->email->to($to); thiết lập địa chỉ email của người nhận
    • $this->email->subject($subject); thiết lập chủ đề email
    • $this->email->message($message); thiết lập tin nhắn email
    • if ($this->email->send()) {…} cố gắng gửi email. Nếu email được gửi thành công, thì thông báo Your Email has successfully been sent else debug information is printed on what could have wrong.

Bây giờ chúng ta hãy xác định các tuyến email

Tuyến đường Email

Thêm các tuyến đường sau vào application/config/routes.php

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

Bây giờ chúng ta có thể tải biểu mẫu liên hệ trong trình duyệt web

Hãy khởi động máy chủ PHP tích hợp

Mở terminal/dòng lệnh và duyệt đến thư mục gốc của ứng dụng của bạn. Trong trường hợp của tôi, thư mục gốc nằm ở ổ C:\Sites\ci-app

cd C:\Sites\ci-app

khởi động máy chủ bằng lệnh sau

php -S localhost:3000

Tải URL sau vào trình duyệt web của bạn: http://localhost:3000/send-email

Bạn sẽ có thể thấy biểu mẫu sau

Tuyến đường Email

Nhập email người nhận, chủ đề và tin nhắn email sau đó nhấp vào Gửi email. Nếu cấu hình email của bạn được thiết lập đúng, thì bạn sẽ có thể thấy tin nhắn thành công.

Tổng kết

Thư viện email tích hợp giúp chúng ta dễ dàng gửi email với mã tối thiểu. Thư viện cũng rất linh hoạt theo nghĩa là bạn có thể cấu hình nó để đáp ứng các yêu cầu của mình.