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[];
0Khô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[];
1Nhậ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[];
2Thê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[];
3Xó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[];
4Kiể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[];
5Nhậ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[];
6Nhậ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[];
7Nhậ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[];
8Nhậ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[];
9thuộ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[];
0Kiể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