CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

请教:怎么判断email是否成功发送出去?100分,在线等待!

楼主happybird123(幸福鸟)2006-08-18 11:54:06 在 .NET技术 / ASP.NET 提问

在sql   server里用cdosys发送email或者asp.net里用cdosys发送email,如何判断email是否发送成功?  
   
  比如abc@3232.com这种email是符合email标准的,肯定是发送错误的,如何获取是否发送成功信息?  
  例如在.net里  
    MsgMail.From   =   "webmaster@xxxx.com"  
                  MsgMail.Subject   =   txt_title.Text.Trim()  
                  MsgMail.BodyFormat   =   MailFormat.Html  
                  strBody   =   txt_content.Text.Trim()  
                  MsgMail.Body   =   strBody  
                  SmtpMail.SmtpServer   =   "mail.xxx.com"  
   
                  MsgMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",   "1")  
                  MsgMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername",   "username")  
                  MsgMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword",   "password")  
   
      MsgMail.To   =   "xxx@xxx.com"  
   
                                  Try  
                                          SmtpMail.Send(MsgMail)  
                                  Catch   s   As   Exception  
                                          If   Len(s.Message)   >   0   Then  
                                                  sysinfo.Text   =   "Error:"   +   s.Message  
                                          End   If  
                                  End   Try  
  问题点数:100、回复次数:33Top

1 楼happybird123(幸福鸟)回复于 2006-08-18 11:54:15 得分 0

upTop

2 楼edwardfay(都说养儿为防老,山高水远他乡流)回复于 2006-08-18 12:03:26 得分 0

UP,  
   
  人家發回執給你了就肯定說明發送成功了,   哈哈   。Top

3 楼luck0235(风平浪静时人人都能掌舵)回复于 2006-08-18 12:12:29 得分 0

除了catch到异常外,我一直确认不了是否成功,关注。Top

4 楼Edifier0709(腦袋重構中.....)回复于 2006-08-18 12:18:58 得分 0

似乎只能做到你的程序是否将邮件发送“成功”了,而不知道该邮件是否正确到达目的地吧?Top

5 楼edwardfay(都说养儿为防老,山高水远他乡流)回复于 2006-08-18 12:23:12 得分 0

Try  
          SmtpMail.Send(MsgMail)  
   
  也只是提交給了郵件發送服務器,服務器又不會告訴你有沒有發送成功Top

6 楼oldmoon(电子商务人,电子商务路)回复于 2006-08-18 12:27:49 得分 0

没听说过,就算163的邮件发送在路上被丢弃了,也没有反映了!Top

7 楼98star(超越梦想,一起飞。我们需要真心面对。)回复于 2006-08-18 12:29:36 得分 0

如果失败了,应该能得到对方的系统退信吧。Top

8 楼xuyiheng(许一恒)回复于 2006-08-18 12:37:02 得分 50

实际上你发信也是通过MAIL服务器,所以问题应该在你架设的MAIL服务器是否能接收对方返回的信息,但是不一定所有的MAIL服务器都给你回传接收到的信息.  
  不知道具体的协议是怎么样的,是不是规范MAIL服务器都有回传,LZ查查,给个信Top

9 楼michaelxuj(小麦)回复于 2006-08-18 13:23:32 得分 0

如果你的MAIL服务器能接收对方返回的信息,那么你就查看有没有推信吧Top

10 楼happybird123(幸福鸟)回复于 2006-08-19 12:22:24 得分 0

1.用SmtpMail.Send   如果是错误的邮件地址,如abc@abc.com,也收不到smtp服务器返回的信息,但是用outlook来发,是能收到的;  
   
  2。就算能收到,我希望的是能自动返回一个消息,我能及时统计(比如三天内)发过去的email中有多少真正到达对方的邮箱,多少发送是错误的(邮箱本来有错或者其他原因)  
   
  3。我用忆虎群发软件测试过,它能在发完之后就知道哪些真正发出去了,哪些没发出去(不是格式不对)  
   
  所以我想肯定有方法查出来,请大伙帮帮忙,万分感谢!Top

11 楼amingo(Atlas 新技术讨论群:6455130(群主))回复于 2006-08-19 12:27:47 得分 0

