pop3接收邮件的问题高分求教 请问:base64解码的程序怎么写啊??跪求大哥大姐。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是转贴.希望对你有所帮助.//窗体上有一个BUTTON控件,一个LABEL控件,一个NMSMTP控件//带密码险证的邮件发送程序需要BASE64编码,DecodeBase64和 EncodeBase64//为解码和编码函数//在263、163和SOHU上都能发送成功unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Psock, NMsmtp, ComCtrls;typeTForm1 = class(TForm) NMSMTP1: TNMSMTP; Button1: TButton; StatusBar1: TStatusBar; Edit1: TEdit; Label2: TLabel; Label3: TLabel; Edit2: TEdit; Label4: TLabel; Edit3: TEdit; Label5: TLabel; Edit4: TEdit; Label6: TLabel; Memo1: TMemo; Label7: TLabel; Edit5: TEdit; Label1: TLabel; Edit6: TEdit; Label8: TLabel; procedure Button1Click(Sender: TObject); procedure NMSMTP1Connect(Sender: TObject); procedure NMSMTP1InvalidHost(var Handled: Boolean); procedure NMSMTP1ConnectionFailed(Sender: TObject); procedure NMSMTP1Status(Sender: TComponent; Status: String); procedure NMSMTP1SendStart(Sender: TObject); procedure NMSMTP1Success(Sender: TObject);private { Private declarations }public { Public declarations }end;//BaseTable为BASE64码表const BaseTable:string='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';var Form1: TForm1; AuthSucc:boolean;// 是否需要密码验证 function DecodeBase64(Source:string):string; //解码函数 function FindInTable(CSource:char):integer; // function EncodeBase64(Source:string):string; //编码函数implementation{$R *.DFM}//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;//////////procedure TForm1.Button1Click(Sender: TObject);//var MailTo,MailBody:TStringList;begin Nmsmtp1.Host :=Edit1.Text; nmsmtp1.Port :=25; nmsmtp1.UserID :=Edit2.Text;//发信人的用户名,必须是真实的 nmsmtp1.ReportLevel :=1; Nmsmtp1.TimeOut :=10000; nmsmtp1.Connect ; ///连接 if AuthSucc=true then ////验证成功 begin nmsmtp1.PostMessage.FromAddress:=Edit4.Text; //发信人的电子邮件地址 nmsmtp1.PostMessage.ToAddress.Text :=Edit5.Text; nmsmtp1.PostMessage.Body.Text:=Memo1.Text; nmsmtp1.PostMessage.Subject :=Edit6.Text; nmsmtp1.SendMail; end;end;procedure TForm1.NMSMTP1Connect(Sender: TObject);begin //////连接成功,下面用户认证过程 StatusBar1.SimpleText:=nmsmtp1.Status; if nmsmtp1.ReplyNumber = 250 then StatusBar1.SimpleText:=nmsmtp1.Transaction('auth login'); //开始认证 if nmsmtp1.ReplyNumber =334 then //返回值为334,让你输入用BASE64编码后的用户名 StatusBar1.SimpleText:=nmsmtp1.Transaction(EncodeBase64(Edit2.Text)); if nmsmtp1.ReplyNumber =334 then // 返回值为334,让你输入用BASE64编码后的用户密码 StatusBar1.SimpleText:=nmsmtp1.Transaction(EncodeBase64(Edit3.Text)); if nmsmtp1.ReplyNumber =235 then begin StatusBar1.SimpleText:='successful'; AuthSucc:=true; end;end;procedure TForm1.NMSMTP1InvalidHost(var Handled: Boolean);begin StatusBar1.SimpleText :='Invalid Host';end;procedure TForm1.NMSMTP1ConnectionFailed(Sender: TObject);begin StatusBar1.SimpleText :='connect failed';end;procedure TForm1.NMSMTP1Status(Sender: TComponent; Status: String);begin StatusBar1.SimpleText :=nmsmtp1.Status ;end;procedure TForm1.NMSMTP1SendStart(Sender: TObject);begin StatusBar1.SimpleText :='start send';end;procedure TForm1.NMSMTP1Success(Sender: TObject);begin StatusBar1.SimpleText:='send success!';end;end. Socket 问题 在DELPHI中动态调用动态库的问题 交个朋友 请问27-33岁的男程序员们,你们想娶什么样的女孩 一个注册表的问题!!!急 Table的简单问题 如何用insert语句实现2个表的数据拷贝 帮我把c的代码翻成delphi的,有关指针! 我,真的有点灰心。。。。。。。 大神留步 请教高手 征求思路!!
//窗体上有一个BUTTON控件,一个LABEL控件,一个NMSMTP控件
//带密码险证的邮件发送程序需要BASE64编码,DecodeBase64和 EncodeBase64
//为解码和编码函数
//在263、163和SOHU上都能发送成功
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Psock, NMsmtp, ComCtrls;type
TForm1 = class(TForm)
NMSMTP1: TNMSMTP;
Button1: TButton;
StatusBar1: TStatusBar;
Edit1: TEdit;
Label2: TLabel;
Label3: TLabel;
Edit2: TEdit;
Label4: TLabel;
Edit3: TEdit;
Label5: TLabel;
Edit4: TEdit;
Label6: TLabel;
Memo1: TMemo;
Label7: TLabel;
Edit5: TEdit;
Label1: TLabel;
Edit6: TEdit;
Label8: TLabel;
procedure Button1Click(Sender: TObject);
procedure NMSMTP1Connect(Sender: TObject);
procedure NMSMTP1InvalidHost(var Handled: Boolean);
procedure NMSMTP1ConnectionFailed(Sender: TObject);
procedure NMSMTP1Status(Sender: TComponent; Status: String);
procedure NMSMTP1SendStart(Sender: TObject);
procedure NMSMTP1Success(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;//BaseTable为BASE64码表
const BaseTable:string='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';var
Form1: TForm1;
AuthSucc:boolean;// 是否需要密码验证
function DecodeBase64(Source:string):string; //解码函数
function FindInTable(CSource:char):integer; //
function EncodeBase64(Source:string):string; //编码函数
implementation
{$R *.DFM}//
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;//////////
procedure TForm1.Button1Click(Sender: TObject);
//var MailTo,MailBody:TStringList;
begin
Nmsmtp1.Host :=Edit1.Text;
nmsmtp1.Port :=25;
nmsmtp1.UserID :=Edit2.Text;//发信人的用户名,必须是真实的
nmsmtp1.ReportLevel :=1;
Nmsmtp1.TimeOut :=10000;
nmsmtp1.Connect ; ///连接
if AuthSucc=true then ////验证成功
begin
nmsmtp1.PostMessage.FromAddress:=Edit4.Text; //发信人的电子邮件地址
nmsmtp1.PostMessage.ToAddress.Text :=Edit5.Text;
nmsmtp1.PostMessage.Body.Text:=Memo1.Text;
nmsmtp1.PostMessage.Subject :=Edit6.Text;
nmsmtp1.SendMail;
end;
end;procedure TForm1.NMSMTP1Connect(Sender: TObject);
begin
//////连接成功,下面用户认证过程
StatusBar1.SimpleText:=nmsmtp1.Status;
if nmsmtp1.ReplyNumber = 250 then
StatusBar1.SimpleText:=nmsmtp1.Transaction('auth login'); //开始认证
if nmsmtp1.ReplyNumber =334 then //返回值为334,让你输入用BASE64编码后的用户名
StatusBar1.SimpleText:=nmsmtp1.Transaction(EncodeBase64(Edit2.Text));
if nmsmtp1.ReplyNumber =334 then // 返回值为334,让你输入用BASE64编码后的用户密码
StatusBar1.SimpleText:=nmsmtp1.Transaction(EncodeBase64(Edit3.Text));
if nmsmtp1.ReplyNumber =235 then
begin
StatusBar1.SimpleText:='successful';
AuthSucc:=true;
end;
end;procedure TForm1.NMSMTP1InvalidHost(var Handled: Boolean);
begin
StatusBar1.SimpleText :='Invalid Host';
end;
procedure TForm1.NMSMTP1ConnectionFailed(Sender: TObject);
begin
StatusBar1.SimpleText :='connect failed';
end;
procedure TForm1.NMSMTP1Status(Sender: TComponent; Status: String);
begin
StatusBar1.SimpleText :=nmsmtp1.Status ;
end;
procedure TForm1.NMSMTP1SendStart(Sender: TObject);
begin
StatusBar1.SimpleText :='start send';
end;
procedure TForm1.NMSMTP1Success(Sender: TObject);
begin
StatusBar1.SimpleText:='send success!';
end;end.