4

如果我已将一些电子邮件排队等待通过 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 服务器。我将在服务器 2003 上对此进行测试,但我可以发誓这两者在过去都有效。如果需要,我将进行更多测试并修改问题。

4

5 回答 5

4

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

于 2008-12-21T05:19:34.077 回答
2

描述有点模糊,但是如果您调用Send()并且您的DeliveryMethodisNetwork并且调用成功,那么它不再属于 .NET 领域。某物已接受它进行投递,它正坐在某物的队列中,当您打开可以与外部世界重新连接的邮件服务器时,它会高兴地跳起来。When DeliveryMethodis Network,我很确定(至少,从 Reflector 反汇编来看)它直接在网络流上涂鸦,而不是通过一些中间临时文件。如果它无法打开连接并获取该流,那么它会出现异常呕吐。这与我使用这个类的实际经验不谋而合。希望有帮助。

于 2009-01-30T06:12:13.077 回答
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>

您可以查看代码项目中的这篇文章,该文章展示了如何手动处理 SMTP 客户端创建的文件DeliveryMethod == SmtpDeliveryMethod.SpecifiedPickupDirectory

于 2009-01-30T04:35:19.433 回答
1

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

<system.net>
    <mailSettings>
        <smtp deliveryMethod="SpecifiedPickupDirectory">
            <specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\" />
        </smtp>
    </mailSettings>
</sysetm.net>
于 2009-01-30T14:53:03.273 回答
0

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

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

于 2009-01-30T04:18:04.990 回答