Tôi đã viết một ứng dụng khách SMTP gửi e-mail kèm theo các tệp đính kèm. Mọi thứ đều tốt đẹp ngoại trừ khi một e-mail được gửi bởi chương trình của tôi nhận được bởi Outlook nó sẽ hiển thị hai phần đính kèm - tệp thực sự được gửi và một tệp có hai ký tự CR và LF bên trong và tệp này có tên ATT ????? .txt.Các tệp đính kèm ATTnnnnn.txt khi nhận e-mail trong Outlook
Tôi đã thực hiện tìm kiếm - đã tìm thấy rất nhiều kết quả phù hợp như this cho các vấn đề tương tự và kiểm tra mọi thứ tôi có thể. Thậm chí nhiều hơn - tôi so sánh hai email - được gửi bởi chương trình của tôi và được gửi bởi Opera và tôi không thể suy ra sự khác biệt. Tuy nhiên những gì Opera gửi được giải thích một cách chính xác, nhưng những gì chương trình của tôi gửi là không. Những gì chương trình của tôi gửi được giải thích bởi một bộ các ứng dụng thư khác một cách chính xác, nhưng không phải bởi Outlook.
Tôi đã telnet'et đến máy chủ SMTP, lấy hai email vào một tập tin văn bản - một từ chương trình của tôi, một từ Opera, và so sánh chúng side-by-side. Tôi không thấy bất kỳ sự khác biệt nào có thể ảnh hưởng đến việc diễn giải bởi ứng dụng email.
Dưới đây là một thông điệp mẫu (địa chỉ thay thế, nội dung tập tin cắt, dòng trống chính xác như chúng xuất hiện trong các tin nhắn thật, đường dây không bao giờ vượt quá 80 ký tự):
To: [email protected], [email protected] Subject: subject Content-Type: multipart/mixed; boundary="------------boundary" MIME-Version: 1.0 --------------boundary Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 here goes the Base64 encoded text part - it may be localized, so it's better to UTF8 it and do Base64 --------------boundary Content-Disposition: attachment; filename="file.jpg" Content-Type: application/octet-stream; name="file.jpg" Content-Transfer-Encoding: base64 here goes the Base64 encoded file data --------------boundary
tôi đã cố gắng để chơi với linebreaks sau ranh giới cuối cùng - cố gắng không, một, hai, ba, nhưng điều này không cải thiện tình hình.
Có một số hạn chế kỳ lạ mà ứng dụng thư khách phải tuân thủ để tạo ra các thư được Outlook giải thích chính xác không?
Bạn có thể gửi thông điệp chính xác khách hàng SMTP của bạn tạo ra? Tôi khá chắc chắn bạn đã phạm sai lầm ở đâu đó trong tiêu đề thư. – Tomalak
Không nên có một "-------------- ranh giới--" ở cuối? (Lưu ý hai dấu gạch ngang thêm) – Tomalak
Vâng, vâng, đó là hai dấu gạch ngang thêm vào cuối! Tôi chưa bao giờ đọc điều này trong bất kỳ tài liệu nào và đó là một bất ngờ hoàn toàn đối với tôi. – sharptooth