smtp協(xié)議簡介及C實(shí)現(xiàn)郵件發(fā)送_第1頁
smtp協(xié)議簡介及C實(shí)現(xiàn)郵件發(fā)送_第2頁
smtp協(xié)議簡介及C實(shí)現(xiàn)郵件發(fā)送_第3頁
smtp協(xié)議簡介及C實(shí)現(xiàn)郵件發(fā)送_第4頁
smtp協(xié)議簡介及C實(shí)現(xiàn)郵件發(fā)送_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

SMTP一:SMTP簡介SMTP(SimpleMailTransferProtocol)即簡潔郵件傳輸協(xié)議,是一種供給牢靠且有效電子郵件傳輸?shù)膮f(xié)議。SMTPFTP的一種郵件服務(wù),主要用于傳輸系統(tǒng)之間的郵件信息并供給與來信有關(guān)的通知。SMTP目前已是事實(shí)上的在InternetE-Mail簡潔的基于文本的協(xié)議。在其之上指定了一條消息的一個或多個接收者〔在〕,然后消息文本就傳輸了。可以很簡潔地通TelnetSMTPSMTPTCP25。要為一個SMTP效勞器,需要使用MX(MaileXchange〕DNS。SMTP協(xié)議進(jìn)展2080SMTPUUCP的補(bǔ)充,UUCPSMTP送和接收的機(jī)器始終都聯(lián)網(wǎng)的狀況下工作得最好。SMTP重要特性之一是其能跨越網(wǎng)絡(luò)傳輸郵件,即“SMTP一個網(wǎng)絡(luò)可以由公用因特網(wǎng)上TCP可相互間訪問的主機(jī)、防火墻分隔的TCP/IP網(wǎng)絡(luò)上TCP可相互訪問的主機(jī),以及其他LAN/WAN中的主機(jī)利用非TCPSMTP輸,也可通過中繼器或網(wǎng)關(guān)是實(shí)現(xiàn)某處理機(jī)與其他網(wǎng)絡(luò)之間的郵件傳輸。〔DNS)識別出傳輸郵件的下一跳IPSendmail是最早實(shí)現(xiàn)SMTP200150SMTP實(shí)現(xiàn)為一個客戶端〔消息的發(fā)送者〕或一個效勞器〔消息的承受者〕。一些其他的流行的SMTPPhilipHazel的exim,IBMPostfixD.J.BernsteinQmailMicrosoftExchangeServer.由于這個協(xié)議開頭是基于純ASC好。后來開發(fā)了用來編碼二進(jìn)制文件的標(biāo)準(zhǔn),如MIMESMTPSMTP效勞器都支持8MIMESMTP是一個“推“的協(xié)議,它不允許依據(jù)需要從遠(yuǎn)程效勞器上“拉”來消息。要做到這點(diǎn),郵件客戶端必需使用POP3IMAPSMTP效勞器可以使用ETRN(ExtendedTurn,擴(kuò)展回車〕SMTP上觸發(fā)一個發(fā)送。)垃圾郵件仍舊是個重要的問題。原始的SMTP協(xié)議的局限之一在于它沒有為發(fā)送方進(jìn)行認(rèn)證的功能。因此定義了SMTP-AUTH擴(kuò)展。由于SMTP巨大安裝根底的網(wǎng)絡(luò)效應(yīng),寬闊地修改SMTP或者完全替代它被認(rèn)為是不現(xiàn)實(shí)的。InternetMail2000就是這樣一個為替換而做的建議。IRTF的反垃圾郵件爭論小組正在爭論一些供給簡潔、敏捷、輕量級的、可升級的源端認(rèn)證的建議。最有可能被承受的建議是SenderPolicyFramework 二:協(xié)議的工作原理SMTP在郵件通信中的位置如以下圖所示:1、工作機(jī)制:SMTPSMTPSMTPSMTP接投送到用戶的郵箱,否則向MX1SMTPSMTP出,由接收SMTP送者發(fā)送MAIL命令指明郵件發(fā)送者。假設(shè)SMTP接收者可以接收郵件則返OKSMTPRCPTSMTPOK〔但〕會接收到特別的序列,假設(shè)接收者成功處理了郵件,則返回OK命令和響應(yīng)都是基于ASCCR和LF符完畢。響應(yīng)包括一個表示SMTPTCP25號端口監(jiān)聽連續(xù)懇求。2〔1〕建立TCP連接。客戶端發(fā)送端發(fā)送MAIL命令;效勞器端正期望以O(shè)K作為響應(yīng),說明預(yù)備接收?!?〕客戶端發(fā)送RCPT可以有多個RCPT行;效勞器端則表示是否情愿為收件人接收郵件?!?〕協(xié)商完畢,發(fā)送郵件,用命令DATAQUIT3、SMTPSMTPDNS中打算收件人的域名來路由電子郵SMTPDNSMXMXSMTP中繼主機(jī),屬于該域的電子郵件都應(yīng)向該主機(jī)發(fā)送。假設(shè)SMTP效勞器mail.abc“mailto:shuer@sh.abc“shuer@sh.abc以下過程:〔1〕Sendmail懇求DNSsh.abcCNAME記錄,如有,CNAME〔〕shmail.abcshmail.abc的CNAME記錄,直到?jīng)]有為止。2〔〔2假定被CNAMEshmail.abcsendmail懇求@abcDNSshmail.abcMX〔〕,shmailMX5shmail.abc10shmail2.abc。的〕,即IP〔假設(shè)值〕?!?〕Sendmail連接,傳送這封給“mailto:shuser@sh.abc“shuser@sh.abc的SMTP三:SMTP的協(xié)議命令及常用應(yīng)用碼格式說明命令命令描述DATA開頭信息寫作EXPN<string>驗(yàn)證給定的郵箱列表是否存在,擴(kuò)大郵箱列表,也常被禁用HELO<domain>向效勞器標(biāo)識用戶身份,返回郵件效勞器身份HELP<comman查詢效勞器支持什么命令,返回命令中的信息d>MAILFROM<ho在主機(jī)上初始化一個郵件會話st>NOOP無操作,效勞器應(yīng)響應(yīng)OKQUIT終止郵件會話3RCPTTO<user>

