SpecifiedPickupDirectory не будет создавать файлы, пока пользователь не просмотрит их на сервере. - PullRequest
9 голосов
/ 07 декабря 2011

Я использую «трюк» (хорошо описанный здесь ) для хранения моих электронных писем на сервере приложений во время тестирования.

Мой файл конфигурации выглядит следующим образом:

<system.net>  
    <mailSettings>    
        <smtp deliveryMethod="SpecifiedPickupDirectory" from="no-reply@here.com">      
            <specifiedPickupDirectory pickupDirectoryLocation="E:\EmailStore" />    
        </smtp>  
    </mailSettings>
</system.net>

Каталог существует, и у него нет проблем с правами.

Вот проблема.Файлы не будут созданы, пока я не перейду к папке на сервере.Затем внезапно взрыва все файлы попадают в каталог.

Кто-нибудь есть какие-либо идеи, что происходит?

Я заметил, что есть другой выбор- PickupDirectoryFromIis - но мне неясно, когда мне следует использовать SpecifiedPickupDirectory и когда мне следует использовать PickupDirectoryFromIis.

В чем разница между SpecifiedPickupDirectory и PickupDirectoryFromIis?Когда я должен использовать один над другим?Это причина того, что файлы не появляются, пока я не перехожу?

Ответы [ 3 ]

7 голосов
/ 14 декабря 2011

Это был проект, который был перенесен из ASP.NET 3.5 в ASP.NET 4.0

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

Наилучшим предположением по причине было то, что GC не вызывался и буфер файлов не очищался.

0 голосов
/ 10 декабря 2011

Я пытался написать (и получить из Интернета тоже) разницу между методами: http://msdn.microsoft.com/en-us/library/system.net.mail.smtpdeliverymethod.aspx

Network

Письмо отправляется через прямое соединение с указанным SMTP-сервером.

SpecifiedPickupDirectory

Указывает, что каталог, указанный PickupDirectoryLocation, будет использоваться в качестве каталога раскладки SMTP. Если SMTP-клиент не может выполнить запись в каталог каталога раскладки, отправка вызывает исключение ввода-вывода. Каталог не будет создан, если он не существует. Учетные данные текущего запущенного потока или процесса будут использоваться для доступа к каталогу . Это полезно, когда у вас есть внешняя пользовательская программа, которая берет сообщения из этой папки и обрабатывает их

PickupDirectoryFromIis

Сообщение электронной почты подготовлено, и файл EML сохранен в каталоге по умолчанию, из которого IIS получает отправленные в очередь электронные письма для отправки. По умолчанию это: \ Inetpub \ mailroot \ Queue.

Однако при использовании второго и третьего методов доставки ваше веб-приложение не может быть уведомлено о любых ошибках, которые могут возникнуть во время передачи сообщения, и оно будет зависеть от IIS (или другого почтового агента, который может использоваться) для справиться с ними. В целом, метод PickupDirectoryFromIis является предпочтительным, если только вашему приложению ASP.NET не предоставлено право записи в почтовые папки IIS (уточните у службы веб-хостинга, не используете ли вы свои собственные серверы). ТАК, может быть проблема с разрешением?

0 голосов
/ 10 декабря 2011

Это странно.Мы также используем SpecifiedPickupDirectory для наших тестовых устройств, чтобы тестировать функции отправки / получения электронной почты.Тем не менее, мы храним каталог на диске C: \.Подключен ли диск E: \ к сетевому диску?Или это местный?Вы пытались изменить его в местоположение на C: \?У вас такая же проблема?

...