2014-10-24 14 views
5

Hy vọng ai đó sẽ có thể giúp đỡ với điều này, tôi đã tìm kiếm và tôi dường như không tìm thấy câu trả lời ở bất cứ đâu..NET 4.5 SMTP Client Dot Vấn đề nhồi nhét khi gửi đến thư mục Pickup

Tôi đang tạo thư bằng cách sử dụng thư sẽ được gửi đến thư mục đón được chỉ định, mã này đã được sử dụng nhiều lần trong quá khứ mà không có vấn đề. Bây giờ, khi tôi kiểm tra tệp kết quả và cụ thể hơn là một URL trong tệp eml, tôi có thể thấy rằng ở giữa có một đôi .. Từ những gì tôi đã đọc, tôi hiểu rằng đây là một phần của giao thức SMTP để chấm công cụ nếu ký tự đầu tiên của dòng trong thông báo bắt đầu bằng .. Tập tin này sau đó sẽ được chọn bởi một dịch vụ khác mà cuối cùng sẽ thực hiện việc gửi email.

Tôi đã có thể thu hẹp nó xuống dòng chính xác khi tôi gọi client.Send(). Nếu tôi kiểm tra nội dung thư trước khi gửi, URL được định dạng chính xác. Kiểm tra nội dung thư sau khi tôi gọi, có .. hiện diện trong URL.

Câu hỏi của tôi, hay thắc mắc Tôi cho rằng, như sau:

  1. Đã có người khác gặp sự cố với dấu chấm stuffing khi sử dụng SmtpDeliveryMethod.SpecifiedPickupDirectory?
  2. Công việc của ai là xử lý chính xác điều này? .NET SMTP hoặc dịch vụ phụ chọn thông báo này vào một ngày sau đó và gửi nó đến đích cuối cùng?
  3. Bất kỳ lời khuyên nào về cách giải quyết vấn đề này?

Trước đây tôi đã thử số approach described here nhưng không thành công với nhiều ngoại lệ. Tôi chủ yếu tìm kiếm một cách để lưu tập tin eml này vào một vị trí trên đĩa mà sau này có thể được chọn sao lưu và gửi đi, kiến ​​thức của tôi về C# vẫn còn khá hạn chế vì vậy có thể có một cái gì đó đơn giản tôi vừa mới kết thúc. tìm kiếm, vì vậy bất kỳ lời khuyên hay hướng dẫn nào sẽ được đánh giá cao!

Tôi đã tạo một đoạn mã mẫu nhỏ để thử và tạo lại vấn đề, đây không phải là nội dung chính xác tôi đang sử dụng, nhưng nó cho thấy rằng sau khi gửi qua phương thức client.Send(), có 2 '..' ở đầu chuỗi.

using (var client = new SmtpClient()) 
{ 
client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; 
client.PickupDirectoryLocation = @"C:\temp"; 
var message = new MailMessage(); 
message.To.Add(new MailAddress("[email protected]")); 
message.From = new MailAddress("[email protected]"); 
message.Subject = "Smtp Dot Stuffing Test"; 
message.Body = ".A.B.C..... .0.1.2.3.4.5.6.7.8.9"; 
client.Send(message); 
} 
+0

Bạn có thể hiển thị cho chúng tôi một số mã có liên quan không? – Dawnkeeper

+0

@Dawnkeeper Tôi vừa thêm một đoạn mã mẫu nhỏ để chứng minh vấn đề –

Trả lời

3

SmtpClient không được nhồi byte khi lưu vào tệp. Điều đó chỉ cần thiết khi thực sự "tải lên" luồng tin nhắn đến một máy chủ SMTP để ngăn chặn kết thúc sớm lệnh DATA (kết thúc bằng dòng: ". \ R \ n").

Nếu SmtpClient là byte nhồi khi lưu vào một tệp, đó là hành vi khá bị hỏng.

Vì điều này là không thể làm việc xung quanh nếu bạn đang sử dụng System.Net.Mail (và tôi giả sử bạn), tôi có thể khuyên bạn sử dụng MimeKit để tạo và lưu thư của bạn vào tệp thay thế.

Sau đó, nếu bạn cần phân tích lại thư và gửi thư qua SMTP, bạn có thể sử dụng MailKit để thực hiện điều đó.

+0

Vâng tôi đang sử dụng System.Net.Mail vì vậy âm thanh như nó là một cái gì đó bị hỏng trong đó sau đó. Ít nhất tôi đã không làm bất cứ điều gì rõ ràng là sai, tôi sẽ đưa ra đề nghị của bạn một đi và xem làm thế nào tôi nhận được trên.Cảm ơn lời khuyên –

+0

Chỉ cần thực hiện điều này một lần và một khi tôi gọi phương thức WriteTo() của MimeKits và kiểm tra tập tin eml kết quả, nó đã được định dạng tốt. Cảm ơn lời khuyên về Mimekit, thư viện khá hữu ích! –

+0

Không có prob, và cảm ơn! – jstedfast

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