请教:怎么判断email是否成功发送出去?100分,在线等待!
在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




