2011-12-14 33 views
7

Tôi đang truy xuất email từ Gmail bằng PHP và IMAP; tuy nhiên, một số email không có thông báo. Không phải tất cả các tin nhắn đều phải có một thông điệp?IMAP PHP - Email có phải có thông báo không?

Tôi cần một id duy nhất để tham khảo vì vậy tôi không chắc chắn cách theo dõi email khác mà không có nó.

Tôi đang làm gì sai?

Ví dụ ở đây là một tiêu đề email tôi nhận được

[date] => Sun, 06 Nov 2011 21:21:56 -0500 
    [subject] => Daylight Saving Time? Chili's Saving Time! 
    [to] => [email protected] 
    [message_id] => 
    [from] => [email protected] 
    [sender] => [email protected] 
    [reply_toaddress] => [email protected] 
    [size] => 14385 
    [msgno] => 156 
    [status] => Unread 

Cảm ơn

Trả lời

5

Bất kỳ MTA nào tôi từng gặp sẽ thêm một ID thư nếu một thư chưa có. Tuy nhiên, nếu bạn cần phải theo dõi các tin nhắn hoặc chuỗi chúng, bạn sẽ cần phải thiết lập một Message-ID. Các tiêu đề References và tiêu đề In-Reply-To sử dụng giá trị của một trước đó Message-ID để liên kết các thư với nhau.

References chứa danh sách các giá trị Message-ID trước đó trong chuỗi trả lời và In-Reply-To chứa thông báo hiện tại là trả lời trực tiếp.

Lưu ý rằng theo đặc điểm kỹ thuật của RFC-2822, a Message-ID is technically not required. Các MTA hoạt động tốt thường bao gồm một, nhưng một số người bình luận bên dưới mô tả các trường hợp không có ID tin nhắn, gây ra lỗi trong các ứng dụng nhắn tin.

+0

Nhưng vì không có gì đảm bảo, điều này không ngăn chặn một MTA lỗi/độc hại sử dụng các ID thư giống hệt nhau cho các thư khác nhau đúng không? Cách tốt nhất để bảo vệ chống lại tình trạng này là gì? – Pacerier

+0

@Pacerier nếu mối quan ngại của bạn là đảm bảo một MTA khác không thể sao chép ID thư của máy chủ của bạn, điều đó rất khó. Bạn có thể tạo ID tin nhắn dưới dạng băm của thời gian tin nhắn, tên máy chủ của bạn và một khóa bí mật, điều này sẽ làm cho việc tạo giả mạo một Message-ID trở nên khó khăn nhưng tôi không chắc chắn bạn sẽ đạt được nhiều. Phương pháp xác minh người gửi mạnh mẽ duy nhất trong email là ký và mã hóa PGP. –

+1

Bản cập nhật cho câu hỏi cũ này: Tôi đã luôn tin rằng ID thư là "phải" - nhưng tôi vừa phát hiện một email trong hộp thư đến IMAP của mình mà không có! Tôi nhìn vào nguồn thô. Phần mềm đọc tin nhắn IMAP của tôi bị lỗi vì điều này, như tôi cho rằng luôn có một ID tin nhắn. –

5

ID nhắn không có gì để làm với IMAP nhưng là một phần của thư riêng của mình và theo quy định tại RFC 2822 là "bắt buộc" (mặc dù nó nói rằng nó phải có mặt):

Mặc dù tùy chọn, mọi thư đều phải có trường "ID thư:".

Vì vậy, bạn không làm gì sai nếu một số thư thiếu ID thư. Nó xảy ra cho tất cả các thư mà MUA ban đầu gửi thư đã không tạo ra một cho (mà tuy nhiên mỗi MUA thường được sử dụng nên làm).

Liên quan đến một ID duy nhất để xác định thư qua IMAP, bạn có thể muốn xem trường UID được mô tả in the standard.

Các vấn đề liên quan