我正在尝试读取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读入字符串 - >返回一个空字符串
真的会恭喜任何帮助/想法!
答案 0 :(得分:0)
我不确定,但这可能对你有帮助。由于IIS6和IIS7都具有相同的设置。
答案 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而不是