Sử dụng Laravel Imap để get Email
NỘI DUNG BÀI VIẾT
Trong trường hợp chúng ta cần sử dụng chức năng về email thông qua các Email Provider (Gmail, Yahoo, AOL, …) Laravel Imap là 1 thư viện cung cấp cho chúng ta giải pháp với ưu điểm dễ dàng cài đặt và sử dụng.
Laravel Imap là cách đơn giản để tích hợp thư viện php vào trong ứng dụng sử dụng framework Laravel https://github.com/Webklex/laravel-imap
Cài đặt
- Nếu chưa cài đặt thư viện php-imap thì bạn có thể cài đặt bằng câu lệnh sau (dấu * là phiên bản php muốn cài đặt) :
sudo apt-get install php*-imap php*-mbstring php*-mcrypt && sudo apache2ctl graceful
Code language: JavaScript (javascript)
Để chắc chắn thì bạn có thể sử dụng phpinfo() để kiểm tra xem thư viện đã được kích hoạt chưa
- Cài đặt Laravel imap package :
composer require webklex/laravel-imap
Code language: JavaScript (javascript)
Trong trường hợp phiên bản Laravel <=5.4, bạn cần sửa lại file config/app.php như sau:
- Thêm vào mảng
providers
Webklex\IMAP\Providers\LaravelServiceProvider::class,
Code language: JavaScript (javascript)
- Thêm vào mảng
aliases
'Client' => Webklex\IMAP\Facades\Client::class,
Code language: PHP (php)
- Publish file config của package:
php artisan vendor:publish --provider="Webklex\IMAP\Providers\LaravelServiceProvider"
Code language: JavaScript (javascript)
Cách sử dụng
Một số giao thức được hỗ trợ:
- Imap (default)
- pop3
- nntp
Một số phương thức mã hóa được hỗ trợ:
- false: không mã hóa
- ssl
- tls
- starttls
- notls
Ví dụ đơn giản chức năng kiểm tra đã kết nối thành công chưa với tài khoản AOL mail Ta có thể tạo một command trong laravel để kiểm tra, ở đây tôi tạo command email:get
use Webklex\IMAP\Client;
class GetMailService
{
/* @var Client $client */
protected $client;
public function __construct(Client $client)
{
$this->client = $client;
}
/**
* @return bool
*/
public function testConnection()
{
$client = $this->client->setConfig([
'host' => 'imap.aol.com',
'port' => 993,
'encryption' => 'ssl',
'validate_cert' => true,
'username' => '[email protected]',
'password' => 'Aa@123456',
'protocol' => 'imap',
]);
try {
$client->connect();
return true;
} catch (\Exception $e) {
return false;
}
}
Code language: PHP (php)
Lưu ý:
Đối với một số email providers (ví dụ như Gmail, Yahoo, AOL) bạn phải kích hoạt chức năng “Allow apps that use less secure sign in” mới có thể connect thành công. Zoho mail sẽ không cần làm như trên.

Ví dụ lấy ra các tin nhắn từ 1 hộp INBOX của một tài khoản
try {
$client->connect();
$oFolder = $client->getFolder("INBOX"); // Lấy email từ folder INBOX
$aMessage = $oFolder->messages()->all()->get();
// Với mỗi tin nhắn lấy ra 1 số thông số : tiêu đề, UID, nội dung text
foreach($aMessage as $oMessage) {
echo 'Subject: ' . $oMessage->getSubject() . "\n";
echo 'UID: '.$oMessage->getUid() . "\n";
echo 'Text Body: ' . $oMessage->getTextBody() . "\n";
}
} catch (\Exception $e) {
return false;
}
Code language: PHP (php)
Kết quả: Hình ảnh tại CLI
Hình ảnh hộp thư INBOX

Các phương thức mà Laravel – imap hỗ trợ bạn có thể tham khảo tại: https://github.com/Webklex/laravel-imap
Một số config với từng Email Providers:
AOL (including Verizon.net) Server: imap.aol.com Port: 993 Encryption: SSL/TLS
Gmail Server: imap.gmail.com Port: 993 Encryption: SSL/TLS
Yahoo!
Server: imap.mail.yahoo.com
Port: 993
Encryption: SSL
Code language: CSS (css)
Nguồn tham khảo: https://support.office.com/en-us/article/pop-and-imap-email-settings-for-outlook-8361e398-8af4-4e97-b147-6c6c4ac95353:
Các bạn có thể tham khảo các bài viết hay về Laravel tại đây.
Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.
Tham khảo: https://viblo.asia/p/su-dung-laravel-imap-de-get-email-Qbq5Qpx4lD8
Leave a Reply