asp.net无法获取iis目录的问题解决方法
2014-02-08 00:00
751 查看
如果你有一个需要偶尔发送邮件的Asp.Net的网站,可能会有代码长的和下面的很像:
可能它曾经工作,但是当你切换到或初步部署到新的Windows 2008 服务器时,你会遇到错误提示信息"Cannot get IIS Pickup Directory!"
现在,我经常称呼自己为世界上最厉害的系统管理员。这不是我研究的方向。我并不非常擅长,但是有时在实际工作中我不得不面对和解决这些问题以获取报酬。
1) SMTP服务是否安装?
你的Web服务器或许还没有安装SMTP服务,所以进入服务管理中确定SMTP服务在功能列表中。如果不在,就需要你添加上去。
2) SMTP是否已配置?
仅仅确定SMTP服务已经安装是不够的。首先,当你服务器启动时(我曾经遇到些客户端软件安装前可以发送邮件,但是之后就不可以了,他们重启了服务器,而Mail服务没启动,就这么简单),确保你的SMTP服务也跟着自动启动。进入服务,确保SMTP服务在那里,并且已经启动,启动类型也为自动。
然后,你应该配置SMTP服务――说句实话,我对此知道的不多,所以我就不详细解释了,但是你需要知道SMTP仍然是IIS6.0的一部分,所以你可以在IIS6.0的管理界面找到它。一个快速突破点,因为它可能不符合了一些接收邮件服务器需要一个完整的合格域名的要求,而你的服务器可能只有一个被严格被限制使用的简单域名,比如像“Server15”之类的,所以在SMTP属性中,Delivery标签下 ,点击添加按钮,给服务器一个真正的完整的满足要求的域名。
3) 防火墙是打开的吗?
你的一些操作有可能与防火墙冲突,所以现在是个好时机去排除SMTP安装故障。你可以通过Telnet本机通过端口25,手动给自己发个简单的邮件。下面一个例子可以照着做。
点击回车键,过会进入发件箱 如果你不能连接,或者邮件不能送达,这里还有一些其他问题需要你解决,因为防火墙是不会影响拾取目录的获取。
4) IIS是否有权限获取元数据(拾取目录信息)
这里我们将会遇到实际的出错原因--你在网站跑的程序也许没有权限获取保存着拾取目录名的IIS 元数据(metabase),这通常就是引起错误的原因。
你需要下载IIS 6.0 资源包。里面有你需要用到的“metaacl.vbs”脚本而我不需要的。[点我下载]
下载并安装,然后运行Metabase Explorer(你可以搜索它,我的在“Program Files (x86)\IIS Resources\Metabase Explorer”目录下)。 你应该在你的IIS进程为SmtpSvc服务添加读权限(我为IIS_IUSRS组添加了权限,在配置中查看为你工作的是否有权限)。
5) IIS是否有权限写入拾取目录
下面这步只是补充,因为你在下次使用网站来发送邮件可能会遇到权限错误。这时,你需要为你的IIS用户添加写入拾取目录的权限(对我而言,我为“IIS_IUSES”添加了拾取目录“c:\inetpub\mailroot”的写入权限)。
这样不管怎样,使它为我工作了,但是对任意的服务器来说,可能因为我点击了某些地方对程序有着关键作用的一些有魔力的多选框,所以如果你仍有问题,或者知道这些问题的答案,请在评论中提出,正如我所提到的,我可能修改了一些自己没注意到的地方,导致可以发送邮件。如有不足,我将及时改正。
//这是简写,并非实际项目代码 public void Send(string from, string to, string subject, string body) { var msgMail = new MailMessage(from, to, subject, body); msgMail.IsBodyHtml = true; var server = new SmtpClient("localhost"); server.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; server.UseDefaultCredentials = true; server.Send(msgMail); }
可能它曾经工作,但是当你切换到或初步部署到新的Windows 2008 服务器时,你会遇到错误提示信息"Cannot get IIS Pickup Directory!"
现在,我经常称呼自己为世界上最厉害的系统管理员。这不是我研究的方向。我并不非常擅长,但是有时在实际工作中我不得不面对和解决这些问题以获取报酬。
1) SMTP服务是否安装?
你的Web服务器或许还没有安装SMTP服务,所以进入服务管理中确定SMTP服务在功能列表中。如果不在,就需要你添加上去。
2) SMTP是否已配置?
仅仅确定SMTP服务已经安装是不够的。首先,当你服务器启动时(我曾经遇到些客户端软件安装前可以发送邮件,但是之后就不可以了,他们重启了服务器,而Mail服务没启动,就这么简单),确保你的SMTP服务也跟着自动启动。进入服务,确保SMTP服务在那里,并且已经启动,启动类型也为自动。
然后,你应该配置SMTP服务――说句实话,我对此知道的不多,所以我就不详细解释了,但是你需要知道SMTP仍然是IIS6.0的一部分,所以你可以在IIS6.0的管理界面找到它。一个快速突破点,因为它可能不符合了一些接收邮件服务器需要一个完整的合格域名的要求,而你的服务器可能只有一个被严格被限制使用的简单域名,比如像“Server15”之类的,所以在SMTP属性中,Delivery标签下 ,点击添加按钮,给服务器一个真正的完整的满足要求的域名。
3) 防火墙是打开的吗?
你的一些操作有可能与防火墙冲突,所以现在是个好时机去排除SMTP安装故障。你可以通过Telnet本机通过端口25,手动给自己发个简单的邮件。下面一个例子可以照着做。
telnet localhost 25 HELO somehost.com MAIL FROM: yourname@somedomain.com RCPT TO: the_to_address@somedomain.com DATA Subject: the subject of the mail Blah blah blah message body
点击回车键,过会进入发件箱 如果你不能连接,或者邮件不能送达,这里还有一些其他问题需要你解决,因为防火墙是不会影响拾取目录的获取。
4) IIS是否有权限获取元数据(拾取目录信息)
这里我们将会遇到实际的出错原因--你在网站跑的程序也许没有权限获取保存着拾取目录名的IIS 元数据(metabase),这通常就是引起错误的原因。
你需要下载IIS 6.0 资源包。里面有你需要用到的“metaacl.vbs”脚本而我不需要的。[点我下载]
下载并安装,然后运行Metabase Explorer(你可以搜索它,我的在“Program Files (x86)\IIS Resources\Metabase Explorer”目录下)。 你应该在你的IIS进程为SmtpSvc服务添加读权限(我为IIS_IUSRS组添加了权限,在配置中查看为你工作的是否有权限)。
5) IIS是否有权限写入拾取目录
下面这步只是补充,因为你在下次使用网站来发送邮件可能会遇到权限错误。这时,你需要为你的IIS用户添加写入拾取目录的权限(对我而言,我为“IIS_IUSES”添加了拾取目录“c:\inetpub\mailroot”的写入权限)。
这样不管怎样,使它为我工作了,但是对任意的服务器来说,可能因为我点击了某些地方对程序有着关键作用的一些有魔力的多选框,所以如果你仍有问题,或者知道这些问题的答案,请在评论中提出,正如我所提到的,我可能修改了一些自己没注意到的地方,导致可以发送邮件。如有不足,我将及时改正。
相关文章推荐
- asp.net无法获取iis目录的问题解决方法
- 【ASP.NET 问题】Win7中IIS被防火墙阻止导致外网无法访问的解决方法。
- Asp.Net 应用程序在IIS发布后无法连接oracle数据库问题的解决方法
- Asp.Net 应用程序在IIS发布后无法连接oracle数据库问题的解决方法
- Asp.Net 无法获取IIS拾取目录的解决办法[译]
- 安装完vs.2005之后,重新安装iis后无法使用http方式访问asp.net工程的页面的问题的解决方法
- Asp.Net 应用程序在IIS发布后无法连接oracle数据库问题的解决方法
- 解决iis版本问题,不能在VS2003中创建asp.net应用程序的方法
- 我在安装TFS 2008的时候遇到的问题以及解决方法一windows 2003 iis中总是不出现ASP.NET 2.0
- Win7的IIS配置asp.net出现“由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面。”(图文解决方法)
- win2003配置IIS ,发布asp.net 时出现错误 “分析器错误信息: 无法识别的属性“type”。” 的解决方法
- ASP.NET在IE10中无法判断用户已登入及Session丢失问题解决方法
- 关于asp.net[没有相关的源行]错误的解决方法及IIS安装问题
- 【转】ASP.net2。0中解决无法获取 GridView 隐藏列值问题
- 无法识别的属性“type”+IIS没有Asp.net配置选项的解决方法
- ASP.NET在IIS上部署使用Oracle数据库无法连接数据库解决方法
- 无法识别的属性“type”+IIS没有Asp.net配置选项的解决方法
- asp.net 前端使用jquery $post 方法调用webservice 部署到IIS时会无法使用的问题
- ASP.NET在IE10中无法判断用户已登入及Session丢失问题解决方法
- “Visual Studio.net已检测到指定的Web服务器运行的不是Asp.net1.1版。您将无法运行Asp.net Web应用程序或服务”问题的解决方法