通过SmtpMail发送邮件,怎么会出错:eHttp.Message "未能访问“CDO.Message”对象。"

seaman_X 2004-05-09 11:40:17
是不是我设置不对,还是其他原因——希望高手解答。

MailMessage Message = getMailMessage( template,userInfo );

try
{
//SmtpMail.SmtpServer = ConfigurationSettings.AppSettings["SmtpServer"];
SmtpMail.Send(Message);
ErrDesc = string.Empty;
}
catch(System.Web.HttpException eHttp)
{
ErrDesc = eHttp.Message;
}
...全文
2621 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2004-08-17
  • 打赏
  • 举报
回复
很可能是你 smtp的服务没有开
mfkygazb 2004-08-17
  • 打赏
  • 举报
回复
关注
sgp1201 2004-08-16
  • 打赏
  • 举报
回复
为什么不引用CDO也可以?
还有我用using COD ;.net 报错,找不到是什么原因!
不过我的那个很稳定了!
sgp1201 2004-08-16
  • 打赏
  • 举报
回复
连hotmail 163 都测试可以的!
sgp1201 2004-08-16
  • 打赏
  • 举报
回复
这个是我改自微软帮助文档,我已经调试OK,不用引用CDO啊,只是服务器上要安装IIS的SMTP服务
using System.Web.Mail ;
private void SendMail(string sMailHost,string sMailFrom ,string sUser, string sPass,string sMailto ,string sSubject,string sBody)
{
try
{
try
{
MailMessage Message = new MailMessage();
Message.To = sMailto;
Message.From =sMailFrom;
Message.Subject = sSubject;
Message.Priority = MailPriority.Low;
Message.BodyFormat = MailFormat.Html;
Message.Body = sBody;
Message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); //basic authentication
Message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", sUser); //set your username here
Message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", sPass); //set your password here

try
{
SmtpMail.SmtpServer = sMailHost;
SmtpMail.Send(Message);
}
catch(System.Web.HttpException ehttp)
{
ShowMessage(ehttp.Message);
ShowMessage("Here is the full error message output");
ShowMessage(ehttp.ToString());
}
}
catch(IndexOutOfRangeException)
{
ShowMessage("未知错误!");
}
}
catch(System.Exception e)
{
ShowMessage(e.Message);
ShowMessage("Here is the Full Message output");
ShowMessage(e.ToString());
}
}
Bmonkey 2004-07-25
  • 打赏
  • 举报
回复
需要验证,你验证用户名和密码没?
jenny5466 2004-07-25
  • 打赏
  • 举报
回复
You have to correctly setup the SMTP server.
- relay
- connection
- SECURITY: add the ASPNET user to the operators list
「已注销」 2004-07-16
  • 打赏
  • 举报
回复
关注!
ghwangtongji 2004-07-15
  • 打赏
  • 举报
