无须SMTP服务器中转直接发送电子邮件

上传人:xkh****321 文档编号:159433377 上传时间:2022-10-09 格式:DOCX 页数:18 大小:117.99KB
收藏 版权申诉 举报 下载
无须SMTP服务器中转直接发送电子邮件_第1页
第1页 / 共18页
无须SMTP服务器中转直接发送电子邮件_第2页
第2页 / 共18页
无须SMTP服务器中转直接发送电子邮件_第3页
第3页 / 共18页
资源描述:

《无须SMTP服务器中转直接发送电子邮件》由会员分享,可在线阅读,更多相关《无须SMTP服务器中转直接发送电子邮件(18页珍藏版)》请在装配图网上搜索。

1、无须SMMTP服服务器中中转直接接发送电电子邮件件前言大家家一定熟熟悉Fooxmaail中中的“特快专专递”,它能能直接将将电子邮邮件发送送到对方方的邮件件服务器器中,而而不需要要经过SSMTPP服务器器中转,这这样做有有什么好好处?第第一:发发送速度度比较快快,不需需要等SSMTPP服务器器对邮件件进行查查毒、派派发、验验证;第第二:你你可以及及时掌握握邮件是是否发送送成功的的信息。有有时我们们用Ouutloook发发送一封封邮件,到到第二天天对方都都没收到到,可我我这边确确实已经经发送成成功了,只只好让对对方多收收几次,到到了第三三天SMMTP服服务器回回信说“不好意意思,你你发往XXXX

2、的的邮件因因为XXXX原因因未能送送达”,原原来邮件件被打回回来了,尤尤其最近近1633邮箱非非常离谱谱,我发发出去的的10封封邮件,至至少有33封会被被无故打打回来,说说什么“网络连连接失败败”所以被被打回,莫莫名其妙妙,可能能我是免免费邮箱箱的缘故故吧,没没办法只只好再申申请多几几个邮箱箱,我现现在已经经有“chrrys21ccn.ccom、cchryys.xxiem、hwwxieeusst.hhk”好多多邮箱了了,就是是为了防防止给别别人发邮邮件时被被无故退退回扯远了了,不好好意思。第第三:我我们有时时需要在在程序里里将某些些敏感信信息发送送至公司司邮箱,例例如:计计算注册册码时我我们需

3、要要用户操操作我们们的软件件将申请请注册的的信息发发送回我我们的售售后服务务邮箱,由由我们的的工作人人员处理理来这些些邮件。大家家一定会会想用SSMTPP(Siimplle MMaill TrranssferrProotoccol)借借助SMMTP服服务器也也能通过过程序实实现邮件件发送,但但是有一一个很大大问题就就是安全全问题,很很多著名名的邮件件服务器器运营商商对于用用软件方方式通过过SMTTP协议议频繁提提交邮件件转发的的申请是是不欢迎迎的,我我的1663邮箱箱就曾经经深受其其害,我我那次是是在写SSMTPP客户端端发送邮邮件的程程序,顺顺手就用用了1663的SSMTPP服务器器,我刚刚

4、发到第第5封邮邮件时就就发送失失败了,我我再登录录1633网站一一查,原原来我的的账号被被封了,原原因就是是我用软软件发送送邮件太太多了(天天啦,才才5封而而已啊),后后来我花花了近两两个月时时间跟新新浪公司司又赔礼礼又道歉歉,还把把身份证证传真过过去了我我的账号号才被恢恢复。剖析邮件件传送过过程废话话说太多多请别介介意,现现在言归归正传,要要直接将将邮件送送到对方方(POOP或IIMAPP)服务务器上,而而不经过过SMTTP邮件件服务器器转交,其其实也不不难,你你只要改改用Unnix/Linnux操操作系统统,直接接SenndMaail命命令就能能完成,但但在Wiindoows下下想要实实现

