2009-03-27 29 views
7

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?

+0

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

+0

Không nên có một "-------------- ranh giới--" ở cuối? (Lưu ý hai dấu gạch ngang thêm) – Tomalak

+0

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

Trả lời

13

Ranh giới cuối cùng của một phần MIME phải được thể hiện bằng cách thêm hai dấu gạch ngang:

 
MIME-Version: 1.0 
Content-Type: multipart/mixed; boundary="------------boundary" 

--------------boundary 
... 

--------------boundary 
... 

--------------boundary-- 

More đọc ở đây: RFC1341/7.2 The Multipart Content-Type

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