工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > BCB > 正文
用BCB开发有身份认证功能的Email程序
[文章信息]
作者:王永乾 吕蓉
时间:2004-12-11
出处:计算机与信息技术
责任编辑:方舟
[文章导读]
本文介绍了如何增强BCB中发送电子邮件的NMSMTP控件的功能,实现具有身份认证功能的邮件发送程序
advertisement
热点推荐
· 真没想到VB也可以这样用之指针技术
· 禁止QQ登录的方法
· 给你的XML文件做个数字签名
· ImageReady制作“焰火”小动画
· Java加密和数字签名编程快速入门
[正文]

上一页  1 2  

  程序实现

  使用BCB设计如图1所示的窗体。


图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编码。

 NMSMTP1->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编码。

 NMSMTP1->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编写及调试的,分别使用网易和新浪邮箱做实验,都可以顺利完成身份认证以及邮件发送功能。

上一页  1 2  

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • C++ Builder构建算二十四点小游戏
  • 用C++ Builder实现桌布自动更新
  • 民营家电商排队造手机 设备商全面杀入
  • 英特尔澄清杨旭任职传闻 官方没宣布此消息
  • 国资委河北密制联通拆分方案
  • 垃圾邮件害人害企害国 清除垃圾邮件不手软
  • 中兴携手阿尔卡特 全球逐鹿CDMA
  • 用友总裁王文京:誓将ERP变成“大众消费”
  • 香港消费者委员会:数码相机最贵未必最好
  • 外电称中兴正评估西门子手机业务 或能并购
  • Advertisement