今天客户说系统发不出来邮件,可是我是测试过才发的版本呀!
所以我想是不是发布的时候有问题,然后我发布了一个挂到IIS上,结果发现真发不出来。
然后我找呀找,因为我的邮件是带附件的,所以我去看附件有没有生成,进而发现附件(.xls文件)都没有。
我就很纳闷了,为什么在VS上运行没问题,在IIS上就不行呢,所以我就在发邮件的那段代码上加了个catch
然后把捕捉到得catch写到ini文件上,然后再发布看结果。
结果问题出来了:System.UnauthorizedAccessException: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。
上网一查是aspnet(XP)权限的问题,在2003系统里是network service.
解决方法:
运行 dcomcnfg
组件服务→计算机→我的电脑→DCOM配置
找到 Microsoft Excel Application 右键属性
“标识”标签里选择“交互式用户”
“安全”标签里 “启动和激活权限”“访问权限” “配置权限”全部选自定义并且编辑添加ASPNET(XP下,在03里是NETWORK SERVICE)账户,添加的时候要注意查找位置必须是本机,比如XX-PC。
同时给此用户最大的权限,然后一直确定,在来跑IIS下的项目,问题解决。