SpecifiedPickupDirectory在服务器上的用户查看之前不会创建文件

时间:2011-12-07 19:30:58

标签: asp.net iis smtp

我正在使用"技巧" (很好地描述了here)在测试期间将我的电子邮件存储在应用服务器上。

我的配置文件如下所示:

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

目录存在且没有权限问题。

这是问题所在。在我导航到服务器上的文件夹之前,不会创建文件。然后突然爆炸所有文件都弹出到目录中。

任何人都知道发生了什么事?

我注意到还有另一种选择 - PickupDirectoryFromIis - 但我不知道何时应该使用SpecifiedPickupDirectory以及何时使用PickupDirectoryFromIis

SpecifiedPickupDirectoryPickupDirectoryFromIis之间有什么区别?我什么时候应该使用另一个?这是导致文件没有出现的原因吗?

3 个答案:

答案 0 :(得分:7)

这是一个从ASP.NET 3.5迁移到ASP.NET 4.0的项目

System.Net.Mail.SmtpClient现在似乎实现了IDisposable。更改代码使用以下模式似乎已经解决了问题。

最好的猜测是因为没有调用GC并且没有刷新文件缓冲区。

using (System.Net.Mail.MailMessage email = new System.Net.Mail.MailMessage())
{
   using (System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient())
   {
      // code
   }
}

答案 1 :(得分:0)

这很奇怪。我们也将SpecifiedPickupDirectory用于我们的测试装置,以便对电子邮件发送/接收功能进行单元测试。但是,我们将目录保留在C:\驱动器上。 E:\驱动器是否映射到网络驱动器?还是本地的?您是否尝试将其更改为C:\上的某个位置?你有同样的问题吗?

答案 2 :(得分:0)

我试图写出(并从网上获取)方法之间的区别:http://msdn.microsoft.com/en-us/library/system.net.mail.smtpdeliverymethod.aspx

Network

电子邮件通过直接连接发送到指定的SMTP服务器。

SpecifiedPickupDirectory

表示PickupDirectoryLocation指定的目录将用作SMTP提取目录。 如果SMTP客户端无法写入取件目录位置,则发送会引发I / O异常。如果该目录不存在,则不会创建该目录。 当前运行的线程或进程的凭据将用于访问目录。 当您有一个外部自定义程序从该文件夹中获取电子邮件并对其进行处理时,这非常有用

PickupDirectoryFromIis

准备好电子邮件,并将EML文件保存到默认目录中,IIS从中获取要发送的排队电子邮件。默认情况下,这是:\ Inetpub \ mailroot \ Queue。

但是,在使用第二种和第三种传递方法时,无法通知您的Web应用程序在传输邮件期间可能发生的任何错误,并且将由IIS(或可能使用的其他邮件代理)决定处理它们。通常,PickupDirectoryFromIis方法是首选方法,除非您的ASP.NET应用程序没有权限写入IIS邮件文件夹(如果您不使用自己的服务器,请检查您的Web托管服务提供商服务)。 那么,可以是许可问题吗?