Nó không đúng định dạng. You're not permitted to have whitespace characters in the middle of an RFC 2047 encoded-word, và do đó JavaMail ngừng cố gắng giải mã đối tượng khi nó chạm vào một khoảng trắng trước khi nó chạm vào thiết bị đầu cuối ?=
. Hầu hết các trình phân tích cú pháp sẽ linh hoạt về những thứ như thế này, do rất nhiều thông báo không đúng theo cách này, nhưng JavaMail hơi quá nghiêm ngặt trong vấn đề này. Nó không phải là sai, nhưng chắc chắn không phải là "tự do trong những gì nó chấp nhận". Đây là những gì RFC phải nói:
QUAN TRỌNG: 'từ mã hóa' được thiết kế để được công nhận là 'atom's bởi trình phân tích cú pháp RFC 822. Kết quả là, không gian trắng không được mã hóa ký tự (chẳng hạn như SPACE và HTAB) là FORBIDDEN trong một từ được mã hóa '. Ví dụ, chuỗi ký tự
=?iso-8859-1?q?this is some text?=
sẽ được phân tích như bốn 'của nguyên tử, chứ không phải như một đĩa đơn 'nguyên tử'(bởi một RFC 822 phân tích cú pháp) hoặc 'mã hóa-word'(bằng một cú pháp mà hiểu 'từ được mã hóa'). Cách chính xác để mã hóa chuỗi "đây là một số văn bản " cũng là để mã hóa các ký tự KHÔNG GIAN, ví dụ:
=?iso-8859-1?q?this=20is=20some=20text?=
Bạn có thể thay thế tất cả các không gian trong đó có ký tự gạch dưới, nhưng điều đó có thể nhận được lộn xộn bởi vì bạn muốn về cơ bản phải viết phân tích cú pháp của riêng bạn để biết khi nào để làm điều đó.
Bạn cũng có thể thử đặt thuộc tính hệ thống mail.mime.decodetext.strict
thành false
, nhưng xem lướt qua mã JavaMail có vẻ như không giúp ích gì. (Vẫn đáng để thử, mặc dù.)
@Cancer Lee: viết "Tôi đã thử đề xuất, nó hoạt động." Vì vậy, hãy thử 'mail.mime.decodetext.strict'. – dkarp