亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? smail.txt

?? windows socket smail 服務器和客戶端程序
?? TXT
字號:
摘要:本文介紹了如何增強BCB中發(fā)送電子郵件的NMSMTP控件的功能,實現(xiàn)具有身份認證功能的郵件發(fā)送程序。

  關鍵詞 ESMTP,MIME,身份認證

  引言

  為了更有效地抑制垃圾郵件的泛濫,目前多數(shù)網(wǎng)站的郵件收發(fā)系統(tǒng)都使用了ESMTP服務的身份認證功能。即用戶發(fā)送郵件時,需要對用戶的身份進行驗證,如果帳號或密碼錯誤,郵件服務器會拒絕發(fā)送郵件。Borland C++ Builder 6中有豐富的控件供開發(fā)者使用,其中當然也包括郵件發(fā)送控件NMSMTP,這個控件使用方便,但是惟一的缺點是不支持郵件發(fā)送時的身份認證功能。筆者通過對郵件發(fā)送協(xié)議的分析,在使用控件的基礎上設計了具有身份認證功能的郵件發(fā)送程序。

  ESMTP協(xié)議分析

  為了實現(xiàn)身份認證功能,目前ESMTP協(xié)議中增加了一部分內(nèi)容,這就是身份認證。下面我們看看這段認證過程,以筆者在網(wǎng)易的郵箱為例(其中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)客戶端向服務器發(fā)送認證指令。

  (2)服務器返回Base64編碼串,334意味成功。編碼字符串解碼后為"username:",說明要求客戶端發(fā)送用戶名。

  (3)客戶端發(fā)送Base64編碼的用戶名串,此處為"wyq_jn_sd_cn"。

  (4)服務器返回Base64編碼串,334意味成功。編碼字符串解碼后為"password:",說明要求客戶端發(fā)送用戶口令。

  (5)客戶端發(fā)送Base64編碼的口令串,此處略去。

  (6)服務器返回普通字符串,235意味成功,表示認證成功可以發(fā)送郵件了。

 MIME Base64編碼解釋

  一般的計算機編碼的一個字節(jié)是8bit,0——FF就是256種不同的8bit組合。我們現(xiàn)在要介紹的這種Base64編碼則是每個字節(jié)6bit,共有26=64種組合。其中每種組合對應一個字符,這些字符是“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567 89+/。”這就意味著每3個普通編碼可以轉換成4個Base64編碼,那么如果需要轉換的普通編碼不是3的整數(shù)倍怎么辦?Base64規(guī)定,位數(shù)不足的字節(jié)后面補0,然后差幾個字符補幾個‘=’號。

  設計思路

  我們可以使用NMSMTP控件與郵件服務器連接。通過調用Connect方法,然后監(jiān)聽OnConnect事件;在OnConnect事件里我們可以增加身份認證功能。這里是主要利用了NMSMTP從Powersock中繼承的一些基本網(wǎng)絡通訊函數(shù),包括Read,DataAvailable,SendBuffer等來實現(xiàn)身份認證過程。如果身份認證成功,就可以繼續(xù)進行郵件發(fā)送;否則,提示錯誤信息,斷開網(wǎng)絡連接。

  程序實現(xiàn)

  使用BCB設計如圖1所示的窗體

1、在登錄按鈕的OnClick事件中調用連接函數(shù)

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
";     //登錄請求命令        
  NMSMTP1->SendBuffer(Data.c_str(),Data.Length()); //命令發(fā)出
  rData = WaitForReply(5);     //等待接收返回數(shù)據(jù),5秒內(nèi)必須返回
  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)+"
";   //用戶名轉換為Base64編碼。
 NMSMTP1->SendBuffer(Data.c_str(),Data.Length()); //發(fā)送用戶名
 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)+"
";//口令轉換成Base64編碼。
 NMSMTP1->SendBuffer(Data.c_str(),Data.Length()); //發(fā)送口令
 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;      //允許發(fā)送郵件
