.NET SMTPClient-挂起的传出邮件存储在哪里?
如果我已排队等待通过System.Net.Mail.SMTPClent发送一些电子邮件,我在哪里可以找到此邮件?对于Windows SMTP客户端,它位于C:\inetpub\mailroot文件夹中-是否有类似的.NET客户端文件夹 编辑:这里有一个例子。如果我关闭XP计算机上的传出SMTP服务器,然后运行一个发送十几封电子邮件的应用程序,它们会在某处排队,因为.NET SMTPClient.Send调用成功。几个小时后,我启动了本地SMTP服务器,邮件突然仓促离开。与此同时,它在哪里?同样的行为也发生在我的Vista桌面上,虽然我没有本地SMTP服务器-我可以通过在防火墙上阻塞端口25来复制该功能,然后在某处邮件队列。在哪里 这个问题的原因是我想在我拥有的服务器上重新启用SMTP服务,但我不知道在此期间排队的是什么,我想在重新启用服务时确保队列是干净的。这样,客户就不会突然收到非常非常陈旧的排队电子邮件 编辑:显然,我不知道我在说什么。在Vista上执行此操作时:.NET SMTPClient-挂起的传出邮件存储在哪里?,.net,smtpclient,outgoing-mail,.net,Smtpclient,Outgoing Mail,如果我已排队等待通过System.Net.Mail.SMTPClent发送一些电子邮件,我在哪里可以找到此邮件?对于Windows SMTP客户端,它位于C:\inetpub\mailroot文件夹中-是否有类似的.NET客户端文件夹 编辑:这里有一个例子。如果我关闭XP计算机上的传出SMTP服务器,然后运行一个发送十几封电子邮件的应用程序,它们会在某处排队,因为.NET SMTPClient.Send调用成功。几个小时后,我启动了本地SMTP服务器,邮件突然仓促离开。与此同时,它在哪里?同样的
Dim mm As New System.Net.Mail.MailMessage("me@me.com", "you@you.com", "Testing", "this is a test")
Dim s As New System.Net.Mail.SmtpClient("localhost")
s.DeliveryMethod = Mail.SmtpDeliveryMethod.PickupDirectoryFromIis
s.Send(mm)
我得到一个异常,因为我没有IIS拾取文件夹。将其更改为“Mail.SmtpDeliveryMethod.Network”会立即导致异常,因为我没有运行SMTP服务器。我将在Server2003上测试这一点,但我可以发誓这两种方法在过去都有效。如果需要的话,我会做更多的测试并修改这个问题。从SmtpClient的MSDN页面看,它是可配置的。您可以使用该属性来决定是否立即发送邮件,是否将邮件排入IIS分拣文件夹(可能是C:\inetpub\mailroot)或是否将其放置在您选择的文件夹(由该属性指定)中。我使用的.NET SMTP客户端不会将邮件存储在任何位置。它只是发送。如果它应该发送的出站服务器关闭,它会立即发出异常
您已尝试在XP机箱上打开和关闭出站服务器。伟大的现在,尝试查找入站SMTP服务。入站和出站SMTP服务通过filedrop相互通信。默认情况下,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" />
</smtp>
</mailSettings>
您可以查看代码内项目,它显示了当
DeliveryMethod==SmtpDeliveryMethod时如何手动处理SMTP客户端创建的文件。SpecifiedPickupDirectory
说明有点模糊,但如果调用Send()
而您的DeliveryMethod
是Network
并且调用成功,那么它就不再属于.NET领域了。有些东西已经接受了它的交付,并且它正处于某个东西的队列中,当你打开可以重新连接外部世界的邮件服务器时,它会欣喜若狂。当DeliveryMethod
是Network
时,我非常确定(至少从反射器反汇编判断)它是直接在网络流上涂鸦,而不是通过某个中间临时文件。如果它无法打开连接并获取该流,那么它会抛出异常。这与我使用这门课的实际经验相符。希望对您有所帮助。您可以设置指定的收货目录和送货方式,以便更好地控制
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\" />
</smtp>
</mailSettings>
</sysetm.net>
既然你已经编辑了你的问题,我意识到我并没有真正回答它。我想你最好的办法是手动指定皮卡目录,这样你就知道它在哪里了。我找不到对其默认位置的任何引用。%也许吧。你现在走对了方向。由于我没有mailroot文件夹,将我的邮件发送到IIS分拣文件夹只会将其发送到深渊(糟糕的处理,Microsoft!),但我可以手动指定picup目录并查看我的邮件。但我还是想知道默认文件夹在哪里!为什么不搜索邮件呢?它们不是以某种邮件格式存储的吗?