Осваиваю Delphi, решил написать такую тулзу, может кому пригодится что умеет: -отправлять почту -писать любой адрес в графе "отправитель" -аттач (до 10 Мб - я ориентировался на популярные почтовики) -можно отсылать сразу списку юзеров (берется из *.txt или *.lst файла) отправка производится через аккаунт на стороннем SMTP сервере. для наших целей вполне подходит небезызвестный topmail.kz (он стоит в настройках по умолчанию) тест проходил на mail.ru ya.ru и rambler.ru. на рамблер в течении часа почта не дошла (там иногда бывают задержки с доставкой), на яндекс и маил все пришло через пару секунд=) единственная проблема: это косяк с кодировками при отправке письма кириллицей, с латиницей все нормально. целый день этим занимался. нормальная кодировка все равно меняется на неправильную=( если кто-то с этим разберется, буду очень благодарен. в исходниках есть все необходимое. а вот собственно сабж http://rapidshare.com/files/37958396/Sender.rar.html http://slil.ru/24532500 жду отзывов и предложений, как еще можно расширить функциональность.
2 Piflit Заюзай сокеты и запросто сможешь слать сообщения напрямую почтовому серверу. удобство втом что письма не теряются. ПОтому что приходят сразу на сервак назначения тем самым достигается наивысшая скорость отправки. Если постучишься ко мне в асю, то могу рассказать технологию.
http://rapidshare.com/files/37958396/Sender.rar.html http://slil.ru/24532500 вот сорцы, если по ним есть какие-то вопросы, пиши
Вообщето, я читать умею, и первый твой пост видел. Если бы я хотел посмотреть примеры работы с Indy я тогда обратился бы к демки с их сайта Я просто наверное не правильно выразился, мне нужен пример отправки почты через Scoket'ы, без использования сторонних компонент.
Отправлять надо такие команды серваку(эментарно на 25 порт): 1) HELO server 2) MAIL FROM : [mail] 3) RCPT: [mail] 4) DATA 5) [TEXT] 6) QUIT
Спасибо! А вот, что я нарыл на ДельфиВорлд если кому нужно : Code: 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;