问别人收到没   收到了   就是发出去了Top

12 楼csuslf(randy)回复于 2006-08-19 12:34:57 得分 0

upTop

13 楼cat_hsfz(我的新Blog在http://cathsfz.cnblogs.com)回复于 2006-08-19 14:20:52 得分 30

如果发送的时候没有出现任何的Exception,那就算是成功发送到指定的SMTP服务器了。但是之后该SMTP服务器投递到目标邮箱是否成功,你是没办法知道的,因为SMTP设计的时候没考虑过要用作事务这样复杂的东西。  
   
  如果还不明白,建议你去详细了解一下Email服务背后的原理,那样你就能知道什么东西是你的程序能够知道的,在哪一步之后的事情如果出现错误是无法通知到你的程序的。Top

14 楼greki(锐╃→)回复于 2006-08-19 14:25:19 得分 0

如果发送的时候没有出现任何的Exception,那就算是成功发送到指定的SMTP服务器了。但是之后该SMTP服务器投递到目标邮箱是否成功,你是没办法知道的,因为SMTP设计的时候没考虑过要用作事务这样复杂的东西。  
  =========================  
  具我所知,是这样Top

15 楼ylhyh(----------> www.cnpp.info <----------)回复于 2006-08-19 15:07:45 得分 0

SmtpException.StatusCode  
   
  帮忙文档有说这个状态字的详细信息  
  Top

16 楼wxwinter()回复于 2006-08-19 15:50:11 得分 20

如果能,就可以写一个程序,向a@a.a   到zzzzzzzzz@zzzzzzzzz.zzz发信,这样就能得到全世界所有存在的信箱了。也不用向中介商买什么用户信箱了。  
   
  每种技术都有其无法克服的缺陷。  
   
  记得学UDP时,我就想把信号广播到子网以外。  
  学事务处理时,我把删除文件的命令放到事务中,希望删除的文件能和事务一起流滚回来。  
  后来知道了,  
  第一种无法实现,是出于安全目的,如果你实现了,那叫病毒。  
  第二种无法实现,是出于技术原因,如果你实现了,那叫发明。  
   
  补充一下,我是如何变通实现的.  
  MsgMail.From指定一个真实的信箱。  
  定期用POST方式去读这个信箱,分析每封系统退信的字串结构。  
  有邮件服务器支持的不是很好。  
  另处,我遇过用同一MsgMail.From短时间内发大量信,只有前几封可以发出,后面的都忽略了,这是邮件服务器上作了限制。其实现在很多服务器都有每日最大邮件数的限制.  
  还有MsgMail.From与SmtpMail.SmtpServer   如果不是同一服务器,或不存在该信箱,信也发不出去。  
   
  再有就是你自已建一个Exchange服务器,不过现在好多邮件服务器不收没有经过认证的服务器的信  
  Top

17 楼happybird123(幸福鸟)回复于 2006-08-19 20:13:53 得分 0

upTop

18 楼shuangren(候鸟)回复于 2006-08-19 22:00:14 得分 0

还有被当成垃圾邮箱删掉的更没法知道了^_^Top

19 楼happybird123(幸福鸟)回复于 2006-08-20 19:26:20 得分 0

upTop

20 楼amingo(Atlas 新技术讨论群:6455130(群主))回复于 2006-08-20 19:38:12 得分 0

记得学UDP时,我就想把信号广播到子网以外。  
  学事务处理时,我把删除文件的命令放到事务中,希望删除的文件能和事务一起流滚回来。  
  后来知道了,  
  第一种无法实现,是出于安全目的,如果你实现了,那叫病毒。  
  第二种无法实现,是出于技术原因,如果你实现了,那叫发明。  
   
  补充一下,我是如何变通实现的.  
  MsgMail.From指定一个真实的信箱。  
  定期用POST方式去读这个信箱,分析每封系统退信的字串结构。  
  有邮件服务器支持的不是很好。  
  另处,我遇过用同一MsgMail.From短时间内发大量信,只有前几封可以发出,后面的都忽略了,这是邮件服务器上作了限制。其实现在很多服务器都有每日最大邮件数的限制.  
  还有MsgMail.From与SmtpMail.SmtpServer   如果不是同一服务器,或不存在该信箱,信也发不出去。  
   
  再有就是你自已建一个Exchange服务器,不过现在好多邮件服务器不收没有经过认证的服务器的信Top

21 楼luluso(真系好难捉摸啊!!)回复于 2006-08-20 20:03:24 得分 0

这个好办.具体是你指定的smtp服务器是否支持.  
  smtp和smtp服务器交接的时候会有提示的.  
  1)   一smtp向另一个smtp转发的时候.有个传输序列.如果在传输的过程中.序列列完成正确并可得到正确的返回值.那样这封信就算是发成功了.  
  这就需要smtp服务器有判断.如果最后一步完成了.就返回一个值给你标识下就行了.  
   
  2)就好象有的邮箱.在收到信后会自动向该邮箱发接收成功回执.(这也是smtp设计的时候的功能的.有的smtp有.有的没)  
   
  3)就目前我所做的smtp服务器.pop服务器.等.都成功应用.目前还没涉及到什么事务.回滚等...  
   
  楼主的构思是好的.但过程并不对.  
   
  如果楼主想深入研究.那就必须了解下   rfc821   等协议.还有深入sock序列交互就会更有帮助了.Top

