Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET SMTPClient-挂起的传出邮件存储在哪里?_.net_Smtpclient_Outgoing Mail - Fatal编程技术网

.NET SMTPClient-挂起的传出邮件存储在哪里?

.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服务器,邮件突然仓促离开。与此同时,它在哪里?同样的

如果我已排队等待通过System.Net.Mail.SMTPClent发送一些电子邮件,我在哪里可以找到此邮件?对于Windows SMTP客户端,它位于C:\inetpub\mailroot文件夹中-是否有类似的.NET客户端文件夹

编辑:这里有一个例子。如果我关闭XP计算机上的传出SMTP服务器,然后运行一个发送十几封电子邮件的应用程序,它们会在某处排队,因为.NET SMTPClient.Send调用成功。几个小时后,我启动了本地SMTP服务器,邮件突然仓促离开。与此同时,它在哪里?同样的行为也发生在我的Vista桌面上,虽然我没有本地SMTP服务器-我可以通过在防火墙上阻塞端口25来复制该功能,然后在某处邮件队列。在哪里

这个问题的原因是我想在我拥有的服务器上重新启用SMTP服务,但我不知道在此期间排队的是什么,我想在重新启用服务时确保队列是干净的。这样,客户就不会突然收到非常非常陈旧的排队电子邮件

编辑:显然,我不知道我在说什么。在Vista上执行此操作时:

    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目录并查看我的邮件。但我还是想知道默认文件夹在哪里!为什么不搜索邮件呢?它们不是以某种邮件格式存储的吗?