Imap lấy nội dung PHP

Tìm nạp nội dung thư. Phương thức này có thể được sử dụng để tải/tìm nạp nội dung thư nếu tính năng tìm nạp nội dung đã bị tắt trước đó

/** @var \Webklex\PHPIMAP\Message $message */

$message->parseBody[];

Lấy thư mục chứa

Nhận một phiên bản thư mục dựa trên thư mục chứa thư

/** @var \Webklex\PHPIMAP\Message $message */
/** @var \Webklex\PHPIMAP\Folder $folder */

$folder = $message->getFolder[];

chủ đề tin nhắn

Nhận chuỗi tin nhắn bằng cách so sánh các tiêu đề

/** @var \Webklex\PHPIMAP\Message $message */
/** @var string|null $body */

$body = $message->getTextBody[];
1 và
/** @var \Webklex\PHPIMAP\Message $message */
/** @var string|null $body */

$body = $message->getTextBody[];
2 của cả tin nhắn hiện tại và tất cả các tin nhắn trong thư mục tin nhắn đã gửi của bạn. Hành động này là đệ quy và có thể mất vài giây để tìm tất cả thư được kết nối

/** @var \Webklex\PHPIMAP\Message $message */
/** @var \Webklex\PHPIMAP\Support\MessageCollection $messages */

$messages = $message->thread[$sent_folder = null];

Sao chép tin nhắn

Sao chép tin nhắn hiện tại vào một thư mục khác. Dựa trên nhà cung cấp dịch vụ thư của bạn, bạn có thể không nhận được thư đã di chuyển như phản hồi. Trong trường hợp này, null được trả về

/** @var \Webklex\PHPIMAP\Message $message */
/** @var \Webklex\PHPIMAP\Message $copy */

$copy = $message->copy[$folder_path = "INBOX/name"];

Di chuyển tin nhắn

Di chuyển tin nhắn hiện tại vào một thư mục khác. Dựa trên nhà cung cấp dịch vụ thư của bạn, bạn có thể không nhận được thư đã di chuyển như phản hồi. Trong trường hợp này, null được trả về

/** @var \Webklex\PHPIMAP\Message $message */

$message = $message->move[$folder_path = "INBOX/name"];

Xóa tin nhắn

Xóa tin nhắn hiện tại. Hành động này sẽ không hoàn thành nếu $expunge được đặt thành false, cho đến khi kết nối bị xóa

/** @var \Webklex\PHPIMAP\Message $message */
/** @var boolean $status */

$status = $message->hasHTMLBody[];
0

Khôi phục tin nhắn

Khôi phục tin nhắn hiện tại. Hành động này sẽ không hoàn thành nếu $expunge được đặt thành false, cho đến khi kết nối bị xóa

/** @var \Webklex\PHPIMAP\Message $message */
/** @var boolean $status */

$status = $message->hasHTMLBody[];
1

Nhận cờ

Nhận tất cả các cờ tin nhắn được phân tích cú pháp

/** @var \Webklex\PHPIMAP\Message $message */
/** @var boolean $status */

$status = $message->hasHTMLBody[];
2

Thêm một lá cờ mới

Bạn có thể thêm nhiều cờ mới cùng một lúc hoặc chỉ một cờ duy nhất

/** @var \Webklex\PHPIMAP\Message $message */
/** @var boolean $status */

$status = $message->hasHTMLBody[];
3

Xóa cờ

Xóa cờ tin nhắn hiện có khỏi tin nhắn hiện tại

/** @var \Webklex\PHPIMAP\Message $message */
/** @var boolean $status */

$status = $message->hasHTMLBody[];
4

Kiểm tra xem thư có tệp đính kèm không

Kiểm tra xem tin nhắn hiện tại có bất kỳ tệp đính kèm nào không

/** @var \Webklex\PHPIMAP\Message $message */
/** @var boolean $status */

$status = $message->hasHTMLBody[];
5

Nhận tất cả các tệp đính kèm

Nhận một bộ sưu tập của tất cả các tập tin đính kèm

/** @var \Webklex\PHPIMAP\Message $message */
/** @var boolean $status */

