Cách gửi email bằng CodeIgnite

⚡ Tóm tắt thông minh

CodeViệc gửi email trong Igniter dựa vào thư viện Email tích hợp sẵn của framework để gửi tin nhắn thông qua SMTP hoặc máy chủ thư cục bộ. Ví dụ này tạo một tệp cấu hình email, một khung nhìn biểu mẫu liên hệ và một bộ điều khiển đọc dữ liệu nhập từ biểu mẫu và gửi tin nhắn.

  • 📧 Thư viện tích hợp sẵn: Thư viện Email cho phép gửi thư với mã lệnh tối thiểu và hỗ trợ các giao thức gửi thư SMTP, Sendmail và PHP.
  • ⚙️ Cấu hình trung tâm: Tệp cấu hình email.php tùy chỉnh lưu trữ giao thức, máy chủ, cổng, tên người dùng và mật khẩu để các cài đặt được lưu giữ ở một nơi duy nhất.
  • 4 Thông tin đăng nhập SMTP: Cần phải có các giá trị hợp lệ cho smtp_host, smtp_user và smtp_pass; các tham số giả sẽ không bao giờ gửi được email thực sự.
  • 📝 Biểu mẫu gửi đến người kiểm soát: Giao diện liên hệ thu thập thông tin người nhận, chủ đề và nội dung tin nhắn, sau đó bộ điều khiển sẽ đọc các thông tin này bằng thư viện đầu vào.
  • 📤 Luồng gửi: Bộ điều khiển thiết lập các tham số from, to, subject và message, sau đó gọi hàm send() và in báo cáo gỡ lỗi nếu xảy ra lỗi.
  • 📎 HTML và các tập tin: Việc chuyển kiểu thư sang html và gọi hàm attach() cho phép bạn gửi tin nhắn được định dạng kèm tệp đính kèm.
  • 🤖 Hỗ trợ AI: Các công cụ AI có thể tạo bộ điều khiển email, xác thực dữ liệu nhập vào biểu mẫu và chẩn đoán lỗi kết nối SMTP từ kết quả gỡ lỗi.

CodeIgniter Gửi email

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 email cho họ để xác minh địa chỉ email 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 và gửi hóa đơn, biên lai cho khách hàng. CodeIgniter giúp chúng tôi gửi email từ ứng dụng của mình một cách cực kỳ dễ dàng với nhiều tùy chọn khác nhau.

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

CodeCấu hình email Igniter

Chúng ta cần một nơi tập trung để quản lý các cài đặt email. CodeIgniter không đi kèm với tệp cấu hình dành cho email, vì vậy chúng ta sẽ phải tự tạo một tệp như vậy.

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 bạn muốn sử dụng khi gửi email. Ví dụ: Gmail cài đặt SMTP 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 Khi đó bạn sẽ có một địa chỉ email dạng 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 của email người dùng SMTP được chỉ định.
  • 'smtp_crypto' => 'ssl', chỉ định phương thức mã hóa sẽ được sử dụng, ví dụ: ssl, tls, v.v.
  • 'mailtype' => 'text', thiết lập loại thư sẽ được sử dụng. Loại thư này có thể là văn bản thuần túy hoặc HTML tùy thuộc vào 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, nếu đặt thành TRUE thì chức năng xuống dòng tự động được bật. Nếu đặt thành FALSE thì chức năng xuống dòng tự động 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.

CodeChế độ xem email Igniter

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 mới có tên contact.php trong thư mục 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(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>

ĐÂY,

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

CodeBộ điều khiển email Igniter

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,

  • class EmailController extends CI_Controller {…} định nghĩa bộ điều khiển email của chúng ta, kế thừa từ lớp cha. CodeBộ điều khiển đánh lửa.
  • 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 tiêu đề email 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ông báo “Email của bạn đã được gửi thành công” sẽ được hiển thị, ngược lại thông tin gỡ lỗi sẽ được in ra về những gì có thể đã xảy ra sai.

Bây giờ chúng ta hãy xác định các tuyến đường 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';

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

Chúng ta hãy khởi động máy chủ PHP tích hợp sẵn.

Mở cửa sổ dòng lệnh hoặc terminal và điều hướng đến thư mục gốc của ứng dụng. 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 các mục sau URL trong 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 địa chỉ email người nhận, tiêu đề và nội dung 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 cách, bạn sẽ thấy thông báo thành công.

Cách gửi email HTML và tệp đính kèm CodeIgnite

Thư viện Email tương tự có thể gửi các tin nhắn và tệp được định dạng phong phú. Hai thay đổi nhỏ sẽ biến ví dụ văn bản thuần túy ở trên thành email HTML có tệp đính kèm.

$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'): Thông báo cho thư viện biết nội dung chứa HTML, nhờ đó các thẻ như tiêu đề và liên kết sẽ được hiển thị trong hộp thư đến của người nhận.
  • gắn(): Thêm một tệp từ đường dẫn trên máy chủ vào tin nhắn; gọi hàm này một lần cho mỗi tệp trước khi gửi.

Hãy nhớ rằng email HTML vẫn cần có phiên bản văn bản thuần túy, và các tệp đính kèm lớn có thể bị từ chối bởi các máy chủ email nghiêm ngặt.

Câu Hỏi Thường Gặp

Thông thường máy chủ cục bộ không có máy chủ thư, vì vậy giao thức thư sẽ bị lỗi mà không báo lỗi. Hãy chuyển sang giao thức SMTP và cung cấp máy chủ SMTP thực, tên người dùng và mật khẩu, hoặc sử dụng dịch vụ như... Mailbẫy để thử nghiệm tại địa phương.

Đặt smtp_host thành smtp.gmail.com, smtp_port thành 465 với SSL và smtp_user thành tên người dùng của bạn. Gmail địa chỉ. Sử dụng một Google Sử dụng mật khẩu ứng dụng thay vì mật khẩu thông thường của bạn, vì Gmail Chặn đăng nhập bằng mật khẩu cơ bản.

Giao thức thư điện tử sử dụng hàm mail() của PHP, sendmail gọi tệp nhị phân cục bộ của máy chủ, và smtp kết nối với máy chủ thư bên ngoài bằng thông tin xác thực. SMTP là giao thức đáng tin cậy nhất về việc gửi và xác thực.

Đúng vậy. Trí tuệ nhân tạo (AI) có thể xây dựng bộ điều khiển, thêm chức năng xác thực biểu mẫu cho người nhận và đối tượng, cũng như xử lý thành công và lỗi. RevHãy xem lại cài đặt SMTP và thêm giới hạn tốc độ trước khi sử dụng trong môi trường sản xuất.

Vâng. Hãy dán kết quả của hàm print_debugger(), và AI có thể phân tích các lỗi bắt tay SMTP, lỗi xác thực hoặc sự cố cổng, sau đó đề xuất các giá trị máy chủ, cổng hoặc mã hóa chính xác để thử.

Tóm tắt bài viết này với: