亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用BCB開發有身份認證功能的Email程序

2019-11-17 05:27:13
字體:
來源:轉載
供稿:網友
    摘 要 本文介紹了如何增強BCB中發送電子郵件的NMSMTP控件的功能,實現具有身份認證功能的郵件發送程序。    要害詞 ESMTP,MIME,身份認證    引言    為了更有效地抑制垃圾郵件的泛濫,目前多數網站的郵件收發系統都使用了ESMTP服務的身份認證功能。即用戶發送郵件時,需要對用戶的身份進行驗證,假如帳號或密碼錯誤,郵件服務器會拒絕發送郵件。Borland C++ Builder 6中有豐富的控件供開發者使用,其中當然也包括郵件發送控件NMSMTP,這個控件使用方便,但是惟一的缺點是不支持郵件發送時的身份認證功能。筆者通過對郵件發送協議的分析,在使用控件的基礎上設計了具有身份認證功能的郵件發送程序。    ESMTP協議分析    為了實現身份認證功能,目前ESMTP協議中增加了一部分內容,這就是身份認證。下面我們看看這段認證過程,以筆者在網易的郵箱為例(其中C表示客戶端,S表示郵件服務器):    (1)C: AUTH LOGIN    (2)S: 334 dXNlcm5hbWU6    (3)C: d3lxX2puX3NkX2Nu    (4)S: 334 UGFzc3dvcmQ6    (5)C: 密碼略去    (6)S: 235 Authentication sUCcessful    具體說明:    (1)客戶端向服務器發送認證指令。    (2)服務器返回Base64編碼串,334意味成功。編碼字符串解碼后為"username:",說明要求客戶端發送用戶名。    (3)客戶端發送Base64編碼的用戶名串,此處為"wyq_jn_sd_cn".    (4)服務器返回Base64編碼串,334意味成功。編碼字符串解碼后為"passWord:",說明要求客戶端發送用戶口令。    (5)客戶端發送Base64編碼的口令串,此處略去。    (6)服務器返回普通字符串,235意味成功,表示認證成功可以發送郵件了。    MIME Base64編碼解釋    一般的計算機編碼的一個字節是8bit,0——FF就是256種不同的8bit組合。我們現在要介紹的這種Base64編碼則是每個字節6bit,共有26=64種組合。其中每種組合對應一個字符,這些字符是“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567 89+/.”這就意味著每3個普通編碼可以轉換成4個Base64編碼,那么假如需要轉換的普通編碼不是3的整數倍怎么辦?Base64規定,位數不足的字節后面補0,然后差幾個字符補幾個‘=’號。    設計思路    我們可以使用NMSMTP控件與郵件服務器連接。通過調用Connect方法,然后監聽OnConnect事件;在OnConnect事件里我們可以增加身份認證功能。這里是主要利用了NMSMTP從Powersock中繼續的一些基本網絡通訊函數,包括Read,DataAvailable,SendBuffer等來實現身份認證過程。假如身份認證成功,就可以繼續進行郵件發送;否則,提示錯誤信息,斷開網絡連接。程序實現  使用BCB設計如圖1所示的窗體。用BCB開發有身份認證功能的Email程序