$status = $message->hasHTMLBody[];
6

Nhận cơ thể thô

Nhận nội dung thư thô và chưa được phân tích cú pháp

/** @var \Webklex\PHPIMAP\Message $message */
/** @var boolean $status */

$status = $message->hasHTMLBody[];
7

Nhận tiêu đề

Nhận phiên bản Tiêu đề được phân tích cú pháp

/** @var \Webklex\PHPIMAP\Message $message */
/** @var boolean $status */

$status = $message->hasHTMLBody[];
8

Nhận tất cả các thuộc tính

Nhận danh sách tất cả các thuộc tính có sẵn. Chúng cũng bao gồm tất cả các thuộc tính Tiêu đề được phân tích cú pháp

/** @var \Webklex\PHPIMAP\Message $message */
/** @var boolean $status */

$status = $message->hasHTMLBody[];
9

thuộc tính truy cập

Có nhiều cách có thể để truy cập các thuộc tính cụ thể. Dưới đây là một số ví dụ để truy cập chủ đề tin nhắn. Điều tương tự cũng có thể được thực hiện với bất kỳ thuộc tính nào khác mà bạn có thể tìm thấy trong

/** @var \Webklex\PHPIMAP\Message $message */
/** @var string|null $body */

$body = $message->getTextBody[];
3

/** @var \Webklex\PHPIMAP\Message $message */
/** @var string|null $body */

$body = $message->getTextBody[];
0

Kiểm tra phần Thuộc tính để tìm hiểu thêm về cách xử lý thuộc tính và các phương pháp ma thuật có sẵn

Bây giờ bạn đã biết hàm imap_header[] trả về là gì, đã đến lúc bắt tay vào công việc và sử dụng nó. Tập lệnh chúng ta sẽ tạo các vòng lặp qua từng thư trong hộp thư đến, in ra 100 ký tự đầu tiên của nội dung cho mỗi thư khi nó đi. Để làm điều này, chúng tôi sẽ tranh thủ sự trợ giúp của hai chức năng mới. imap_num_msg[] và imap_body[], lần lượt trả về số lượng thư trong hộp thư và nội dung của một thư cụ thể

Để nhận số lượng thư trong hộp thư, hãy chuyển luồng IMAP của bạn vào imap_num_msg[] và lưu trữ giá trị trả về, như thế này


Vì giờ đây có thể kiểm tra số lượng thư trong một hộp thư đến nhất định, chúng ta có thể lặp qua tất cả chúng bằng cách sử dụng imap_header[] trên mỗi thư. Vì lợi ích của bài kiểm tra này, chúng tôi sẽ in từng tin nhắn ra như thế này

On 22nd April 2004, FooBarsaid, "first 100 characters of message here".\n

Để thực hiện điều này, chúng ta cần viết mã theo những dòng này

  • Mở hộp thư, lấy số thư

  • Đối với 0 đến số lượng tin nhắn, hãy lấy tiêu đề và lấy nội dung

  • Cắt nội dung thành tối đa 100 ký tự

  • Định dạng ngày của tin nhắn thành định dạng "jS F Y"

  • In ra dữ liệu

Trong mã, có một nhược điểm nhỏ đối với việc triển khai này và đó là nhiều người không có địa chỉ "cá nhân" từ. Trong email "Foo Bar", "Foo Bar" sẽ là $header->From[0]->personal. Tuy nhiên, nhiều người chỉ gửi địa chỉ của họ dưới dạng foo@bar. com không có lĩnh vực cá nhân, có nghĩa là chúng ta cần cẩn thận khi đọc thông tin

Đây là giao diện của nó trong PHP

udate];

        if [isset[$header->from[0]->personal]] {
            $personal = $header->from[0]->personal;
        } else {
            $personal = $header->from[0]->mailbox;
        }

        $email = "$personal from[0]->mailbox}@{$header->from[0]->host}>";
        echo "On $prettydate, $email said \"$body\".\n";
    }

    imap_close[$imap];
?>

