Readout mailroot-path for IIS 6 & 7 using c#

本文关键字:using amp mailroot-path for IIS Readout | 更新日期: 2023-09-27 18:18:01

我正在尝试为我的SMTP虚拟服务器域读出投递和拾取文件夹的邮件根路径。我目前需要这与IIS 6.0创建的域,但从长远来看,还需要我的应用程序与IIS 7兼容。谁能给我点建议,告诉我该怎么做?

谢谢!

更多细节:

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

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

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

  • 我已经试着找到这个信息:

    • 读取虚拟目录

    • 检查iisWebSite属性

    • SmtpDeliveryMethod。PickupDirecotryFomIis

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

    • 正在读取smtp。pickupdirectorylocation为字符串——>返回一个空字符串

将非常感谢任何帮助/想法!

Readout mailroot-path for IIS 6 & 7 using c#

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

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

您要查找的信息在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而不是