SMTP组件访问邮件服务器,如果服务器需要用户身份验证这个问题我作的也不好,hezchuan168可以给我一个么,让我开开眼阿!?
解决方案 »
- VB的On Error Resume Next在DELPHI中应怎么写?
- 自己写的数据感知组件
- 关于datetimePicker的日期问题
- 请问有什么好办法获得错误???经常报错,还是随机的,又不知道是哪报的错,郁闷!!!
- 怎样实现打印我用 Fast Report 编辑好的报表?(急阿!)
- 讨论一下,各位都用什么工具查看DLL?
- round函数的具体含义如何?
- 热点问题,思维体操,我想,我想,我想想想
- 请问用ADO对access数据库进行操作应该如何insert记录?
- 1.有否space(2)的函数,case能否在select中使用.
- 如何动态查询符合日期条件的?
- 请教大家一个问题,我用KillTimer把一个程序的时间终止了,如何让它重新启动?
Form1: TForm1;
AuthSucc:boolean;// 是否需要密码验证
const BaseTable:string='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';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;
i:integer;
begin
Nmsmtp1.Host :=Editsmtpadd.Text ;
nmsmtp1.Port :=StrToInt(Editsmtpport.Text);
nmsmtp1.UserID :=Editsmtpusername.Text ;
////////////'liubojj';//发信人的用户名,必须是真实的
nmsmtp1.ReportLevel :=1;
Nmsmtp1.TimeOut :=10000;
try
nmsmtp1.Connect ; ///连接
except
Memo2.Lines.Add('无法连接服务器!');
end;if AuthSucc=true then ////验证成功
begin
MailTo:=TStringList.Create;
MailBody:=TStringList.Create;
MailTo.Add('[email protected]');
if EditTo2.Text <>'' then
MailTo.add(EditTo2.Text );
// for i:=0 to Memo1.Lines.Count-1 do
// begin
MailBody.AddStrings(Memo1.lines);
// end;
// MailBody.Add('Hello it is a test');
nmsmtp1.PostMessage.FromAddress:=Edit_From.text;
//////'[email protected]'; //发信人的电子邮件地址
nmsmtp1.PostMessage.ToAddress :=MailTo;
nmsmtp1.PostMessage.Body:=MailBody;
nmsmtp1.PostMessage.Subject :=Edit_subject.Text;//////////'My test';
Mailto.Clear ;
//Mailto.Add('c:\a.txt');
//Mailto.Add('c:\b.txt');
//nmsmtp1.PostMessage.Attachments:=MailTo; 附件
MailTo.Free ;
MailBody.Free;
nmsmtp1.TimeOut :=10000;
nmsmtp1.SendMail;
nmsmtp1.Disconnect;end;end;procedure TForm1.appevException(Sender: TObject; E: Exception);
begin
//showmessage('appevexception');
end;procedure TForm1.appevMessage(var Msg: tagMSG; var Handled: Boolean);
begin
//listbox1.Items.Add('message');
//form1.caption:=inttostr(listbox1.Count);
// s := SysErrorMessage(ErrCode);
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
begin
Lblsmtpusername.Enabled :=true;
Lblsmtppassword.Enabled :=true;
Editsmtpusername.Enabled :=true;
Editsmtppassword.Enabled :=true;
end
else
begin
Lblsmtpusername.Enabled :=false;
Lblsmtppassword.Enabled :=false;
Editsmtpusername.Enabled :=false;
Editsmtppassword.Enabled :=false;
end;end;procedure TForm1.FormCreate(Sender: TObject);
begin
Lblsmtpusername.Enabled :=false;
Lblsmtppassword.Enabled :=false;
Editsmtpusername.Enabled :=false;
Editsmtppassword.Enabled :=false;
end;procedure TForm1.NMSMTP1Connect(Sender: TObject);
begin
//////连接成功,下面用户认证过程
StatusBar1.Panels[0].Text :=nmsmtp1.Status;
Memo2.Lines.Add('nmsmtp1connect');
// label1.caption:=nmsmtp1.Status;
if nmsmtp1.ReplyNumber = 250 then
StatusBar1.Panels[0].Text :=nmsmtp1.Transaction('auth login'); //开始认证
if nmsmtp1.ReplyNumber =334 then //返回值为334,让你输入用BASE64编码后的用户名
StatusBar1.Panels[0].Text :=nmsmtp1.Transaction(EncodeBase64(Editsmtpusername.Text));// 用户名
if nmsmtp1.ReplyNumber =334 then // 返回值为334,让你输入用BASE64编码后的用户密码
StatusBar1.Panels[0].Text :=nmsmtp1.Transaction(EncodeBase64(Editsmtppassword.Text)); //密码
if nmsmtp1.ReplyNumber =235 then
begin
StatusBar1.Panels[0].Text :='successful';
Memo2.Lines.Add('验证成功!');
AuthSucc:=true;
end;end;procedure TForm1.NMSMTP1Status(Sender: TComponent; Status: String);
begin
Memo2.Lines.Add(Status);
end;procedure TForm1.NMSMTP1Success(Sender: TObject);
begin
Memo2.Lines.Add('邮件已经成功发送!');
end;procedure TForm1.NMSMTP1Failure(Sender: TObject);
begin
Memo2.Lines.Add('邮件发送失败!');
end;procedure TForm1.NMSMTP1HostResolved(Sender: TComponent);
begin
Memo2.Lines.Add('Resolved');
end;procedure TForm1.NMSMTP1SendStart(Sender: TObject);
begin
Memo2.Lines.Add('nmstp1SendStart');
end;procedure TForm1.NMSMTP1RecipientNotFound(Recipient: String);
begin
Memo2.Lines.Add('nmstpRecipientNotFound,Recipient: '+Recipient);
end;procedure TForm1.NMSMTP1PacketSent(Sender: TObject);
begin
Memo2.Lines.Add('nmstp1PacketSent');
end;procedure TForm1.NMSMTP1MailListReturn(MailAddress: String);
begin
Memo2.Lines.Add('nmstpMailListReturn,MailAddress:'+MailAddress);
end;procedure TForm1.NMSMTP1InvalidHost(var Handled: Boolean);
begin
Memo2.Lines.Add('nmstpInvalidHost');
end;procedure TForm1.NMSMTP1HeaderIncomplete(var handled: Boolean;
hiType: Integer);
begin
Memo2.Lines.Add('nmstpHeaderIncomplete,hiType:'+IntToStr(hiType));
end;procedure TForm1.NMSMTP1EncodeStart(Filename: String);
begin
Memo2.Lines.Add('nmstpEncodeStart,filename:'+Filename);
end;procedure TForm1.NMSMTP1EncodeEnd(Filename: String);
begin
Memo2.Lines.Add('nmstpEncodeEnd,filename:'+Filename);
end;procedure TForm1.NMSMTP1Disconnect(Sender: TObject);
begin
Memo2.Lines.Add('nmstpDisconnect');
end;procedure TForm1.NMSMTP1ConnectionRequired(var Handled: Boolean);
begin
Memo2.Lines.Add('nmstpConnectionRequired');
end;procedure TForm1.NMSMTP1ConnectionFailed(Sender: TObject);
begin
Memo2.Lines.Add('nmstpConnectionFailed');
end;procedure TForm1.NMSMTP1AuthenticationFailed(var Handled: Boolean);
begin
Memo2.Lines.Add('nmstpAuthenticationFailed');
end;procedure TForm1.NMSMTP1AttachmentNotFound(Filename: String);
begin
Memo2.Lines.Add('nmstpAttachmentNotFound(附近没找到),filename:'+Filename);
end;end.