Lưu ý rằng tôi thực sự khuyên bạn nên thay đổi giá trị bắt đầu của $i thành một nơi nào đó gần với số lượng thư hiện tại của bạn, vì việc chạy tập lệnh đó sẽ mất nhiều thời gian để thực thi nếu bạn có hộp thư đến lớn - tôi sẽ giải thích lý do ngay sau đây

Đầu tiên, luồng IMAP của chúng tôi được mở như bình thường, sau đó chúng tôi lấy số lượng thư hiện có trong đó và lưu trữ trong $message_count. Giá trị này sau đó được sử dụng làm giá trị vòng lặp tối đa của chúng tôi - lưu ý rằng chúng tôi tính từ 1 đến $message_count vì đánh số thứ tự IMAP dựa trên 1, có nghĩa là nó tính từ 1 trở lên thay vì 0 trở lên

Tiếp theo, thông tin tiêu đề cho tin nhắn hiện tại được lấy và lưu trữ trong $header, và văn bản nội dung cũng được lấy và đặt trong $body. Lưu ý rằng văn bản nội dung được cắt thành 100 ký tự sau đó được cắt bớt

Trường udate trong tiêu đề là ngày Unix của chúng tôi, do đó được định dạng theo bố cục bắt buộc. Sau đó là vấn đề từ[0]->cá nhân - nếu bạn còn nhớ tôi đã đề cập rằng không phải ai cũng gửi tên cá nhân trong tiêu đề Từ của họ, vì vậy trường này có thể không được đặt cho tất cả mọi người. Để giải quyết vấn đề này, isset[] được sử dụng để kiểm tra xem biến có tồn tại hay không và nếu có, nó được đặt vào biến $personal. Nếu không, tên hộp thư của người gửi sẽ được sử dụng thay thế, đó sẽ là "foo" trong "foo@bar. com"

Cuối cùng, tất cả thông tin được in ra, vòng lặp tiếp tục cho đến khi chạm đến cuối hộp thư, sau đó luồng IMAP được đóng lại và tập lệnh hoàn tất

Bây giờ, nếu chỉ sử dụng 100 ký tự từ nội dung, tại sao tập lệnh thực thi chậm? . Vì vậy, nếu ai đó gửi cho bạn tệp 7MB được đính kèm trong email, imap_body[] sẽ tải xuống tất cả rồi loại bỏ 99% tệp đó. Tồi tệ hơn, những gì chúng tôi nhận được trong 1% ít ỏi mà chúng tôi đọc có thể là tất cả các loại MIME vô nghĩa, chẳng hạn như "----=_NextPart_000_0022_01C3EC8E. 3DBDDCB0". Xử lý vấn đề này liên quan đến việc thực sự tìm hiểu sâu về tin nhắn MIME, vì vậy, nếu bạn nghĩ rằng mình đã có đủ - tập lệnh chúng tôi vừa tạo hoạt động tốt cho tin nhắn văn bản thuần túy - tôi khuyên bạn nên dừng ở đây và bỏ qua phần tiếp theo

Lưu ý của tác giả. Bạn có thể chuyển FT_PEEK làm tham số thứ ba cho imap_body[] để nó không đặt cờ đã đọc thành true cho thư đã chọn. Không có điều này, bất kỳ thư nào được truy xuất bằng imap_body[] đều được đánh dấu là đã đọc

Làm cách nào để nhận email bằng PHP và IMAP?

Bật Tiện ích mở rộng IMAP trong cài đặt PHP. .
Mở Gmail
Nhấp vào Cài đặt
Chọn tab Chuyển tiếp và POP/IMAP màu xanh lam
Chọn “Truy cập IMAP. ” và Bật nút radio IMAP
Nhấp vào Lưu thay đổi
Đừng quên bật quyền truy cập ứng dụng kém an toàn cho tài khoản Gmail

Làm cách nào để đọc nội dung email trong PHP?

Cách đọc email bằng PHP .
Mở Luồng IMAP. imap_open[] $inbox = imap_open[$mailbox, $username, $password] or die['Không thể kết nối với email. '. .
Nhận email. imap_search[].
Tiêu đề của thư điện tử. .
Nội dung thư điện tử. .
Cấu trúc của tin nhắn

Chủ Đề