Считывание mailroot-path для IIS 6 и 7 с использованием c #

Я пытаюсь прочитать путь mailroot к папкам Drop и Pickup для моего домена виртуального сервера SMTP. В настоящее время мне это нужно для доменов, созданных с помощью IIS 6.0, но в долгосрочной перспективе также потребуется, чтобы мое приложение было совместимо с IIS 7. Может ли кто-нибудь дать мне несколько указателей, как это сделать?

Спасибо!

Дополнительная информация:

  • Что у меня: домен виртуального сервера SMTP с локальным псевдонимом: mydomain

  • Что мне нужно: путь к почтовому корню (по умолчанию: C: \ inetpub \ mailroot), где должны быть найдены папки Badmail, Drop, Pickup и Queue. Если это невозможно, то хотя бы путь к папке Drop

  • Зачем мне это нужно? Например. с помощью IIS 6.0 пользователи могут изменить папку для перетаскивания в определенное для пользователя место. Поэтому я не хочу жестко кодировать путь, но зачитываю его с помощью C #.

  • Я пытался найти эту информацию:

    • Чтение виртуальных каталогов

    • Проверка свойств iisWebSite

    • SmtpDeliveryMethod.PickupDirecotryFomIis

    • System.Net.Mail.IisPickupDirectory.GetPickupDirectory () -> не может найти метод

    • Чтение smtp.PickupDirecotryLocation в строку -> возвращает пустую строку

Был бы действительно признателен за любую помощь / идеи!


person niedda29    schedule 11.06.2013    source источник


Ответы (2)


Я не уверен, но это может вам помочь. Поскольку и IIS6, и IIS7 имеют одинаковую настройку.

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

person Jalpesh Vadgama    schedule 11.06.2013
comment
Спасибо! Прочитал статью. Это было интересно, хотя и не совсем то, что я ищу. Я, наверное, недостаточно четко обозначил свою проблему. Отредактирую свой вопрос ... - person niedda29; 11.06.2013

Информация, которую вы ищете, находится в метабазе 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.

person galets    schedule 20.04.2015