利用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回答。
| |
|
|
| |
|
|