.NET发邮件错误之"Could not access 'CDO.Message' object."

简介:

  今天,一个.NET的项目中涉及到发送邮件,其实.NET中发邮件是一件很简单的事,如果想发送一个simple的文本邮件只要几行代码就可以搞定。如:

复制代码
public   void  SendEmail( string  smtpServer,  string  fromAddr,  string  toAddr,  string  ccAddr,  string  bccAddr,  string  subject,  string  message,  out   int  errNum,  out   string  errText )
{
    MailMessage Message 
= new MailMessage();
    Message.To 
= toAddr;
    Message.From 
= fromAddr;
    Message.Cc 
= ccAddr;
    Message.Bcc 
= bccAddr;
    Message.Subject 
= subject;
    Message.Body 
= message;
    
    
try
    
{
        SmtpMail.SmtpServer 
= smtpServer;
        SmtpMail.Send(Message);
        errNum 
= 0;
        errText 
= "";
    }

    
catch(HttpException ex)
    
{
        errNum 
= ex.ErrorCode;
        errText 
= ex.Message;
    }

}
复制代码

  但就这么一段简单的代码,折腾了我一个上午,原因是总是提示"Could not access 'CDO.Message' object."的错误信息。由于是一个比较大的项目,测试起来比较麻烦,加之用的是公司的smtp server,所以就又写了一个单独的程序测试,结果一切正常。奇怪了,见鬼了?

  仔细对比代码,无任何不同之处,只有比较输入了,结果发现输入确实不同。在项目中,Message.Cc和Message.Bcc分别赋值为cc.address@xxx.combcc.address@xxx.com,而测试程序中这两项没有赋任何值。也许这就是原因所在,经过再次测试,果然如此。原来当我们把这两项赋值以后,公司的邮件程序会去验证它们的有效性,但如果不赋值,就不会去验证。之所以忽略了这一点,就是因为这两项是optional的,就想当然的随便填了一个值,结果就陷进去了。

  由此产生了对Message.From的测试,不过对于这个必填项它倒不去验证了。唉,都是公司的这个邮件服务器惹的祸。当我用localhost发邮件时,它才不管你三七二十一,只管发,什么地址也不验证。

  所以大家如果在公司写邮件程序并且打算用公司的smtp server的话,出现这个错误不要奇怪,只要把你的inputs好好理一下就没问题了。

  另外就这个错误在网上查了一下,其实有很多原因都可以引发这个错误,比如:

  1、smtp server没有设置正确,或它不可用

  2、用localhost或"127.0.0.1"作为smtp server,但却没有权限通过IIS SMTP Service来中转。要加入这个权限,打开IIS管理,右键单击SMTP Virtual Server,选择Properties->Access tab->Relay,在Relay Restrictions对话框中,加入127.0.0.1,然后重启IIS即可。
3、最好邮件地址都用有效的,不要用些asdf@asdf.com什么的。





   本文转自loose_went博客园博客,原文链接:http://www.cnblogs.com/michaelxu/archive/2008/06/18/1224360.html,如需转载请自行联系原作者



相关文章
|
存储 对象存储
【阿里云OSS】You have no right to access this object because of bucket acl.
【阿里云OSS】You have no right to access this object because of bucket acl.
9190 1
【阿里云OSS】You have no right to access this object because of bucket acl.
|
开发框架 .NET 网络安全
虚拟主机ASP.NET 使用SSL加密465端口发邮件demo
虚拟主机ASP.NET 使用SSL加密465端口发邮件demo
|
存储 SQL Oracle
JDBC第二天~JDBC之 DAO(Data Access Object)
JDBC第二天~JDBC之 DAO(Data Access Object)
145 0
JDBC第二天~JDBC之 DAO(Data Access Object)
|
对象存储
访问oss出现报错:You have no right to access this object because of bucket acl
访问oss出现报错:You have no right to access this object because of bucket acl 也配置bucket权限和RAM用户权限了但是还是报错,然后看了下代码,发现到httpClient.execute(req)就直接403了 能问下大佬们这是什么问题吗,百度也没找到
|
JavaScript 前端开发
Do not access Object.prototype method 'hasOwnProperty' 问题原因及解决方法
使用Vue.js启动新项目将自动生成配置为与ESLint一起使用的样板。ESLint是可插拔和可配置的Linter工具,可帮助您识别和报告JavaScript中的不良模式,因此您可以轻松维护代码质量。如果您在不受控制的情况下开始编程,则可能会引入一些对ESLint不利的做法。
510 0
|
设计模式 数据库 容器
.NET Core 中对象池(Object Pool)的使用
.NET Core 中对象池(Object Pool)的使用
191 0
艾伟_转载:[你必须知道的.NET】object成员,不见了!
  在.NET世界了,object是公认的造物主,其麾下的7大成员,个顶个的横行在任何系统的任何代码角落。 public class Object{public Object();public virtual bool Equals(object obj);public static bool ...
760 0
|
.NET
一起谈.NET技术,.NET Framework源码研究系列之---万法归宗Object
  经过前面三篇关于.NET Framework源码研究系列的随笔,相信大家都发现其实.NET Framework的实现其实并不复杂,也许跟我们自己做的项目开发差不多。本人也是这样的看法。不过,经过仔细深入的研究,我们还是会发现一下平时很难注意到的东西,而这些东西对我们完善思路,开阔眼界,锻炼良好的编码素质有着很大的意义.   我们知道.NET中所有的类型(包括:引用类型,值类型)都从Object类派生过来,由此可以说Object是所有类型的根本。
1005 0
|
SQL 存储 .NET
一起谈.NET技术,使用LINQ Expression构建Query Object
  这个问题来源于Apworks应用开发框架的设计。由于命令与查询职责的分离,使得基于CQRS体系结构风格的应用系统的外部存储系统的结构变得简单起来:在“命令”部分,简单地说,只需要 Event Store和Snapshot Store来保存Domain Model;而“查询”部分,则又是基于事件派送与侦听的系统集成。
992 0
|
XML 测试技术 数据格式
一起谈.NET技术,如何将XML与OBJECT进行相互转换(泛型以及通用方法)
  对于ORMCodeHelper(Keny的),完全的采用插件式开发,即插即用,个人感觉还是比较爽的,架构不错。它包括了SQL SERVER 2000,SQL SERVER 2005以及ORACLE的相关C#代码的生成。
819 0

热门文章

最新文章