Bạn có thể kết nối với hộp thư đến email bằng các hàm IMAP của PHP. Trước tiên, bạn cần mở luồng IMAP tới hộp thư
1. Mở Luồng IMAP. imap_open[]
$inbox = imap_open[$mailbox, $username, $password] or die['Cannot connect to email: ' . imap_last_error[]];
Chuỗi $mailbox bao gồm một máy chủ và một đường dẫn hộp thư trên máy chủ này. Phần máy chủ được đặt trong dấu ngoặc nhọn '{' và '}'. Nó bao gồm tên hoặc địa chỉ IP của máy chủ, một cổng tùy chọn [có tiền tố là '. '] và một đặc tả giao thức tùy chọn [có tiền tố là '/']
Ví dụ: để kết nối với SSL IMAP có chứng chỉ tự ký, hãy thêm /ssl/novalidate-cert sau thông số kỹ thuật của giao thức
$mailbox = "{localhost:993/imap/ssl/novalidate-cert}INBOX";
2. Nhận email. imap_search[]
Hàm này tìm kiếm hộp thư hiện được mở trong luồng IMAP và trả về một mảng thư phù hợp với tiêu chí tìm kiếm đã cho. Ví dụ: để trả lại tất cả các tin nhắn
$emails = imap_search[$inbox, 'ALL'];
Để đặt các email mới nhất lên trên cùng
rsort[$emails];
Nếu email được trả lại, bạn có thể chuyển qua từng email
if[$emails]
{
rsort[$emails];
foreach[$emails as $msg_number]
{
// Get email headers and body
}
}
3. Tiêu đề của thư điện tử
Hàm imap_headerinfo[] được sử dụng để đọc tiêu đề email của số tin nhắn đã cho. Ví dụ,
$header = imap_headerinfo[$inbox, $msg_number];
Hàm này trả về FALSE nếu có lỗi hoặc nếu thành công, thông tin dưới dạng một đối tượng
- $header->date
- $header->subject
- $header->toaddress
- $header->to. Mảng đối tượng có thuộc tính. cá nhân, adl, hộp thư và máy chủ
- $header->fromaddress
- $header->từ. Mảng đối tượng có thuộc tính. cá nhân, adl, hộp thư và máy chủ
- $header->reply_toaddress
- $header->reply_to. Mảng đối tượng có thuộc tính. cá nhân, adl, hộp thư và máy chủ
- $header->Size. Kích thước tin nhắn
- $header->cập nhật. Ngày gửi thư trong thời gian Unix
Để lấy tên và email từ thuộc tính địa chỉ
$from = $header->from;
foreach [$from as $id => $object]
{
$fromname = $object->personal;
$fromaddress = $object->mailbox . "@" . $object->host;
}
4. Nội dung thư điện tử
Hàm imap_body[] đọc và trả về nội dung thư. Ví dụ,
$message = imap_body[$inbox, $msg_number];
Hàm này trả về một bản sao nguyên văn của nội dung thư. Để trích xuất các phần riêng lẻ của thông báo được mã hóa MIME nhiều phần, bạn phải sử dụng imap_fetchstructure[] để phân tích cấu trúc của nó và imap_fetchbody[] để trích xuất bản sao của một thành phần nội dung
imap_fetchbody[] lấy một phần cụ thể của nội dung thư. Nó trả về một phần cụ thể của nội dung thư đã chỉ định dưới dạng chuỗi văn bản. Các bộ phận cơ thể không được giải mã bởi chức năng này. Ví dụ,
5. Cấu trúc của tin nhắn
Hàm imap_fetchstructure[] tìm nạp tất cả thông tin có cấu trúc cho một thông báo nhất định. Ví dụ,
Gần đây tôi đã làm việc trong dự án dịch ngôn ngữ vì tôi cần đọc email bằng PHP Từ hộp thư đến gamil dựa trên nội dung email tôi đã tạo dự án trong cơ sở dữ liệu…rất may là việc đọc email từ gmail dễ dàng hơn tôi nghĩ nhờ có tiện ích mở rộng IMAP
Đây là ví dụ đơn giản để lấy email từ gmail
GHI CHÚ. Điều này sẽ chỉ hoạt động nếu bạn đáp ứng các yêu cầu bỏ hoang
- Phiên bản PHP phải là PHP5 hoặc mới nhất
- Tiện ích mở rộng PHP IMAP phải được bật trong bản cài đặt PHP của bạn
- IMAP phải được bật trong cài đặt Gmail của bạn
Cách bật IMAP trong PHP
Cách bật IMAP trong XAMPP
IMAP không được bật theo mặc định trong bản phân phối Xampp, vì vậy, để bật nó, hãy truy cập tệp
$mailbox = "{localhost:993/imap/ssl/novalidate-cert}INBOX";
0 và tìm kiếm $mailbox = "{localhost:993/imap/ssl/novalidate-cert}INBOX";
1 và bằng cách xóa dấu chấm phẩy ở đầu dòng, nó sẽ được bật, nó phải được bật. $mailbox = "{localhost:993/imap/ssl/novalidate-cert}INBOX";
2Cách bật IMAP trong Linux
Bạn có thể cài đặt mô-đun PHP5 IMAP bằng lệnh này
$mailbox = "{localhost:993/imap/ssl/novalidate-cert}INBOX";
3Tuy nhiên, nó không được bật theo mặc định, vì vậy hãy bật nó bằng
$mailbox = "{localhost:993/imap/ssl/novalidate-cert}INBOX";
4Để xem các thay đổi, hãy khởi động lại Apache
$mailbox = "{localhost:993/imap/ssl/novalidate-cert}INBOX";
5Đây là tập lệnh PHP để truy xuất Email Gmail của bạn bằng IMAP
set_time_limit[4000]; // Connect to gmail $imapPath = '{imap.gmail.com:993/imap/ssl}INBOX'; $username = '[email protected]'; $password = 'your_gmail_password'; // try to connect $inbox = imap_open[$imapPath,$username,$password] or die['Cannot connect to Gmail: ' . imap_last_error[]]; /* ALL - return all messages matching the rest of the criteria ANSWERED - match messages with the \\ANSWERED flag set BCC "string" - match messages with "string" in the Bcc: field BEFORE "date" - match messages with Date: before "date" BODY "string" - match messages with "string" in the body of the message CC "string" - match messages with "string" in the Cc: field DELETED - match deleted messages FLAGGED - match messages with the \\FLAGGED [sometimes referred to as Important or Urgent] flag set FROM "string" - match messages with "string" in the From: field KEYWORD "string" - match messages with "string" as a keyword NEW - match new messages OLD - match old messages ON "date" - match messages with Date: matching "date" RECENT - match messages with the \\RECENT flag set SEEN - match messages that have been read [the \\SEEN flag is set] SINCE "date" - match messages with Date: after "date" SUBJECT "string" - match messages with "string" in the Subject: TEXT "string" - match messages with text "string" TO "string" - match messages with "string" in the To: UNANSWERED - match messages that have not been answered UNDELETED - match messages that are not deleted UNFLAGGED - match messages that are not flagged UNKEYWORD "string" - match messages that do not have the keyword "string" UNSEEN - match messages which have not been read yet*/ // search and get unseen emails, function will return email ids $emails = imap_search[$inbox,'UNSEEN']; $output = ''; foreach[$emails as $mail] { $headerInfo = imap_headerinfo[$inbox,$mail]; $output .= $headerInfo->subject.'
'; $output .= $headerInfo->toaddress.'
'; $output .= $headerInfo->date.'
'; $output .= $headerInfo->fromaddress.'
'; $output .= $headerInfo->reply_toaddress.'
'; $emailStructure = imap_fetchstructure[$inbox,$mail]; if[!isset[$emailStructure->parts]] { $output .= imap_body[$inbox, $mail, FT_PEEK]; } else { // } echo $output; $output = ''; } // colse the connection imap_expunge[$inbox]; imap_close[$inbox];
Tôi hy vọng bạn thích bài đăng này, vui lòng bình luận bên dưới, đề xuất của bạn và các vấn đề nếu bạn gặp phải - chúng tôi ở đây để giải quyết vấn đề của bạn