读取IIS 6&的邮件路径7使用c#

时间:2013-06-11 07:59:05

标签: c# iis iis-7 iis-6 filepath

我正在尝试读取SMTP虚拟服务器域的Drop和Pickup文件夹的mailroot路径。我目前需要这个用IIS 6.0创建的域名,但从长远来看,还需要我的应用程序与IIS 7兼容。任何人都可以给我一些指示如何做到这一点?

谢谢!

更多详情:

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

  • 我想要的: mailroot路径(默认值:C:\ inetpub \ mailroot),其中包含Badmail,Drop,Pickup和Queue文件夹。如果那是不可能的,那么至少是Drop文件夹的路径

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

  • 我试图通过以下方式查找此信息:

    • 读出虚拟目录

    • 检查iisWebSite属性

    • SmtpDeliveryMethod.PickupDirecotryFomIis

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

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

真的会恭喜任何帮助/想法!

2 个答案:

答案 0 :(得分:0)

我不确定,但这可能对你有帮助。由于IIS6和IIS7都具有相同的设置。

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

答案 1 :(得分: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而不是