热情软件屋

 

利用smtp控件的何种方法才能通过smtp身份认证


编号:QA004151
建立日期: 2001年4月24日 最后修改日期:2001年4月24日
所属类别:

qqj:
    操作系统:win98
    编程工具:bcb5
    问题:我使用bcb5中的smtp控件开发一个email发送程序,利用smtp控件的何种方法才能通过smtp身份认证,请给出一个例子。谢谢!!

回答:

    这也许是TNMSMTP控件的一个缺点,你要想单纯利用这个控件来完成身份认证工作的话,只能期待它的升级。
    但也不是没有办法的如果你熟悉SMTP协议的话,可以重载这个控件的Connect方法,如:
    public __fastcall TMySMTP:Connect(){
     TNMSMTP::Connect();//你只能利用它来完成连接动作,之后的命令都得由你自己来完成直到到身份认证通过,通过之后你还是可以用它的方法来发邮件。
     AnsiString Data="EHLO "+UserID+"\r\n",rData="";
     SendBuffer(Data.c_str(),Data.Length());
     // 对接收的数据进行处理
     while(处理完成标志){
     Sleep(100);
     rData+=Read(256);
     // 处理过程,注意在返回值是多行,目前一般用的是AUTH LOGIN方法,你应该从返回值中检查是否有该字串,如果有表明应该进行该种身份认证,至于其它的认证方法我也未去研究。
     // 怎样判断处理完成呢,前面若干行均由'-'字符打头,最后一行没有此字符。
     ... // 如果处理发现不正确,应该抛出异常,终断操作。
     Application->ProcessMessages();
     }
     rData="";
     if(需要进行AUTH LOGIN认证){
     Data="AUTH LOGIN\r\n";
     SendBuffer(Data.c_str(),Data.Length());
     // 对接收的数据进行处理
     while(处理完成标志){ //
     Sleep(100);
     rData+=Read(256); // 如果正确,应该是后面的样子:"334 ...\r\n",其中...是以base64编码的字串.
     ... // 如果处理发现不正确,应该抛出异常,终断操作。
     Application->ProcessMessages();
     }
     Data=Base64Encode(UserID)+"\r\n";// Base64Encode函数是你的自定义函数。
     SendBuffer(Data.c_str(),Data.Length());
     // 对接收的数据进行处理
     rData="";
     while(处理完成标志){ //
     Sleep(100);
     rData+=Read(256); // 如果正确,应该是后面的样子:"334 ...\r\n",其中...是以base64编码的字串.
     ... // 如果处理发现不正确,应该抛出异常,终断操作。
     Application->ProcessMessages();
     }
     Data=Base64Encode(Password)+"\r\n";// Base64Encode函数是你的自定义函数。
     SendBuffer(Data.c_str(),Data.Length());
     // 对接收的数据进行处理
     rData="";
     while(处理完成标志){ //
     Sleep(100);
     rData+=Read(256); // 如果正确,应该是后面的样子:"235 ...\r\n".
     ... // 如果处理发现不正确,应该抛出异常,中断操作。
     Application->ProcessMessages();
     }
     }
    }
    
    相关问题:
    QA003775 "怎样增加smtp身份认证功能"

此问题由zmpxf回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio