.NET SMTPClient - где находится ожидающая исходящая почта?

Если я поставил в очередь несколько писем, отправляемых через System.Net.Mail.SMTPClent, где я могу найти эту почту? С клиентом SMTP Windows он находится в папке C:\inetpub\mailroot - есть ли подобная папка для клиента .NET?

EDIT: Вот пример. Если я отключу исходящий SMTP-сервер на моем компьютере с XP, а затем запустил приложение, которое отправляет дюжину писем, они где-то стоят в очереди, так как вызов .NET SMTPClient.Send завершается успешно. Через несколько часов я запускаю локальный SMTP-сервер, и почта уходит внезапно. Где же это время? Такое же поведение наблюдается и на моем рабочем столе Vista, хотя у меня нет локального SMTP-сервера - я могу дублировать функциональность, блокируя порт 25 на брандмауэре, а затем куда-то пересылать очереди. Где?

Причиной этого вопроса является то, что я хочу снова включить службу SMTP на сервере, который у меня есть, но я не знаю, что было в очереди в то же время, и я хочу убедиться, что очередь чиста, когда Я снова включу службу. Таким образом, клиенты не получают действительно, действительно старые очереди в электронной почте все внезапно.

EDIT. Ясно, что я не знаю, о чем говорю. Когда я это делаю на Vista:

Dim mm As New System.Net.Mail.MailMessage("[removed_email]", "[removed_email]", "Testing", "this is a test")
 Dim s As New System.Net.Mail.SmtpClient("localhost")
 s.DeliveryMethod = Mail.SmtpDeliveryMethod.PickupDirectoryFromIis
 s.Send(mm)

Я получаю исключение, потому что у меня нет папки IIS pickup. Изменение его на "Mail.SmtpDeliveryMethod.Network" приводит к немедленному исключению, потому что у меня нет сервера SMTP. Я проверю это на сервере 2003 года, но я мог бы поклясться, что оба они работали в прошлом. Я сделаю еще несколько тестов и изменю вопрос, если это необходимо.

5 ответов

Из взглядов страниц MSDN для SmtpClient он настраивается. Вы можете использовать свойство DeliveryMethod, чтобы решить, отправляется ли почта немедленно, независимо от того, помещена ли она в папку IIS pickup (предположительно C:\inetpub\mailroot) или помещается в папку по вашему выбору (указанную PickupDirectoryLocation свойство.)


Описание немного расплывчато, но если вы вызываете Send(), а ваш DeliveryMethod - Network, и вызов завершается успешно, то он больше не входит в область .NET. Что-то приняло его для доставки, и оно сидит в той очереди, которая прыгает от радости, когда вы включаете почтовый сервер, который может подключаться к внешнему миру. Когда DeliveryMethod равно Network, я уверен (по крайней мере, судя по разборке Reflector), что он строит непосредственно по сетевому потоку, а не через некоторый промежуточный временный файл. Если он не смог открыть соединение и получить этот поток, то он рвет с исключением. Это совпадает с моим фактическим опытом использования этого класса. Надеюсь, что это поможет.


По умолчанию клиент SMTP использует сетевую отправку. Таким образом, никакие электронные письма не хранятся в любом месте.

Вот раздел конфигурации web.config

<mailsettings>
 <!--
 <smtp
 deliveryMethod = "Network" [Network | SpecifiedPickupDirectory | PickupDirectoryFromIis]
 from = "" [String]
 >
 <network
 defaultCredentials = "false" [true|false]
 host = "" [String]
 password = "" [String]
 port = "25" [number]
 userName = "" [String]
 />
 <specifiedPickupDirectory
 pickupDirectoryLocation = "" [String]
 />
 </smtp>
 -->
 <smtp deliverymethod="Network">
 <network defaultcredentials="false" port="25">
 </network></smtp>
 </mailsettings>

Вы можете взглянуть на эту статью в проекте кода, в котором показано, как обрабатывать вручную файлы, созданные SMTP-клиентом, когда DeliveryMethod == SmtpDeliveryMethod.SpecifiedPickupDirectory.


Вы можете установить указанный каталог пикапа и способ доставки для большего контроля

<system.net>
 <mailsettings>
 <smtp deliverymethod="SpecifiedPickupDirectory">
 <specifiedpickupdirectory pickupdirectorylocation="c:\Temp\">
 </specifiedpickupdirectory></smtp>
 </mailsettings>
</system.net>


Клиент .NET SMTP, к которому я привык, не хранит почту нигде. Он просто отправляет. Если исходящий сервер, к которому он должен быть отправлен, отключен, он немедленно дает исключение.

Вы пытались включить и выключить исходящий сервер на вашем XP-сервере. Отлично. Теперь попробуйте найти входящую службу SMTP. Входящие и исходящие службы SMTP общаются друг с другом с помощью filedrop.

licensed under cc by-sa 3.0 with attribution.