欧在网上找到的:
在connect里面这样写:
procedure TForm1.NMSMTP1Connect(Sender: TObject);
var
strUserName,strPassword:string;
begin
strUserName:=EncodeString('XXXXX');
strPassword:=EncodeString('XXXXX');
nmsmtp1.Transaction('auth login');
nmsmtp1.Transaction(strUserName);
nmsmtp1.Transaction(strPassword);
end;
下面两个是EncodeString编码函数(不知道注释怎么成了乱码了:))
function EncodeBASE64(Encoded: TMemoryStream ; Decoded: TMemoryStream): Integer;
const
_Code64: String[64] =
('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/');
var
I: LongInt;
B: array[0..2279] of Byte;
J, K, L, M, Quads: Integer;
Stream: string[76];
EncLine: String;
begin
Encoded.Clear;
Stream := '';
Quads := 0;
{ΪÌá¸ßЧÂÊ£¬Ã¿2280×Ö½ÚÁ÷Ϊһ×é½øÐбàÂë}
J := Decoded.Size div 2280;
Decoded.Position := 0;
{¶ÔÇ°J*2280¸ö×Ö½ÚÁ÷½øÐбàÂë}
for I := 1 to J do
begin
Decoded.Read(B, 2280);
for M := 0 to 39 do
begin
for K := 0 to 18 do
begin
L:= 57*M + 3*K;
Stream[Quads+1] := _Code64[(B[L] div 4)+1];
Stream[Quads+2] := _Code64[(B[L] mod 4)*16 + (B[L+1] div 16)+1];
Stream[Quads+3] := _Code64[(B[L+1] mod 16)*4 + (B[L+2] div 64)+1];
Stream[Quads+4] := _Code64[B[L+2] mod 64+1];
Inc(Quads, 4);
if Quads = 76 then
begin
Stream[0] := #76;
EncLine := Stream+#13#10;
Encoded.Write(EncLine[1], Length(EncLine));
Quads := 0;
end;
end;
end;
end;
{¶ÔÒÔ2280ΪģµÄÓàÊý×Ö½ÚÁ÷½øÐбàÂë}
J := (Decoded.Size mod 2280) div 3;
for I := 1 to J do
begin
Decoded.Read(B, 3);
Stream[Quads+1] := _Code64[(B[0] div 4)+1];
Stream[Quads+2] := _Code64[(B[0] mod 4)*16 + (B[1] div 16)+1];
Stream[Quads+3] := _Code64[(B[1] mod 16)*4 + (B[2] div 64)+1];
Stream[Quads+4] := _Code64[B[2] mod 64+1];
Inc(Quads, 4);
{ÿÐÐ76¸ö×Ö·û}
if Quads = 76 then
begin
Stream[0] := #76;
EncLine := Stream+#13#10;
Encoded.Write(EncLine[1], Length(EncLine));
Quads := 0;
end;
end;
{¡°=¡±²¹Î»}
if (Decoded.Size mod 3) = 2 then
begin
Decoded.Read(B, 2);
Stream[Quads+1] := _Code64[(B[0] div 4)+1];
Stream[Quads+2] := _Code64[(B[0] mod 4)*16 + (B[1] div 16)+1];
Stream[Quads+3] := _Code64[(B[1] mod 16)*4 + 1];
Stream[Quads+4] := '=';
Inc(Quads, 4);
end;
if (Decoded.Size mod 3) = 1 then
begin
Decoded.Read(B, 1);
Stream[Quads+1] := _Code64[(B[0] div 4)+1];
Stream[Quads+2] := _Code64[(B[0] mod 4)*16 + 1];
Stream[Quads+3] := '=';
Stream[Quads+4] := '=';
Inc(Quads, 4);
end;
Stream[0] := Chr(Quads);
if Quads > 0 then
begin
EncLine := Stream+#13#10;
Encoded.Write(EncLine[1], Length(EncLine));
end;
Result := Encoded.Size;
end;
{¶Ô²ÎÊýDecoded×Ö·û´®½øÐÐBase64±àÂ룬·µ»Ø±àÂëºóµÄ×Ö·û´®}
function EncodeString(Decoded:string):String;
var
mmTemp,mmDecoded:TMemoryStream;
strTemp:TStrings;
begin
mmTemp := TMemoryStream.Create;
mmDecoded:=TMemoryStream.Create;
strTemp:=TStringList.Create;
strTemp.Add(Decoded);
strTemp.SaveToStream(mmTemp);
mmTemp.Position := 0;
{ÌÞ³ýmmTemp´ÓstrTempÖдøÀ´µÄ×Ö·û#13#10}
mmDecoded.CopyFrom(mmTemp,mmTemp.Size-2);
{¶ÔmmDecoded½øÐÐBase64±àÂ룬ÓÉmmTemp·µ»Ø±àÂëºóµÄ½á¹û}
EncodeBASE64(mmTemp,mmDecoded);
{»ñµÃBase64±àÂëºóµÄ×Ö·û´®}
mmTemp.Position:=0;
strTemp.LoadFromStream(mmTemp);
{·µ»Ø½á¹û±ØÐë´ÓstrTemp[0]ÖлñµÃ£¬Èç¹ûʹÓÃstrTemp.Text»á
´øÀ´²»±ØÒªµÄ×Ö·û#13#10}
Result:=strTemp[0];
end;