標(biāo)識單個的郵件接收人;常在MAILrcptto:RSET 重置會話,當(dāng)前傳輸被取消st>SENDFROM<host>

發(fā)送郵件到用戶終端SOMLFROM<host>

發(fā)送郵件到用戶終端或郵箱TURN 接收端和發(fā)送端交換角色VRFY<user> 用于驗(yàn)證指定的用戶/郵箱是否存在;由于安全方面的緣由,效勞器常制止此命令應(yīng)用碼 格式說明501 參數(shù)格式錯誤502 命令不行實(shí)現(xiàn)503 錯誤的命令序列504 命令參數(shù)不行實(shí)現(xiàn)4211 系統(tǒng)狀態(tài)或系統(tǒng)幫助響應(yīng)214 幫助信息<domain>效勞就緒<domain>效勞關(guān)閉421 <domain>效勞未就緒,關(guān)閉傳輸信道要求的郵件操作完成用戶非本地,將轉(zhuǎn)發(fā)向<forward-path>450 要求的郵件操作未完成,郵箱不行用550 要求的郵件操作未完成,郵箱不行用451 放棄要求的操作;處理過程中出錯551 用戶非本地,請嘗試<forward-path>5452系統(tǒng)存儲缺乏,要求的操作未執(zhí)行452系統(tǒng)存儲缺乏,要求的操作未執(zhí)行四:試驗(yàn)分析1、程序運(yùn)行分析將程序執(zhí)行后會得到如以下圖所示結(jié)果:上圖黃線局部有三層信息:220是郵件效勞器返回給客戶的響應(yīng)狀態(tài)碼,它表示郵件效勞器預(yù)備就緒(serviceready)。smtp.qq表示當(dāng)前進(jìn)展的響應(yīng)的郵件效勞器的主機(jī)名。EsmtpSMTPSMTP送問候信息,得到的郵件效勞器返回結(jié)果如以下圖:6接著輸入如下一行命令:authlogin得到如下結(jié)果:334,SMTPBASE64BASE64如以下圖所示:7接著將郵件發(fā)送者的填寫為郵箱地址,得到如下效果圖:其中返回一個250的響應(yīng)狀態(tài)碼,代表當(dāng)前操作執(zhí)行成功。SMTPSMTPmailfrom8mailfrom的真實(shí)郵箱地址,而可以是其他人的郵箱地址。將郵件接收者的地址填寫完整,得到如下結(jié)果:郵件效勞器返回一個250的響應(yīng)狀態(tài)碼,代表當(dāng)前操作執(zhí)行成功。而事實(shí)上SMTP協(xié)議允許在一個連接通道中連接多個收件人完成余下工作得:9接著輸入data命令,表示后面將傳送郵件內(nèi)容。郵件效勞器返回354的響quit件的傳輸過程。SMTP效勞器接收到客戶端發(fā)送的quit命令后,將斷開與客戶端TelnetwindowsDOS2、數(shù)據(jù)包分析:以下圖為試驗(yàn)過程中抓取的SMTP數(shù)據(jù)包總體截圖:建立連接:10MUASMTPSMTPMUA發(fā):返回通告,如以下圖,表示支持該域轉(zhuǎn)發(fā)。11詢問是夠支持傳到該域即QQ:返回通告,表示支持,可以進(jìn)展下一步。SMTP12通告信息完畢掌握符是什么。發(fā)送郵件:13QQ告知MUA,信息已經(jīng)接收到,接著返回該郵件在效勞器中的隊(duì)列號:告知SMTP效勞器本次傳輸完畢:14效勞器賜予的回應(yīng):至此,整個發(fā)送過程完畢。五: 附錄〔發(fā)送程序〕#ifdefWIN32#include<windows.h>#include<stdio.h>#else#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<errno.h>#include<unistd.h>#include<sys/time.h>#endifstructdata6{unsignedintd4:6;unsignedintd3:6;unsignedintd2:6;unsignedintd1:6;15};//base64charcon628(charc6);voidbase64(char*dbuf,char*buf128,intlen);voidsendemail(char*email,char*body);intopen_socket(structsockaddr*addr);intmain{charemail[]=“mailto:1259705717@qq““1259705717@qq“;charbody[]=“From:“mailto:1259705717@qq“\“l(fā)ucy\“<1259705717@qq>\r\n““To:“mailto:874023326@qq“\“dasiy\“<874023326@qq>\r\n““Subject:Hello\r\n\r\n““HelloWorld,HelloEmail!“;sendemail(email,body);return0;}charcon628(charc6){charrtn=”\0”;if(c6<26)rtn=c6+65;elseif(c6<52)rtn=c6+71;elseif(c6<62)rtn=c6-4;elseif(c6==62)rtn=43;elsertn=47;returnrtn;}16//base64的實(shí)現(xiàn)voidbase64(char*dbuf,char*buf128,intlen){structdata6*ddd=NULL;inti=0;charbuf[256]={0};char*tmp=NULL;charcc=”\0”;memset(buf,0,256);strcpy(buf,buf128);for(i=1;i<=len/3;i++){tmp=buf+(i-1)*3;cc=tmp[2];tmp[2]=tmp[0];tmp[0]=cc;ddd=(structdata6*)tmp;dbuf[(i-1)*4+0]=con628((unsignedint)ddd->d1);dbuf[(i-1)*4+1]=con628((unsignedint)ddd->d2);dbuf[(i-1)*4+2]=con628((unsignedint)ddd->d3);dbuf[(i-1)*4+3]=con628((unsignedint)ddd->d4);}if(len%3==1){tmp=buf+(i-1)*3;cc=tmp[2];tmp[2]=tmp[0];tmp[0]=cc;ddd=(structdata6*)tmp;17dbuf[(i-1)*4+0]=con628((unsignedint)ddd->d1);dbuf[(i-1)*4+1]dbuf[(i-1)*4+2]==con628((unsigned”=”;int)ddd->d2);dbuf[(i-1)*4+3]}if(len%3==2){=”=”;tmp=buf+(i-1)*3;cc=tmp[2];tmp[2]=tmp[0];tmp[0]=cc;ddd=(structdata6*)tmp;dbuf[(i-1)*4+0]=con628((unsignedint)ddd->d1);dbuf[(i-1)*4+1]=con628((unsignedint)ddd->d2);dbuf[(i-1)*4+2]=con628((unsignedint)ddd->d3);dbuf[(i-1)*4+3]=”=”;}return;}//發(fā)送郵件voidsendemail(char*email,char*body){intsockfd=0;structsockaddr_intheir_addr={0};charbuf[1500]={0};charrbuf[1500]={0};charlogin[128]={0};charpass[128]={0};#ifdefWIN3218WSADATAWSAData;WSAStartup(MAKEWORD(2,2),&WSAData);#endifmemset(&their_addr,0,sizeof(their_addr));their_addr.sin_family=AF_INET;their_addr.sin_port=htons(25);their_addr.sin_addr.s_addr=inet_addr(“5“);//qqsmtp效勞器2秒后重連接sockfd=open_socket((structsockaddr*)&their_addr);memset(rbuf,0,1500);while(recv(sockfd,rbuf,1500,0)==0){printf(“reconnect...\n“);Sleep(2);//close(sockfd);sockfd=open_socket((structsockaddr*)&their_addr);memset(rbuf,0,1500);}printf(“%s\n“,rbuf);//EHLOmemset(buf,0,1500);sprintf(buf,“EHLOabcdefg-PC\r\n“);send(sockfd,buf,strlen(buf),0);memset(rbuf,0,1500);recv(sockfd,rbuf,1500,0);19printf(“%s\n“,rbuf);//AUTHLOGINmemset(buf,0,1500);sprintf(buf,“AUTHLOGIN\r\n“);send(sockfd,buf,strlen(buf),0);printf(“%s\n“,buf);memset(rbuf,0,1500);recv(sockfd,rbuf,1500,0);printf(“%s\n“,rbuf);//USERmemset(buf,0,1500);qqmemset(login,0,128);base64(login,buf,strlen(buf));sprintf(buf,“%s\r\n“,login);send(sockfd,buf,strlen(buf),0);printf(“%s\n“,buf);memset(rbuf,0,1500);recv(sockfd,rbuf,1500,0);printf(“%s\n“,rbuf);//PASSWORD“******“);//qqmemset(pass,0,128);base64(pass,buf,strlen(buf));sprintf(buf,“%s\r\n“,pass);send(sockfd,buf,strlen(buf),0);20printf(“%s\n“,buf);memset(rbuf,0,1500);recv(sockfd,rbuf,1500,0);printf(“%s\n“,rbuf);//MAILFROMmemset(buf,0,1500);sprintf(buf,“MAILFROM:“mailto:1259705717@qq“<1259705717@qq>\r\n“);send(sockfd,buf,strlen(buf),0);memset(rbuf,0,1500);recv(sockfd,rbuf,1500,0);printf(“%s\n“,rbuf);//RCPTTO第一個收件人sprintf(buf,“RCPT“mailto:874023326@qq“TO:<874023326@qq>\r\n“,email);send(sockfd,buf,strlen(buf),0);memset(rbuf,0,1500);recv(sockfd,rbuf,1500,0);printf(“%s\n“,rbuf);//DATA

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論