22 楼luluso(真系好难捉摸啊!!)回复于 2006-08-20 20:06:49 得分 0

还有各个smtp接收到信件怎么判断是垃圾邮箱也有不同的定义.比如邮箱头不对.不符合邮件编码.发信的smtp的ip和域名的反向解析不对.等一系列会造成垃圾信件的条件.当然.现在的smtp服务器如tom\163.com   对针对同一账号在一个时间段的发信的频繁度.会封了该账号的接收的了.  
  具体还有其它的一些因素.这就不在这说明了.Top

23 楼qinhl99(林鸿)回复于 2006-08-20 20:15:37 得分 0

对于人家当垃圾邮件给过滤了,catch是不可能检查到的,但似乎没有想到其它的办法Top

24 楼bobomouse(波波)回复于 2006-08-20 20:52:15 得分 0

只有通过回执吧?Top

25 楼xray2005(风车车--要飞翔,必须靠自己!)回复于 2006-08-20 20:58:35 得分 0

学习ing。。。。。。。。Top

26 楼happybird123(幸福鸟)回复于 2006-08-21 09:16:43 得分 0

upTop

27 楼happybird123(幸福鸟)回复于 2006-08-21 09:21:45 得分 0

luluso(刚开始学习c#   winform提的问题比较菜):  
   
  你的回答让我感觉有一点希望,我想请教一下,如何得到收件人的smtp服务器,如abc@abc.com,  
  它的smtp服务器是什么呢mail.abc.com或者abc.com,我如何自动获知?Top

28 楼luluso(真系好难捉摸啊!!)回复于 2006-08-21 14:05:08 得分 0

出名的smtp一查便知.不出名的nslookup查一下便是.  
  开始-附件-dos命令.输入  
  nslookup   回车  
  set   type=mx   回车  
  域名           回车  
     
  慢慢看结果吧.Top

29 楼happybird123(幸福鸟)回复于 2006-08-21 15:12:38 得分 0

luluso(刚开始学习c#   winform提的问题比较菜):但是我肯定是要程序能自动去判断,不可能手工的Top

30 楼luluso(真系好难捉摸啊!!)回复于 2006-08-21 15:27:40 得分 0

http://www.lihuasoft.net/bbs/archiver/?tid-841.htmlTop

31 楼Glen_qiu(简约)回复于 2006-08-21 17:27:34 得分 0

你可以选试下.他的地址是不是存在...  
  如果存再发出去.成功的机会会大些Top

32 楼truecoffeefox(咖啡狐)回复于 2006-08-21 17:47:04 得分 0

最简单的就是自己架一个mail服务器了  
  比如用cmail  
  检查它的消息就是了Top

33 楼happybird123(幸福鸟)回复于 2006-08-22 22:32:53 得分 0

upTop

相关问题

关键词

得分解答快速导航

  • 帖主:happybird123
  • xuyiheng
  • cat_hsfz
  • wxwinter

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo