2014-10-24 5 views
5

Надеясь, что кто-то сможет помочь с этим, я оглядывался, и я не могу найти ответ нигде..NET 4.5 SMTP Client Dot Stuffing Issue при доставке в каталог рассылки

Я создаю почтовое сообщение, которое будет доставлено в указанную директорию пикапа, этот код использовался многократно в прошлом без проблем. Теперь, когда я проверяю полученный файл и, более конкретно, URL-адрес в файле eml, я вижу, что в середине есть двойной .. Из того, что я читал, я понимаю, что это часть протокола SMTP для точечного материала, если первый символ строки в сообщении начинается с .. Этот файл позже будет подхвачен другой службой, которая в конечном итоге выполнит отправку электронной почты.

Я смог сузить его до точной линии, когда я звоню client.Send(). Если я проверяю тело сообщения перед отправкой, URL-адрес будет правильно сформирован. Проверяя тело сообщения после того, как я его вызвал, в URL присутствует ...

Мой вопрос или вопросы, я полагаю, являются следующие:

  1. Кто-нибудь еще сталкивался вопрос с точки фарша при использовании SmtpDeliveryMethod.SpecifiedPickupDirectory?
  2. Чья это задача, чтобы правильно справиться с этим? .NET SMTP или вторичная служба, которая выбирает это сообщение позже и отправляет его в конечный пункт назначения?
  3. Любые советы о том, как разрешить это?

Я ранее пробовал approach described here, но он терпел неудачу с многочисленными исключениями.

Я в основном ищу способ сохранить этот файл eml в месте на диске, которое впоследствии можно будет отбросить и отправить, мои знания на C# все еще довольно ограничены, поэтому может быть что-то простое, я просто закончил так что любые советы или рекомендации были бы чрезвычайно оценены!

Я создал небольшой образец кода, чтобы попытаться воссоздать проблему, это не точный контент, который я использую, но он показывает, что после отправки через метод client.Send() есть 2 '..' в начале строки.

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

Можете ли вы показать нам соответствующий код? – Dawnkeeper

+0

@Dawnkeeper Я только что добавил небольшую часть кода примера, чтобы продемонстрировать проблему. –

ответ

3

SmtpClient не должен быть байтовым набивкой при сохранении в файл. Это необходимо только при фактической «загрузке» потока сообщений на SMTP-сервер, чтобы предотвратить преждевременное завершение команды DATA (которая заканчивается строкой: «. \ R \ n»).

Если SmtpClient является байтовой набивкой при сохранении в файл, это довольно нарушенное поведение.

Поскольку это невозможно обойти, если вы используете System.Net.Mail (и я предполагаю, что вы есть), я бы рекомендовал использовать MimeKit для создания и сохранения вашего сообщения в файл.

Затем, если вам нужно повторно разобрать сообщение и отправить его через SMTP, вы можете использовать MailKit для этого.

+0

Да, я использую System.Net.Mail так звучит, что там что-то сломалось. По крайней мере, я ничего не делал неправильно, я дам ваше предложение пойти и посмотреть, как я нахожусь.Спасибо за совет –

+0

Просто дал это, и однажды я вызвал метод WriteTo() 'MimeKits и проверил полученный файл eml, который был полностью отформатирован. Спасибо за отзыв о Mimekit, довольно полезную библиотеку! –

+0

Без проблем, спасибо! – jstedfast

 Смежные вопросы

  • Нет связанных вопросов^_^