用D6
要不然:
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 TMyEMail.mSMTPConnect(Sender: TObject);//OnConnect
begin
  mState:='Connect ! ';
  if mSMTP.ReplyNumber = 250 then
    mSMTP.Transaction('auth login');
  if mSMTP.ReplyNumber = 334 then
  begin
    mSMTP.Transaction(EncodeBase64(用户名));
    mSMTP.Transaction(EncodeBase64(密码));
  end;
  mState:='Authenticated ! ';
  if mHasMail then
  begin
    mState:='Send email ... ';
    mSMTP.SendMail;
  end;
end;