5、这个个功能恐恐怕得花花一点心心思了。我我们首先先要从协协议RFFC8221- Simmplee Maail Traansffer Prootoccol入入手来分分析。首先先我们看看一下EEmaiil的递递送过程程:邮件件原文 编码码 SMMTP客客户端 SMMTP转转交服务务器 远程程SMTTP服务务器(对对方邮局局)。“特快专专递”的实现现思路邮件件编码后后被递送送到一个个SMTTP转交交服务器器上,该该服务器器对信件件分检(到到同一邮邮局的被被放在一一起)后后,根据据优先级级以及信信件的先先后次序序被发送送到远程程邮局的的SMTTP服务务器上。换换句话说说,只要要我们知知道了SSMTPP转

6、交服服务器是是如何确确定远程程邮局SSMTPP服务器器的地址址的,就就可以直直接递送送到远程程邮局服服务器。SSMTPP转交服服务器又又是知道道远程邮邮局的地地址呢?这就是是域名解解析所完完成的工工作了,就就好比我我们在IIE浏览览器输入入“t”这个域域名,IIE浏览览器又如如何知道道目标服服务器的的IP地地址呢?也是域域名解析析服务器器的功劳劳。电子子邮件地地址由两两部分组组成,例例如:cchryysm,这里里的chhryss是邮箱箱名(即即用户名名,一个个用户对对应一个个邮箱),m是邮箱箱服务器器地址,邮邮箱名和和邮箱服服务器地地址之间间以“”作为分分隔。我们们只要向向域名服服务器发发送查

7、询询“1633.coom”的远程程邮局服服务器地地址便可可找到远远程邮局局SMTTP服务务器的IIP 地地址,该该查询指指令被称称作MXX(MaailEExchhangge)邮邮件交换换服务器器的地址址查询。远远程邮局局SMTTP服务务器的地地址可能能不止一一个,这这时,你你可根据据信件优优先级的的不同来来选择对对应的远远程邮局局,我为为了安全全起见会会对每一一个远程程邮局服服务器按按照等级级高低逐逐一尝试试,只要要将邮件件成功地地发送到到其中一一个邮局局我们的的任务就就完成了了。我们要完完成几项项编程工工作:本本机DNNS的获获取、与与DNSS服务器器通信实实现MXX指令查查询、SSMTPP

8、邮件提提交,下下面我们们一一阐阐述。获取取本机DDNS代码码中我封封装了一一个类CCnettAdaapteerInnfo,该该类可以以获取本本机网卡卡的系列列信息,包包括本机机IP地地址、子子网掩码码、DNNS、WWinss、网卡卡MACC地址等等相关信信息。首先先我们需需要调用用IPHHelppAPII 库中中的GeetAddaptterssInffo()函数来来获取系系统中所所有网卡卡信息。DWWORDD GeetAddaptterssInffo (_outt PIIP_AADAPPTERR_INNFO pAddaptterIInfoo,_inoout PULLONGG pOOutBBuf

9、LLen);该函函数有两两个参数数,pAAdappterrInffo是一一个指针针,指向向一个用用户定义义的结构构体,一一般是用用HeaapAlllocc()申申请的内内存空间间,pOOutBBufLLen传传入pAAdappterrInffo所指指空间的的大小,传传出实际际需要的的缓冲大大小,第第一次调调用该函函数时ppOuttBuffLenn传入00,函数数将返回回 ERRRORR_BUUFFEER_OOVERRFLOOW 表表示需要要更多的的缓冲,并并将实际际需要的的缓冲长长度返回回,我们们根据实实际长度度用HeeapAAllooc()函数申申请空间间再次调调用该函函数,以以下代码码是枚

10、举举所有网网卡并将将信息保保存到数数组m_Aryy_NeetAddaptterIInfoo 中:#deffinee MAALLOOC( byttes ) :HeeapAAllooc( :GGetPProccesssHeaap(), HHEAPP_ZEERO_MEMMORYY, (byttes) )#deffinee FRREE( pttr ) iff( pptr ) :HeeapFFreee( :GeetPrroceessHHeapp(), 0, pttr )#deefinne RREMAALLOOC( ptrr, bbytees ) :HeaapReeAllloc( :GettProoces

11、ssHeeap(), HEAAP_ZZEROO_MEEMORRY, ptrr, bbytees )/ 枚举举网络适适配器/ rretuurn : -/ -11-失败/ =0 -网络适适配器数数量/intt CNNetAAdappterrInffo:EnuumNeetwoorkAAdappterrs () DeeletteAlllNeetAddaptterIInfoo (); IIP_AADAPPTERR_INNFO* pAAdpttInffo = NUULL; IPP_ADDAPTTER_INFFO* pNeextAAd = NNULLL; UULONNG uulLeen = 0; intt

