1

SMTP 仮想サーバー ドメインのドロップ フォルダーとピックアップ フォルダーのメールルート パスを読み取ろうとしています。現在、IIS 6.0 で作成されたドメインにこれ​​が必要ですが、長期的にはアプリケーションが IIS 7 と互換性を持つ必要があります。

ありがとう!

詳細:

  • 私が持っているもの: ローカル エイリアスを持つ SMTP 仮想サーバー ドメイン: mydomain

  • 必要なもの: Badmail、Drop、Pickup、および Queue フォルダーが見つかる mailroot パス (デフォルト: C:\inetpub\mailroot)。それが不可能な場合は、少なくともドロップ フォルダーへのパス

  • なぜ私はこれが欲しいのですか?たとえば、IIS 6.0 を使用すると、ユーザーはドロップ ディレクトリをユーザー固有の場所に変更できます。したがって、パスをハードコードするのではなく、C# を使用して読み取ります。

  • この情報を次の方法で見つけようとしました。

    • 仮想ディレクトリの読み取り

    • iisWebSite プロパティの確認

    • SmtpDeliveryMethod.PickupDirecotryFomIis

    • System.Net.Mail.IisPickupDirectory.GetPickupDirectory() --> メソッドが見つかりません

    • smtp.PickupDirecotryLocation を文字列に読み込む --> 空の文字列を返す

ヘルプ/アイデアを本当に感謝します!

4

2 に答える 2

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 に答える