回复
不死心啊,继续测........
测到后来倒是稳定了,就是始终都提示: Could not access 'CDO.Message' object.
太郁闷了,于是我想起自己提出的问题:
http://community.csdn.net/Expert/TopicView.asp?id=3133950
当时就是莫名其妙地换了个163的帐号,就通过了.
于是乎这次我故技重演,换了另外一个163的帐号,又一次莫名其妙地通过了.:P
搞不懂:(
这次没上次顺利的地方是:
上次换new的成功后,把old再换回来也能成功发送;
这次换new的成功后,把old再换回来不能成功发送.

我猜测是不是因为163那边的原因
之所以前后两次不同是因为第一次的时候我的两个账号都没怎么成功发过
而第二次我的old帐号已成功发送过很多次,会不会被163盯上了:-(
当然这只是根据我测试的情况做的猜测,因为我实在想不出其他更好的理由来
所以我建议楼主可以申请个新的帐号试试看,最好是163的,这样我们就可以对照一下了
ghwangtongji 2004-07-15
  • 打赏
  • 举报
回复
我碰到的问题是用SmtpMail.Send(mail)时好时坏,不稳定
我在后台启动一个线程定时发邮件,测试时周期为一分钟
try
{
c = System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
x.Write("\r\n"+c);
SmtpMail.Send(mail);
x.Write(": Mail sent successfully!");
}
catch(Exception ex)
{
x.Write(": "+ex.Message);
}
finally
{
x.Close();
}


结果是:
2004-06-15 02:31:00: Mail sent successfully!
2004-06-15 02:32:00: Could not access 'CDO.Message' object.
2004-06-15 02:33:00: Could not access 'CDO.Message' object.
2004-06-15 02:34:00: Could not access 'CDO.Message' object.
2004-06-15 02:35:00: Could not access 'CDO.Message' object.
2004-06-15 02:36:00: Mail sent successfully!
2004-06-15 02:36:59: Could not access 'CDO.Message' object.
2004-06-15 02:37:59: Could not access 'CDO.Message' object.
2004-06-15 02:38:59: Mail sent successfully!
2004-06-15 02:39:59: Could not access 'CDO.Message' object.
2004-06-15 02:40:59: Could not access 'CDO.Message' object.
2004-06-15 02:41:59: Could not access 'CDO.Message' object.
2004-06-15 02:42:59: Could not access 'CDO.Message' object.
2004-06-15 02:43:59: Could not access 'CDO.Message' object.
2004-06-15 02:44:58: Mail sent successfully!
AngelGavin 2004-07-12
  • 打赏
  • 举报
回复
我遇到了同样的问题
原来在FAT32上运行很正常
重装系统后
所有分区都改用NTFS了
SMTP服务器的设置同原来一样
就出现了这种情况

可能是ASP.NET访问COM的权限问题
tnt8csdn2000 2004-07-12
  • 打赏
  • 举报
回复
先把try{}catch{}去掉,可以看到真正的失敗的原因。
tanjingbool 2004-06-29
  • 打赏
  • 举报
回复
先请确定安装了SMTP服务﹐
然后找到网域
把ConfigurationSettings.AppSettings["SmtpServer"]设为默认值。
jupiterII 2004-06-28
  • 打赏
  • 举报
回复
http://blog.joycode.com/ghj/posts/13197.aspx
AngelGavin 2004-06-28
  • 打赏
  • 举报
回复
关注……
anbeel 2004-05-09
  • 打赏
  • 举报
回复
也许有用:

http://expert.csdn.net/Expert/topic/1952/1952577.xml?temp=.3520624
tfming 2004-05-09
  • 打赏
  • 举报
回复
你要引用CDO对象!
using CDO
lkk2073 2004-05-09
  • 打赏
  • 举报
回复
首先是出错提示无法显示

改成这样,先看看错在什么地方:

catch(Exception eHttp)
{
ErrDesc = eHttp.ToString();
}
OK520 2004-05-09
  • 打赏
  • 举报
回复
你是在本地还是在放到服务器上去了?
可能是你的IIS或服务器的Smtp服务器没有打开。
zyq1215 2004-05-09
  • 打赏
  • 举报
回复
关注!
up!
加载更多回复(2)
说到发送邮件发送,先提一下SMTP(呵呵,高手就跳过这一段吧!)。 SMTP的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。 再简单介绍一下名称空间(NameSpace)System.Web.Mail类库里所提供的邮件发送的对象、属性和方法 (1)它有三个类:SmtpMailMailMessageMailAttachment。这三个对象本文的示例程序代码中都应用到了! 1. MailMessage ,提供属性和方法来创建一个邮件消息对象。(Provides properties and methods for constructing an e-mail message.) 2. MailAttachments – 提供属性和方法来创建一个邮件附件对象。(Provides properties and methods for constructing an e-mail attachment.) 3. SmtpMail – 提供属性和方法通过使用windows 2000 CDOSYS 的消息组件的联合数据对象发送邮件消息)。(Provides properties and methods for sending messages using the Collaboration Data Objects for Windows 2000 (CDOSYS) message component) (2)各个类的属性。 1.先简单介绍SmtpMail的属性: SmtpServer -- SMTP的地址。 2.主要来介绍MailMessage对象的属性 From -- 发送邮件的地址 To -- 接受邮件的地址 Subject -- 邮件的标题 Priority -- 邮件的优先级(有效值为High,Low,Normal) Attachments -- 返回一个集合,代表附件 Bcc -- 密送地址 Cc -- 抄送地址 Body -- 获取或是设置电子邮件消息的内容 BodyFormat -- 获取或是设置MailFormat的枚举值,此值指定消息体邮件的格式(Html格式、Text格式) Bodyencoding -- 指定消息的编码方式编码(主要有Base64,UUencode) 其他几个不重要的省略。 随便提到密送和抄送的区别:密送就是你群发邮件时收邮件的人无法看到你发给了多少人以及他们的邮件地址,抄送就是群发邮件时收邮件的人则可以看到你发给了多少人以及他们的邮件地址。 (3)SmtpMail类的Send方法,它的目的就是发送邮件,有两个重载方法。 1. SmtpMail.Send("发送邮件的地址","接受邮件的地址","邮件的标题","邮件消息的内容") 这个方法很简单,不适合发送带附件的邮件。 2. SmtpMail.Send(MailMessage) 此方法复杂、灵活,适合发送附件,而且可以设置MailMessage对象的各种属性值。 如果我们用ASP.NET写一个邮件发送的程序,那么首先应该如何得到SMTP。有两种方法:第一种方法调用目前知名的邮件服务提供商的SMTP,比如新浪、搜狐、网易的免费电子邮箱的SMTP;第二种方法是自己装一个SMTP虚拟服务器,这个在安装IIS时一起装上去的(安装过程就省略了:-) )。 一、在ASP.NET利用知名的邮件服务提供商的SMTP发送邮件 首先需要去他们的邮件站点上注册免费邮箱,因为你要使用邮件服务提供商的SMTP,他们需要对身份进行验证,这样可以避免产生大量的垃圾邮件。假设我们在新浪的邮件站点(mail.sina.com.cn)上注册了一个免费电子邮件,用户名是mysina,密码是chenjie.该帐号为虚构的,请使用自己注册的用户名称和密码代替。我们在新浪的邮件站点获知它的SMTP地址是:smtp.sina.com.cn。我们需要向scucj@126.com(我的邮箱地址)发送邮件。 那么利用ASP.NET(C#)发送邮件的核心代码如下: //核心代码开始 using System.Web.Mail; MailMessage objMailMessage; MailAttachment objMailAttachment; // 创建一个附件对象 objMailAttachment = new MailAttachment( "d://test.txt" );//发送邮件的附件 // 创建邮件消息 objMailMessage = new MailMessage(); objMailMessage.From = "mysina@sina.com";//源邮件地址 objMailMessage.To = "scucj@126.com";//目的邮件地址,也就是发给我哈 objMailMessage.Subject = "邮件发送标题:你好";//发送邮件的标题 objMailMessage.Body = "邮件发送标内容:测试一下是否发送成功!";//发送邮件的内容 objMailMessage.Attachments.Add( objMailAttachment );//将附件附加到邮件消息对象中 //接着利用sina的SMTP发送邮件,需要使用Microsoft .NET Framework SDK v1.1和它以上的版本 //基本权限 objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); //用户名 objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "mysina") ; //密码 objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "chenjie"); /如果没有上述三行代码,则出现如下错误提示:服务器拒绝了一个或多个收件人地址。服务器响应为: 554 : Client host rejected: Access denied //SMTP地址 SmtpMail.SmtpServer = "smtp.sina.com.cn"; //开始发送邮件 SmtpMail.Send( objMailMessage ); //核心代码结束 二、在ASP.NET利用本机的SMTP虚拟服务器的SMTP发送邮件 首先说一下SMTP配置。 (1)右键点击“SMTP虚拟服务器”选择“属性”->在“常规”选项卡中设置“IP地址(P)”,我设置的是192.168.1.100。 (2)选择“访问”选项卡,点击“中继”,选上“仅以下列表”(默认是被选上的),点击“添加”,在“单台计算机”中加入192.168.1.100。 提示,如果没有完成(2),则出现大家常见的一种错误提示:服务器拒绝了一个或多个收件人地址。服务器响应为: 550 5.7.1 Unable to relay for scucj@126.com (友情提示一下:错误中的邮件地址有所不同) 然后开始核心代码,其实和方法(一)的差不多。与(一)的主要区别在于:1.SMTP的不同,2.objMailMessage.From中本方法可以随便填写,但是(一)中别随便填写那么利用ASP.NET(C#)发送邮件的核心代码如下: /核心代码开始 using System.Web.Mail; MailMessage objMailMessage; MailAttachment objMailAttachment; // 创建一个附件对象 objMailAttachment = new MailAttachment( "d://test.txt" );//发送邮件的附件 // 创建邮件消息 objMailMessage = new MailMessage(); objMailMessage.From = "mysina@sina.com";//源邮件地址 objMailMessage.To = "scucj@126.com";//目的邮件地址,也就是发给我哈 objMailMessage.Subject = "邮件发送标题:你好";//发送邮件的标题 objMailMessage.Body = "邮件发送标内容:测试一下是否发送成功!";//发送邮件的内容 objMailMessage.Attachments.Add( objMailAttachment );//将附件附加到邮件消息对象中 //SMTP地址 SmtpMail.SmtpServer = "192.168.1.100"; //开始发送邮件 SmtpMail.Send( objMailMessage ); 以上两种方法介绍到这里。最简单的利用上面方法是在页面添加一个服务器按钮,把除引用的语句放到按钮单击事件中去。当然,别忘记了引用的语句放在最上面。 方法一的测试是完全正确,没有任何问题,但是方法二却导致邮件无法正确收到(***@sina.com),或者收到后也被放到垃圾邮件中去了(发往scucj@126.com)。

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