disconnect->Enabled=true;   //允許斷開連接
Logon1->Enabled=false;      //不允許再次登錄
} 


3、MIME Base64編碼轉換

AnsiString TForm1::encode(AnsiString s)
{
 int m_len; //字符串長度
 int i; //循環(huán)變量
 int m_tmp; //臨時變量
 AnsiString m_64code; //儲存Base64編碼的字符串
 char* m_s; //臨時存儲參數(shù)字符串
 
 //Base64字符表
 char m_64[]= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 m_len = s.Length();     //取得字符串長度
 m_s = s.c_str();      
 m_64code="";         //返回串置空
 //處理3的倍數(shù)以內(nèi)的字符
 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 ,不足的位數(shù)補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 ,不足的位數(shù)補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環(huán)境下使用Borland C++ Builder 6.0編寫及調試的,分別使用網(wǎng)易和新浪郵箱做實驗,都可以順利完成身份認證以及郵件發(fā)送功能

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99re66热这里只有精品3直播 | 91精品国产综合久久福利| 国产精品自在欧美一区| 首页亚洲欧美制服丝腿| 日韩中文字幕麻豆| 欧美aaaaaa午夜精品| 麻豆91精品91久久久的内涵| 久久99日本精品| 国产美女精品人人做人人爽| 国产一二精品视频| va亚洲va日韩不卡在线观看| 一本久久a久久免费精品不卡| 91免费精品国自产拍在线不卡| 在线观看一区日韩| 欧美日本一区二区| 日韩欧美在线123| 国产亚洲欧美在线| 最近中文字幕一区二区三区| 一区二区三区四区激情 | 日韩亚洲欧美高清| 久久精品免费在线观看| 国产精品福利电影一区二区三区四区 | 色综合天天综合网天天狠天天| 91麻豆精品秘密| 3d动漫精品啪啪一区二区竹菊| 久久综合99re88久久爱| 国产精品免费看片| 亚洲v精品v日韩v欧美v专区| 国产呦萝稀缺另类资源| 91麻豆文化传媒在线观看| 欧美久久久影院| 日韩一区二区三区在线观看| 国产丝袜美腿一区二区三区| 一区二区高清视频在线观看| 精品一区二区三区免费毛片爱| 成人高清伦理免费影院在线观看| 91蜜桃婷婷狠狠久久综合9色| 欧美一区二区在线视频| 国产精品免费人成网站| 琪琪久久久久日韩精品| 不卡电影免费在线播放一区| 91.麻豆视频| 亚洲久草在线视频| 国产美女一区二区| 正在播放亚洲一区| 亚洲精品国产品国语在线app| 久久狠狠亚洲综合| 欧美日韩情趣电影| 日韩毛片一二三区| 国产v日产∨综合v精品视频| 3d成人h动漫网站入口| 亚洲免费观看高清完整版在线观看| 麻豆高清免费国产一区| 欧美丝袜丝交足nylons| 国产精品国产三级国产aⅴ中文| 免费看日韩a级影片| 欧美视频完全免费看| 亚洲视频香蕉人妖| 成人精品一区二区三区中文字幕| 欧美一区二区三区喷汁尤物| 亚洲综合视频网| 91麻豆国产福利在线观看| 亚洲国产精品99久久久久久久久| 久久精品国产99国产精品| 8v天堂国产在线一区二区| 一区二区三区蜜桃| 91在线观看视频| 亚洲天堂中文字幕| 色综合久久久久综合体| 国产精品久久久久精k8| 成人激情图片网| 中文字幕日韩av资源站| 粗大黑人巨茎大战欧美成人| 国产欧美在线观看一区| 国产精品影视在线观看| 国产清纯白嫩初高生在线观看91 | 国产精品小仙女| 国产亚洲欧美中文| 国产精品香蕉一区二区三区| 久久精品人人做人人爽人人| 国产a视频精品免费观看| 国产欧美精品一区| jlzzjlzz国产精品久久| 亚洲精品ww久久久久久p站| 一本一道久久a久久精品 | 51精品国自产在线| 麻豆国产91在线播放| 26uuu国产日韩综合| 国产成人自拍网| 1024成人网色www| 91成人免费网站| 亚洲超碰精品一区二区| 欧美一区二区三区影视| 国产一二三精品| 亚洲欧美国产高清| 欧美日韩免费一区二区三区视频| 日韩电影免费在线观看网站| 26uuu久久天堂性欧美| av一本久道久久综合久久鬼色| 一区二区三区不卡在线观看 | 韩国av一区二区三区四区| 国产三级久久久| 91丨九色丨国产丨porny| 亚洲国产乱码最新视频| 91精品国产一区二区三区| 国产一区二区不卡在线| 亚洲欧美日韩一区| 精品久久一区二区| 一本色道久久综合亚洲aⅴ蜜桃 | 制服丝袜一区二区三区| 国产一区二区三区久久久| 亚洲另类色综合网站| 欧美精品一区二区在线播放| 成人性生交大片免费看在线播放| 一片黄亚洲嫩模| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲欧美韩国综合色| 日韩三级精品电影久久久 | 一区二区三区加勒比av| 国产日韩精品视频一区| 欧美日韩一级二级| www.欧美色图| 日本成人在线看| 国产精品久久久99| 精品不卡在线视频| 欧美人妇做爰xxxⅹ性高电影 | 婷婷综合另类小说色区| 一区二区三区不卡视频| 久久只精品国产| 欧美亚洲愉拍一区二区| 丁香婷婷综合激情五月色| 日韩精品亚洲一区二区三区免费| 亚洲欧洲日韩一区二区三区| 欧美精品一区二区三区蜜臀| 宅男在线国产精品| 欧美色图天堂网| av一区二区不卡| 成人av资源在线观看| 国产精品夜夜嗨| 精品亚洲国内自在自线福利| 免费精品视频在线| 视频一区在线视频| 亚洲国产精品自拍| 亚洲尤物视频在线| 亚洲已满18点击进入久久| 亚洲另类在线视频| 亚洲男同性恋视频| 亚洲四区在线观看| 亚洲美女淫视频| 一区二区三区四区国产精品| 中文字幕中文乱码欧美一区二区| 亚洲国产成人在线| 国产精品免费丝袜| 亚洲女同ⅹxx女同tv| 日韩理论电影院| 亚洲乱码国产乱码精品精可以看| 亚洲色图制服诱惑| 亚洲综合激情另类小说区| 亚洲成人av一区二区三区| 午夜激情一区二区三区| 三级成人在线视频| 国产一区二区在线电影| 国产精品资源在线看| 不卡区在线中文字幕| 欧美精品vⅰdeose4hd| 欧美日韩一区二区欧美激情 | 国产成人亚洲精品青草天美| 国产成人免费视| jiyouzz国产精品久久| 99久久99精品久久久久久| 在线一区二区三区做爰视频网站| 欧美性生交片4| 精品少妇一区二区三区视频免付费| 2021中文字幕一区亚洲| 亚洲欧洲精品天堂一级| 日韩电影免费一区| 福利一区在线观看| 欧美视频完全免费看| 亚洲精品在线三区| 亚洲男人天堂av| 免费在线看成人av| av中文一区二区三区| 欧美日韩一区二区三区高清| 欧美精品一区二区久久婷婷| 最新国产成人在线观看| 午夜精品一区二区三区三上悠亚| 国产在线观看一区二区| 色婷婷av一区二区三区软件| 欧美一级片在线看| 亚洲你懂的在线视频| 精品亚洲成a人| 欧美色爱综合网| 国产精品电影一区二区| 日韩制服丝袜av| 91首页免费视频| 精品久久久久久最新网址| 一区二区三区成人| 国产成人午夜精品5599| 日韩一区二区在线播放| 一区二区三区四区中文字幕|