Asp.Net 无法获取IIS拾取目录的解决办法[译]
Asp.Net 无法获取IIS拾取目录的解决办法
作者:Jason Doucette [MCP]
翻译:彭远志
原文地址:Fixing the cannot get IIS pickup directory error in ASP.NET
这是今年我第二次不得不面对的问题,所以我认为应该写下点什么。如果你有一个需要偶尔发送邮件的Asp.Net的网站,可能会有代码长的和下面的很像:
//这是简写,并非实际项目代码
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
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”的写入权限)。
这样不管怎样,使它为我工作了,但是对任意的服务器来说,可能因为我点击了某些地方对程序有着关键作用的一些有魔力的多选框,所以如果你仍有问题,或者知道这些问题的答案,请在评论中提出,正如我所提到的,我可能修改了一些自己没注意到的地方,导致可以发送邮件。如有不足,我将及时改正。
译者语:
本人的第一篇译文,不足之处欢迎大家指出,我将及时更正。最后祝大家新的一年爱情事业双丰收。
转载请注明出处,Thanks
Asp.Net 无法获取IIS拾取目录的解决办法[译]的更多相关文章
- [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果
[C#]使用 C# 代码实现拓扑排序 目录 0.参考资料 1.介绍 2.原理 3.实现 4.深度优先搜索实现 回到顶部 0.参考资料 尊重他人的劳动成果,贴上参考的资料地址,本文仅作学习记录之用. ...
- VS2013无法启动IIS Express Web的解决办法
关于 ASP.NET Web 开发服务器.本地 IIS和 IIS Express 的区别,请参见<VS2013无法启动IIS Express Web的解决办法>, 此文章最后提到的部分,即 ...
- HBase 高性能获取数据(多线程批量式解决办法) + MySQL和HBase性能测试比较
摘要: 在前篇博客里已经讲述了通过一个自定义 HBase Filter来获取数据的办法,在末尾指出此办法的性能是不能满足应用要求的,很显然对于如此成熟的HBase来说,高性能获取数据应该不是问题. ...
- Linux中ftp不能上传文件/目录的解决办法
在linux中不能上传文件或文件夹最多的问题就是权限问题,但有时也不一定是权限问题了,像我就是空间不够用了,下面我来总结一些ftp不能上传文件/目录的解决办法 在排除用户组和权限等问题后,最可能引 ...
- 在ASP.net中的UpdatePanel,弹窗失败解决办法
原文:在ASP.net中的UpdatePanel,弹窗失败解决办法 最开始我用: Response.Write("<script>alert('和哈呵呵呵呵呵呵!')</s ...
- 关于错误 openssl/ssl.h:没有那个文件或目录的解决办法
原文链接:https://blog.csdn.net/kulala082/article/details/68484314 首先得安装openssl:sudo apt-get install open ...
- 运行inetmgr提示“找不到文件”无法打开IIS管理器的解决办法
运行inetmgr提示“找不到文件”无法打开IIS管理器的解决办法 不知道什么时候开始运行inetmgr就提示找不到文件了,本以为是IIS坏了,这两天发现IIS服务还是可以运行的,只是运行inetmg ...
- 微信小程序-没有找到 node_modules 目录的解决办法
初次在微信开发者工具构建npm 没有找到 node_modules 目录的解决办法 第一步:设置-->项目设置-->使用npm模块 第二步:右键目录下miniprogram-->终端 ...
- 【转】Asp.Net Core2.0获取客户IP地址,及解决发布到Ubuntu服务器获取不到正确IP解决办法
1.获取客户端IP地址实现方法(扩展类) using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.ModelBinding; u ...
随机推荐
- 在linux系统中I/O 调度的选择 (转)
I/O 调度算法再各个进程竞争磁盘I/O的时候担当了裁判的角色.他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能. 在linux下面列出4种调度算法 CFQ (Completel ...
- JQuery 获取URL中传递的参数
该方法基于JQuery,然后给方法传递URL中的参数名,返回参数值 (function($){ $.getUrlParam = function(name){ var reg = ...
- LA 3882 And Then There Was One[约瑟夫问题的变形]
And Then There Was One UVALive - 3882 Sample Input Sample Output //设f[i]为(原约瑟夫问题)第i次要删除的标号 #includ ...
- Javascript模块化编程-初识[1]
JS模块化编程,已经成为一个迫切的需求.理想情况下,开发者只需要实现核心业务逻辑,其他都可以加载别人已经写好的模块. 但是,JS不是一种模块化编程语言,它不支持类,所以没有严格意义上的模块.为了实现模 ...
- Qt中的通用模板算法QtAlgorithms(qDeleteAll,qBinaryFind,qCountLeadingZeroBits,qPopulationCount,qFill,qSwap,qSort)
Qt在<QtAlgorithms>头文件中为我们提供了一系列的全局模板方法,这些模板方法主要用于容器操作,比如qDeleteAll().其在Qt中的声明如下: void qDeleteAl ...
- X86/X64处理器体系结构及寻址模式
由8086/8088.x86.Pentium发展到core系列短短40多年间,处理器的时钟频率差点儿已接近极限.尽管如此,自从86年Intel推出386至今除了添加一些有关流媒体的指令如mmx/sse ...
- 带有button而且能够运行单击事件的WINFORM窗口,体悟C#的创建过程
using System; using System.Drawing; using System.Windows.Forms; namespace Window{ class Window{ stat ...
- centos7 执行一个数据库脚本创建项目中的数据库
[root@localhost ~]# su postgres 切换用户 bash-4.2$ psql could not change directory to "/root": ...
- 扫盲-wpf依赖属性
一.什么是依赖属性 依赖属性就是一种自己可以没有值,并且可以通过绑定从其他数据源获取值.依赖属性可支持WPF中的样式设置.数据绑定.继承.动画及默认值. 将所有的属性都设置为依赖属性并不总是正确的解决 ...
- ansible3
一.setup模块 ansible的setup模块主要用来收集信息,查看参数: [root@localhost ~]# ansible-doc -s setup # 查看参数,部分参数如下: filt ...