圖1 程序主界面  1、在登錄按鈕的OnClick事件中調用連接函數void __fastcall TForm1::Logon1Click(TObject *Sender){   AddLog("正在登錄"+Edit1->Text+"......");   NMSMTP1->Host = Edit1->Text;      //主機地址   NMSMTP1->Port = 25;      //主機端口,缺省為25   NMSMTP1->UserID = Edit4->Text;     //用戶名   NMSMTP1->Connect();      //連接主機
}    2、處理OnConnect事件void __fastcall TForm1::NMSMTP1Connect(TObject *Sender){ AddLog("連接服務器成功。"); AnsiString Data="",rData=""; bool b_ok; if(CheckBox1->Checked){  Data="AUTH LOGIN/r/n";     //登錄請求命令          NMSMTP1->SendBuffer(Data.c_str(),Data.Length()); //命令發出  rData = WaitForReply(5);     //等待接收返回數據,5秒內必須返回  b_ok = false;  if(rData.Length()>=3){   //334意味著服務器要求輸入用戶名   if(rData.TrimLeft().SubString(0,3)=="334"){    AddLog("正在驗證身份......");    b_ok =true;   } } if(!b_ok){  AddLog("登錄失敗,正在退出......");  NMSMTP1->Disconnect();  return; } rData=""; Data=encode(Edit4->Text)+"/r/n";   //用戶名轉換為Base64編碼?!MSMTP1->SendBuffer(Data.c_str(),Data.Length()); //發送用戶名 rData = WaitForReply(5); b_ok=false; if(rData.Length()>=3){  // 334意味著服務器要求輸入口令  if(rData.TrimLeft().SubString(0,3)=="334"){   AddLog("正在驗證口令......");   b_ok =true;  } } if(!b_ok){  AddLog("登錄失敗,正在退出......");  NMSMTP1->Disconnect();  return; } rData=""; Data=encode(Edit5->Text)+"/r/n";//口令轉換成Base64編碼?!MSMTP1->SendBuffer(Data.c_str(),Data.Length()); //發送口令 rData=WaitForReply(5); b_ok = false; if(rData.Length()>=3){  if(rData.TrimLeft().SubString(0,3)=="235"){   AddLog("登錄成功......");   b_ok =true;  } } if(!b_ok){  AddLog("登錄失敗,正在退出......");  NMSMTP1->Disconnect();  return; }}SendMail->Enabled=true;      //答應發送郵件disconnect->Enabled=true;   //答應斷開連接Logon1->Enabled=false;      //不答應再次登錄}  3、MIME Base64編碼轉換AnsiString TForm1::encode(AnsiString s){ int m_len; //字符串長度 int i; //循環變量 int m_tmp; //臨時變量 AnsiString m_64code; //儲存Base64編碼的字符串 char* m_s; //臨時存儲參數字符串
 
 //Base64字符表 char m_64[]= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; m_len = s.Length();     //取得字符串長度 m_s = s.c_str();       m_64code="";         //返回串置空 //處理3的倍數以內的字符 for(i=0;i<m_len-m_len%3;i+=3){  m_tmp=m_s[i]/4;  m_64code+=m_64[m_tmp];  m_tmp=m_s[i]%4*16 + m_s[i+1]/16;  m_64code+=m_64[m_tmp];  m_tmp=m_s[i+1]%16*4 + m_s[i+2]/64;  m_64code+=m_64[m_tmp];  m_tmp=m_s[i+2]%64;  m_64code+=m_64[m_tmp]; } //假如字符串的長度被3除余2 ,不足的位數補0,尾部補“=”
 if(m_len%3==2){
 
  m_tmp=m_s[m_len-2]/4;  m_64code+=m_64[m_tmp];  m_tmp=m_s[m_len-2]%4*16+m_s[m_len-1]/16;  m_64code+=m_64[m_tmp];  m_tmp=m_s[m_len-1]%16*4;  m_64code+=m_64[m_tmp];  m_64code+='='; } //假如字符串的長度被3除余1 ,不足的位數補0,尾部補兩個“=” if(m_len%3==1){  m_tmp=m_s[m_len-1]/4;  m_64code+=m_64[m_tmp];  m_tmp=m_s[m_len-1]%4*16;  m_64code+=m_64[m_tmp];  m_64code+="=="; } return m_64code;}
  結束語  本程序在windows 2000環境下使用Borland C++ Builder 6.0編寫及調試的,分別使用網易和新浪郵箱做實驗,都可以順利完成身份認證以及郵件發送功能。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区日韩精品欧美精品| 成人福利在线视频| 97精品国产97久久久久久春色| 国产视频精品xxxx| 亚州av一区二区| 亚洲精品美女免费| 在线电影欧美日韩一区二区私密| 成人黄色短视频在线观看| 成人免费看片视频| 国产精品成人av在线| 成人a在线视频| 精品精品国产国产自在线| 亚州av一区二区| 亚洲人高潮女人毛茸茸| 久久精品国产96久久久香蕉| 九九热这里只有精品6| 日韩最新中文字幕电影免费看| 亚洲色图综合久久| 亚洲成人黄色在线观看| 欧美色视频日本版| 97精品一区二区视频在线观看| 亚洲香蕉在线观看| 国产午夜精品全部视频在线播放| 欧美成人亚洲成人日韩成人| 亚洲图片制服诱惑| 91精品国产沙发| 国产精品狠色婷| 国产精品扒开腿爽爽爽视频| 91精品国产亚洲| 日韩av黄色在线观看| 欧美有码在线观看| 国产成人久久久精品一区| 97热精品视频官网| 欧美日韩国产一区中文午夜| 国产裸体写真av一区二区| 国产精品无码专区在线观看| 欧美精品手机在线| 国产精品亚洲欧美导航| 国产欧美精品一区二区| 91九色精品视频| 精品国产一区二区三区久久狼黑人| 国内精品久久久久| 91av视频在线播放| 日韩精品视频免费专区在线播放| 国产成人精品网站| 久久精品91久久久久久再现| 欧美极品少妇与黑人| 日韩欧美在线字幕| 日本高清+成人网在线观看| 亚洲xxxxx性| 亚洲视频欧洲视频| 日本精品久久中文字幕佐佐木| 在线视频一区二区| 日韩欧美国产一区二区| 成人国内精品久久久久一区| 国外成人免费在线播放| 久久久精品欧美| 亚洲福利视频免费观看| 欧美亚洲成人xxx| 在线观看日韩av| 亚洲欧美一区二区三区四区| 最近中文字幕mv在线一区二区三区四区| 欧美日韩日本国产| 国产婷婷97碰碰久久人人蜜臀| 国产999视频| 欧美黄色片免费观看| 91在线免费网站| 亚洲视频国产视频| 久久露脸国产精品| 欧美裸体xxxxx| 亚洲四色影视在线观看| 91人人爽人人爽人人精88v| 久久精品电影网站| 日韩精品视频在线观看免费| 亚洲天堂av女优| 欧美极品少妇xxxxⅹ免费视频| 亚洲伊人成综合成人网| 狠狠色狠狠色综合日日五| 久久在线免费视频| 国产欧美日韩免费| 欧美日韩在线第一页| 91av免费观看91av精品在线| 亚洲视频axxx| 亚洲影视中文字幕| 精品福利在线看| 色妞一区二区三区| 5278欧美一区二区三区| 亚洲精品午夜精品| 国产免费一区二区三区香蕉精| 亚洲一区www| 爽爽爽爽爽爽爽成人免费观看| 3344国产精品免费看| 中文字幕国产亚洲| 国产日韩欧美在线播放| 欧美激情亚洲视频| 成人激情电影一区二区| 中文字幕一区日韩电影| 日韩在线视频网| 91精品国产91久久| 黄色成人av网| 最近2019年手机中文字幕| 日本乱人伦a精品| 日韩人体视频一二区| 国产91色在线免费| 亚洲一区国产精品| 亚洲最大激情中文字幕| 国模精品视频一区二区三区| 亚洲综合成人婷婷小说| 亚洲在线观看视频网站| 久久久久国产一区二区三区| 欧美成在线视频| 日韩精品中文字幕视频在线| 国产精品日韩精品| 韩国视频理论视频久久| 在线观看国产成人av片| 亚洲色图偷窥自拍| 在线亚洲午夜片av大片| 欧美激情精品久久久| 成人免费自拍视频| 成人激情视频在线| 欧美一级电影久久| 国产精品久久久久久久久久久不卡| 国产精品大片wwwwww| 欧美在线视频一区| 国产成一区二区| 亚洲色图第一页| 91精品视频大全| 国产精品高清在线| 欧洲美女免费图片一区| 国产精品老女人视频| 国产成人综合精品在线| 亚洲精品日韩激情在线电影| 欧美亚洲视频在线看网址| 97视频在线观看免费| 91禁外国网站| 91精品综合视频| 欧美成人剧情片在线观看| 亚洲人成77777在线观看网| 6080yy精品一区二区三区| 欧美裸身视频免费观看| 久久久久99精品久久久久| 91精品久久久久久综合乱菊| 久久久免费精品| 久久精品国产2020观看福利| 91香蕉电影院| 韩国视频理论视频久久| 欧美黑人狂野猛交老妇| 97久久精品视频| 亚洲三级 欧美三级| 日韩电影免费观看中文字幕| 亚洲国产精品推荐| 欧美激情亚洲一区| 成人国内精品久久久久一区| 一区二区三区视频免费在线观看| 欧美日韩亚洲精品内裤| 国产精品久久久久久影视| 亚洲久久久久久久久久久| 久久久亚洲精品视频| 夜夜嗨av色一区二区不卡| 最新中文字幕亚洲| 一本色道久久综合狠狠躁篇怎么玩| 欧美精品免费播放| 亚洲国产三级网| 91在线国产电影|