TNMSMTP控件如何实现SMTP认证功能?高手请解答。

Jobs_Weng 2003-08-25 11:51:00
TNMSMTP控件如何实现SMTP认证功能?高手请解答。感激!
...全文
380 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xikug 2003-08-28
  • 打赏
  • 举报
回复
我的程序就是这么写的。。。完全没问题。。。
Jobs_Weng 2003-08-28
  • 打赏
  • 举报
回复
xikug(西方不敢很帅) :不要急,我还没验证呢,正确的话你至少得90分。
XXSingle 2003-08-26
  • 打赏
  • 举报
回复
demo有例题.......
xikug 2003-08-26
  • 打赏
  • 举报
回复
NND,不给分。。。

哭。。。

哈哈。。。
tccb 2003-08-25
  • 打赏
  • 举报
回复
看demo程序
thebest123 2003-08-25
  • 打赏
  • 举报
回复
设置用户名和密码
sixgj 2003-08-25
  • 打赏
  • 举报
回复
呵呵。设置用户名和密码就是了。
xikug 2003-08-25
  • 打赏
  • 举报
回复
再给你两个关于Base64的函数

//BaseTable为BASE64码表
const BaseTable:string='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';

function FindInTable(CSource:char):integer;
begin
result:=Pos(string(CSource),BaseTable)-1;
end;

////
//解码函数
function DecodeBase64(Source:string):string;
var
SrcLen,Times,i:integer;
x1,x2,x3,x4,xt:byte;
begin
result:='';
SrcLen:=Length(Source);
Times:=SrcLen div 4;
for i:=0 to Times-1 do
begin
x1:=FindInTable(Source[1+i*4]);
x2:=FindInTable(Source[2+i*4]);
x3:=FindInTable(Source[3+i*4]);
x4:=FindInTable(Source[4+i*4]);
x1:=x1 shl 2;
xt:=x2 shr 4;
x1:=x1 or xt;
x2:=x2 shl 4;
result:=result+chr(x1);
if x3= 64 then break;
xt:=x3 shr 2;
x2:=x2 or xt;
x3:=x3 shl 6;
result:=result+chr(x2);
if x4=64 then break;
x3:=x3 or x4;
result:=result+chr(x3);
end;
end;
/////

//编码函数
function EncodeBase64(Source:string):string;
var
Times,LenSrc,i:integer;
x1,x2,x3,x4:char;
xt:byte;
begin
result:='';
LenSrc:=length(Source);
if LenSrc mod 3 =0 then
Times:=LenSrc div 3
else
Times:=LenSrc div 3 + 1;
for i:=0 to times-1 do
begin
if LenSrc >= (3+i*3) then
begin
x1:=BaseTable[(ord(Source[1+i*3]) shr 2)+1];
xt:=(ord(Source[1+i*3]) shl 4) and 48;
xt:=xt or (ord(Source[2+i*3]) shr 4);
x2:=BaseTable[xt+1];
xt:=(Ord(Source[2+i*3]) shl 2) and 60;
xt:=xt or (ord(Source[3+i*3]) shr 6);
x3:=BaseTable[xt+1];
xt:=(ord(Source[3+i*3]) and 63);
x4:=BaseTable[xt+1];
end
else if LenSrc>=(2+i*3) then
begin
x1:=BaseTable[(ord(Source[1+i*3]) shr 2)+1];
xt:=(ord(Source[1+i*3]) shl 4) and 48;
xt:=xt or (ord(Source[2+i*3]) shr 4);
x2:=BaseTable[xt+1];
xt:=(ord(Source[2+i*3]) shl 2) and 60;
x3:=BaseTable[xt+1];
x4:='=';
end else
begin
x1:=BaseTable[(ord(Source[1+i*3]) shr 2)+1];
xt:=(ord(Source[1+i*3]) shl 4) and 48;
x2:=BaseTable[xt+1];
x3:='=';
x4:='=';
end;
result:=result+x1+x2+x3+x4;
end;
end;
xikug 2003-08-25
  • 打赏
  • 举报
回复
认证过程

begin
...
nmsmtp1.Status;
if nmsmtp1.ReplyNumber = 250 then
nmsmtp1.Transaction('auth login'); //开始认证

if nmsmtp1.ReplyNumber =334 then //返回值为334,让你输入用BASE64编码后的用户名
nmsmtp1.Transaction(EncodeBase64(Username)); //Username为用户名

if nmsmtp1.ReplyNumber =334 then // 返回值为334,让你输入用BASE64编码后的用户密码
nmsmtp1.Transaction(EncodeBase64(Password)); //Password为密码

if nmsmtp1.ReplyNumber =235 then //返回值为235,代表认证成功了
begin
... //可以在这里发邮件
end;

...
end;

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