.NET SMTPClient - 存储待处理的外发邮件的位置?

时间:2008-12-21 05:11:57

标签: .net smtpclient outgoing-mail

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

编辑:这是一个例子。如果我在我的XP计算机上关闭外发SMTP服务器,然后运行发送十几封电子邮件的应用程序,它们会在某处排队,因为.NET SMTPClient.Send调用成功。几个小时后,我启动了本地SMTP服务器,邮件突然停止了。在此期间它在哪里?虽然我没有本地SMTP服务器,但我的Vista桌面上会出现同样的行为 - 我可以通过阻止防火墙上的端口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服务器。我将在服务器2003上测试它,但我可以发誓这些都在过去工作。如果需要,我会做更多测试并修改问题。

5 个答案:

答案 0 :(得分:4)

从SmtpClient的MSDN页面看起来,它是可配置的。您可以使用DeliveryMethod属性来决定是否立即发送邮件,是否将其排入IIS提取文件夹(可能是C:\ inetpub \ mailroot),或者是否将其放在您选择的文件夹中(由{指定) {3}}属性)。

答案 1 :(得分:2)

描述有点模糊,但是如果你打电话给Send()并且你的DeliveryMethodNetwork并且调用成功,那么它就不再是.NET领域了。 Something 接受了它的交付,它坐在那个队列中,当你打开可以与外界连接的邮件服务器时,它会跳起来。当DeliveryMethodNetwork时,我非常确定(至少从Reflector反汇编判断)它是直接在网络流上涂鸦而不是通过某个中间临时文件。如果它无法打开连接并获取该流,那么它会以异常呕吐。这与我在使用这门课程时的实际经验相吻合。希望有所帮助。

答案 2 :(得分:1)

默认情况下,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>

您可以查看代码项目中的this article,其中显示了在DeliveryMethod == SmtpDeliveryMethod.SpecifiedPickupDirectory时如何手动处理SMTP客户端创建的文件。

答案 3 :(得分:1)

您可以设置指定的取件目录和交付方式以获得更好的控制

<system.net>
    <mailSettings>
        <smtp deliveryMethod="SpecifiedPickupDirectory">
            <specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\" />
        </smtp>
    </mailSettings>
</sysetm.net>

答案 4 :(得分:0)

我习惯的.NET SMTP客户端不会在任何地方存储邮件。它只是发送。如果它应该发送的出站服务器已关闭,它会立即发出异常。

您尝试在XP机上打开和关闭出站服务器。大。现在,尝试查找入站SMTP服务。入站和出站SMTP服务通过filedrop相互通信。