12、nCCnt = 00; DDWORRD ddwErrrorr = :GGetAAdappterrsInnfo ( ppAdpptInnfo, &uulLeen ); iif( dwEErroor != EERROOR_BBUFFFER_OVEERFLLOW ) rretuurn -1; pAAdpttInffo = ( IP_ADAAPTEER_IINFOO* )MALLLOCC ( ulLLen ); dwEErroor = :GettAdaapteersIInfoo( ppAdpptInnfo, &uulLeen ); iif ( dwwErrror != ERRROR_SUCCCESSS

13、 ) reeturrn -1; pNeextAAd = pAAdpttInffo; whiile( pNNexttAd ) COOneNNetAAdappterrInffo *pOnneNeetAddaptterIInfoo = neww COOneNNetAAdappterrInffo ( pNNexttAd );if ( ppOneeNettAdaapteerInnfo ) mm_Arry_NNetAAdappterrInffo.AAdd ( ppOneeNettAdaapteerInnfo );nnCntt +;ppNexxtAdd = pNeextAAd-Nexxt; / ffreee

14、 anny mmemoory we alllocaatedd frrom thee heeap befforee / exxit.wee wooulddntt waannaa leeavee meemorry lleakks nnow wouuld we? ;pp FRREE( pAAdpttInffo ); retturnn nCCnt;针对每每个网卡卡信息,我我们需要要调用GGetPPerAAdappterrInffo()函数来来获取指指定网卡卡的DNNS信息息,使用用方法和和GettAdaapteersIInfoo()类类似。以以下代码码获取网网卡基本本信息:/ 根据据传入的的 pAAd

15、pttInffo 信信息来获获取指定定网卡的的基本信信息/BOOOL CCOneeNettAdaapteerInnfo:Innit () IPP_ADDDR_STRRINGG* ppNexxt= NNULLL; IIP_PPER_ADAAPTEER_IINFOO* ppPerrAdaapt = NNULLL; UULONNG uulLeen= 0; DWOORD dwEErr = EERROOR_SSUCCCESSS; AASSEERT ( mm_AddptIInfoo.AdddreessLLenggth 00 ); t_IPIINFOO ippholld; / 将变量量清空 m_bbInii

16、tOkk = FALLSE; m_csNNamee.Emmptyy (); mm_cssDessc.EEmptty (); m_CCurIIPInnfo.csIIP.EEmptty (); m_CCurIIPInnfo.csSSubnnet.Emppty (); m_Aryy_IPP.ReemovveAlll (); m_AAry_DNSS.ReemovveAlll (); m_AAry_Gattewaay.RRemooveAAll ();#iffndeef _UNIICODDE mm_cssNamme = m_AdpptInnfo.AdaapteerNaame; m_csDDescc= m_

17、AAdpttInffo.DDesccripptioon;#elsse UUSESS_COONVEERSIION; m_csNNamee = A2WW ( m_AAdpttInffo.AAdappterrNamme ); mm_cssDessc= A22W ( m_AdpptInnfo.Desscriiptiion );#enddif / 获取当当前正在在使用的的IP地地址 iif ( m_AdpptInnfo.CurrrenntIppAdddresss ) m_CCurIIPInnfo.csIIP = mm_AddptIInfoo.CuurreentIIpAdddreess-IppAdddre

18、sss.SStriing;m_CurrIPIInfoo.cssSubbnett= m_AAdpttInffo.CCurrrenttIpAAddrresss-IIpMaask.Strringg; ellse mm_CuurIPPInffo.ccsIPP = _TT(00.0.0.00);m_CurrIPIInfoo.cssSubbnett= _T(0.0.00.0); / 获获取本网网卡中所所有的IIP地址址 pNNextt = &( m_AAdpttInffo.IIpAdddreessLListt ); whhilee ( pNeext ) ippholld.ccsIPP= ppNexxt-I

