1

我正在尝试读出我的 SMTP 虚拟服务器域的 Drop 和 Pickup 文件夹的 mailroot-path。我目前需要使用 IIS 6.0 创建的域,但从长远来看,我的应用程序也需要与 IIS 7 兼容。有人可以给我一些关于如何执行此操作的指示吗?

谢谢!

更多详细信息:

  • 我所拥有的:具有本地别名的 SMTP 虚拟服务器域:mydomain

  • 我想要的是:找到死信、投递、分拣和队列文件夹的邮件根路径(默认值:C:\inetpub\mailroot)。如果那不可能,那么至少是 Drop 文件夹的路径

  • 我为什么要这个?例如,使用 IIS 6.0,用户可以将 Drop 目录更改为用户特定的位置。因此,我不想对路径进行硬编码,而是使用 c# 将其读出。

  • 我试图通过以下方式找到这些信息:

    • 读出虚拟目录

    • 检查 iisWebSite 属性

    • SmtpDeliveryMethod.PickupDirecotryFomIis

    • System.Net.Mail.IisPickupDirectory.GetPickupDirectory() --> 找不到方法

    • 将 smtp.PickupDirecotryLocation 读入字符串 --> 返回一个空字符串

真的会感谢任何帮助/想法!

4

2 回答 2

0

我不确定,但这可能会对你有所帮助。因为 IIS6 和 IIS7 都有相同的设置。

http://www.kbcafe.com/articles/HowTo.SMTP.CSharp.pdf

于 2013-06-11T09:03:05.923 回答
0

您要查找的信息位于 IIS 元数据库中。有访问元数据库的托管类,但您也可以直接读取文件。这是一个示例代码:

    public static string GetSmtpPickupFolder()
    {
        var doc = new XmlDocument();
        var fileName = Path.Combine(Environment.GetFolderPath(
                 Environment.SpecialFolder.Windows), @"System32\inetsrv\MetaBase.xml");
        if (!File.Exists(fileName))
        {
            return null;
        }

        doc.Load(fileName);

        var nsMgr = new XmlNamespaceManager(doc.NameTable);
        nsMgr.AddNamespace("c", doc.DocumentElement.NamespaceURI);

        var node = doc.SelectSingleNode(
            "/c:configuration/c:MBProperty/c:IIsSmtpServer", nsMgr);
        if (node == null)
        {
            return null;
        }

        var attr = node.Attributes["PickupDirectory"];
        if (attr == null)
        {
            return null;
        }

        return attr.Value;
    }

确保将其作为 64 位应用程序运行,否则文件系统重定向会将您发送到 c:\windows\SysWOW64

于 2015-04-20T23:16:27.890 回答