asp.net无法获取iis目录的问题解决方法

如果你有一个需要偶尔发送邮件的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 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”的写入权限)。

这样不管怎样,使它为我工作了,但是对任意的服务器来说,可能因为我点击了某些地方对程序有着关键作用的一些有魔力的多选框,所以如果你仍有问题,或者知道这些问题的答案,请在评论中提出,正如我所提到的,我可能修改了一些自己没注意到的地方,导致可以发送邮件。如有不足,我将及时改正。

(0)

相关推荐

  • asp.net无法获取iis目录的问题解决方法

    如果你有一个需要偶尔发送邮件的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 Sm

  • 在asp.net中获取当前页面的URL的方法(推荐)

    获取Url的方法有两种,通过后台获得或通过前面js获得,如下: 1.通过C#获取当前页面的URL string url = Request.Url.AbsoluteUri; //结果: http://www.jb51.net/web/index.aspx string host = Request.Url.Host; //结果:www.jb51.net string rawUrl = Request.RawUrl; //结果:/web/index.aspx string localPath =

  • ASP.NET State service状态服务的问题解决方法

    异常详细信息: System.Web.HttpException: 无法向会话状态服务器发出会话状态请求.请确保已启动 ASP.NET State service,并且客户端和服务器端口是相同的.如果服务器位于远程计算机上,请检查 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection 的值,确保服务器接受远程请求. 这是因为ASP.NET State s

  • asp.net部署到IIS常见问题的解决方法

    今天捣鼓umbraco,在本地都弄好了,结果放到服务器里面却出现了异常.网站找了好多资料,最终还是把问题解决了. 下面把解决方案说下,具体的问题就不一一罗列了: 1.没有安装对应的.net framework 框架 解决方案: .net 3.5以下的框架要通过[打开或关闭windows功能]这个地方来安装. 4.0以上的框架要通过微软官方网站下载后来安装. 2.IIS没有注册成功 解决方案: 在CMD窗体,运行如下命令: .net 2.0框架注册: C:\WINDOWS\Microsoft.NE

  • ASP.NET拒绝访问临时目录的解决方法

    今天把博客程序部署到一台阿里云Windows主机上,通过浏览器访问时出现下面的错误: 复制代码 代码如下: 创建 BlogConfigurationSettings 的配置节处理程序时出错: 拒绝访问临时目录.以其运行 XmlSerializer 的身份"IIS APPPOOL\www.cnblogs.com"没有足够的权限访问临时目录.CodeDom 将使用此进程用于进行编译的用户帐户,因此如果用户对系统临时目录没有访问权限,则将无法编译.使用 Path.GetTempPath()

  • asp.net Request获取url信息的各种方法比较

    本页地址: Request.URL; 上页地址: 复制代码 代码如下: Request.UrlReferrer Request.ServerViables["http_referer"] Request.RawUrl Request.RawUrl.QueryAndPath System.IO.Path.GetFileName(Request.FilePath.ToString()) 在ASP.NET编程中经常需要用Request获取url的有关信息,Request中有多种方法获取 ur

  • 使用asp.net的pageDataSource中时索引问题解决方法

    出现错误情况: 当前页面在数据的除第一页的任何一个页面时,重新条件查询并且是新条件的总页数小于刚才查询得到的页码时,就会出现"索引 20 不是为负数,就是大于行数"的类似的错误! 原因分析: 当查询的数据的页码索引大于1时,重新查询条件时,当前所得数据的页码数又少于上次所得到的页码,所以新查询索引小于上次查询索引,出现索引大于行数的问题. 解决方法: 每次重新查询前把页码索引初始化为1,

  • IOS获取各种文件目录路径的方法

    iphone沙箱模型有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory()), 手动保存的文件在documents文件里 Nsuserdefaults保存的文件在tmp文件夹里 1.Documents 目录:您应该将所有de应用程序数据文件写入到这个目录下.这个目录用于存储用户数据或其它应该定期备份的信息. 2.AppName.app 目录:这是应用程序的程序包目录,包

  • C#实现获取IIS站点及虚拟目录信息的方法

    本文实例讲述了C#实现获取IIS站点及虚拟目录信息的方法.分享给大家供大家参考.具体如下: using System; using System.DirectoryServices; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { DirectoryEntry rootEntr

  • ASP.NET编程获取网站根目录方法小结

    本文实例讲述了ASP.NET编程获取网站根目录方法.分享给大家供大家参考,具体如下: 获取网站根目录的方法有几种如: Server.MapPath(Request.ServerVariables["PATH_INFO"]) Server.MapPath("/") Server.MapPath("")//当前代码文件所在的目录路劲 Server.MapPath(".") Server.MapPath("../"

随机推荐