19、pAAddrresss.Sttrinng;iphholdd.cssSubbnett= ppNexxt-IpMMaskk.Sttrinng;m_AAry_IP.Addd ( iphholdd );pNNextt = pNeext-Neext; / 获取本本网卡中中所有的的网关信信息 ppNexxt = &( m_AdpptInnfo.GattewaayLiist ); whiile ( ppNexxt ) m_AAry_Gattewaay.AAdd ( ppNexxt-IpAAddrresss.Sttrinng );ppNexxt = pNNextt-NNextt; / 获取取本网卡卡中所有有的

20、 DDNS dwEErr = :GeetPeerAddaptterIInfoo ( m_AAdpttInffo.IIndeex, pPeerAddaptt, &ulLLen ); if( dwwErrr = ERRRORR_BUUFFEER_OOVERRFLOOW ) pPeerAddaptt = ( IIP_PPER_ADAAPTEER_IINFOO* ) MAALLOOC( ulLLen );dwEErr = :GeetPeerAddaptterIInfoo( mm_AddptIInfoo.Inndexx, ppPerrAdaapt, &uulLeen );/ iif wwe ssuccc

21、eedd thhan we neeed tto ddropp innto ourr looop/ andd fiill thee dnns aarraay wwilll alll aavaiilabble IP/ adddresssess.iif( dwEErr = ERRROR_SUCCCESSS ) pNNextt = &( pPeerAddaptt-DDnsSServverLListt ); wwhille( pNeext ) m_AAry_DNSS.Addd( pNeext-IppAdddresss.SStriing );pNNextt = pNeext-Neext; m_bbInii

22、tOkk = TRUUE;/ tthiss iss doone outtsidde tthe dwEErr = ERRROR_SUCCCESS juust in casse. thee maacroo/ usses NULLL ppoinnterr chheckkingg soo itt iss okk iff pPPerAAdappt wwas nevver alllocaatedd.FFREEE( ppPerrAdaapt ); rretuurn m_bbIniitOkk;至此此我们已已经获取取到系统统中所有有DNSS服务器器地址了了。MX指令令查询获获取远程程邮局地地址与DDNS服服务器

23、通通信其实实就是一一个简单单的UDDP网络络通信,端端口号为为53,通通信的数数据格式式如下:所有有的DNNS消息息基本上上都是相相同的数数据结构构,但DDNS RR是是采用了了其他的的数据结结构。QNNAMEE是一个个表示域域长度的的变量,表表示每一一节有多多少字节节,例如如:wwww.ssockketss.coom将表表示为:最后后的“Addditiionaal”通常包包含了查查询服务务器期望望被发送送的纪录录以减少少通信量量,例如如,回应应MX查查询时通通常在“Addditiionaal”中包含含A纪录。具体体的MXX查询过过程请参参加源代代码,以以下代码码实现了了获取本本机所有有DNS

24、S,然后后逐一尝尝试MXX查询的的方法:/ 尝试试所有的的DNSS来查询询邮局服服务器地地址/BOOOL GGetMMX ( chhar *psszQuueryy, / 要查查询的域域名 OOUT t_AAry_MXHHosttInffos &Arry_MMXHoostIInfoos / 输出 Maiil EExchhangge 主主机名 ) CNNetAAdappterrInffo mm_NeetAddaptterIInfoo; mm_NeetAddaptterIInfoo.Reefreesh (); innt nnNettAdaapteerCoountt = m_NNetAAdappter

25、rInffo.GGetNNetCCarddCouunt(); forr ( intt i=0; iGett_DNNSCoountt (); forr ( intt j=0; jGGet_DNSSAdddr ( j );iff ( GettMX ( ppszQQuerry, csDDNS.GettBuffferr(0), AAry_MXHHosttInffos ) ) retturnn TRRUE; rretuurn FALLSE;如果果查询“m”的邮局局服务器器地址,将将得到如如下的结结果:gsmmtp1147.goooglee.coom 550gssmtpp1833.goooglle.cco

26、m 50gmmaill-smmtp-m 5allt1.gmaail-smttp-iin.ll.goooglle.ccom 10allt2.gmaail-smttp-iin.ll.goooglle.ccom 10用SSMTPP协议给给远程邮邮局直接接发送邮邮件SMMTP是是一个简简单邮件件传输协协议,通通过TCCP连接接服务器器的255端口号号即可进进行数据据通信,以以下是我我用teelneet手工工发送邮邮件的过过程:其中中红色矩矩形框起起来的是是服务器器回应的的数据,绿绿色矩形形框起来来的是我我手工输输入的数数据,这这里发送送的邮件件内容为为“我是手手工发送送的电子子邮件”,邮件件被直接接发

27、送到到chrrys.xieegmmaill.coom邮箱箱中,不不需要讨讨厌的SSMTPP服务器器中转,当当然,因因为这是是手工发发送的邮邮件,其其内容未未经过任任何MIIME编编码,这这封邮件件可以被被Foxxmaiil或OOutllookk收到,但但可能被被判为垃垃圾邮件件,因为为这封邮邮件连标标题都没没有,是是无头苍苍蝇,肯肯定是垃垃圾,呵呵呵关于邮邮件内容容的编码码请参考考其他相相关资料料,我有有一本书书,名叫叫ViisuaalC+ 网网络通信信协议分分析与应应用实现现,这这本书有有详细的的电子邮邮件编码码介绍,可可以下载载电子文文档看看看。当我我们知道道了SMMTP通通信的全全过程,

28、再再编写一一个TCCP网络络通信程程序处理理与SMMTP服服务器请请求就不不是难事事了。本本代码中中的CHHwSMMTP类类已经封封装了整整个通信信过程,可可以发送送普通的的电子邮邮件,还还可以发发送带附附件的电电子邮件件,配合合DNSS查找,远远程邮局局地址MMX查询询便可实实现任意意邮件直直接发送送到对方方邮箱的的功能。软件操操作界面面介绍程序序执行后后界面如如下:Frrom中中可以输输入一个个虚假的的邮箱地地址,也也可以输输入真实实的邮箱箱地址(如如:211cn的的邮箱),但但不能输输入1663的邮邮箱,否否则发送送会失败败,1663邮箱箱不太欢欢迎大家家用软件件方式进进行邮件件收发,人

29、人家要靠靠这个吃吃饭嘛。注意意事项看到到这里是是否已经经很兴奋奋了,想想着要自自己写一一个SMMTP服服务器,甚甚至想要要写一个个邮局服服务器程程序,但但我觉得得恐怕还还没那么么容易,我我用这个个软件给给我的ggooggle邮邮箱(ggmaiil)发发送邮件件,很快快就能成成功收到到了,可可我尝试试过用这这种方式式给1663邮箱箱和211cn邮邮箱发送送邮件时时却失败败了,发发给1663时服服务器说说你的IIP不被被允许,提提示信息息如下:5550-55.7.1 1166.255.1886.1155 Thhe IIP yyoure usiing to sennd mmaill iss noot

30、 aauthhoriizedd5550-55.7.1 tto ssendd emmaill diirecctlyy too ouur sservverss. PPleaase usee thhe SSMTPP看来来1633邮箱只只接收大大牌邮件件服务器器发过来来的邮件件,难怪怪我们这这些免费费的1663用户户发送邮邮件时常常会被退退回,原原来1663服务务器还认认牌子的的,faaintt!到底底要怎么么样做才才可以直直接给1163等等著名的的邮局发发邮件呢呢?不知知道用IIP欺骗骗方式能能否成功功,请有有高手知知道解决决这个问问题的一一定要告告诉我啊啊,我的的邮箱是是:chhryss1663.ccom,先先谢过了了!电子子邮件在在目前的的Intternnet上上被广泛泛地使用用,为了了安全很很多邮局局服务器器做了安安全认证证等诸多多限制,我我们要想想让自己己的SMMTP服服务器能能向所有有的邮局局发邮件件,恐怕怕还得做做更多的的努力。结束束语知识识就是力力量,知知识共享享将具有有推动时时代进步步的力量量。希望望我能为为中国的的软件行行业尽一一份薄力力。你可可以任意意修改复复制本代代码,但但请保留留版权信信息文字字不要修修改。由于于水平有有限,错错误再所所难免,请请知情者者原谅并并告知,多多谢!

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!