хочу отправить письмо на mail.ru а сервер не отвечает код функции такой WSAStartUp и CleanUp происходят в самой программе (там с помощью GetHostByName получаем ссылку на массив PInAddr, первый элемент которого преобразовываем inet_ntoa и результат в нижеописанную ф-ию) функция не моя, впадлу было долго разбираться с самим протоколом в smtp - нулевой ipшник из массива ip 'smtp.mail.ru', порт 25 или 2525, в from и dest - реально существующие мыла (ксати ведь можно же отправить письмо самому себе от самого себя) Код (Text): function mail(smtp: PChar; port: integer; from, dest, subject, body: string): bool; const cl = #13#10; var Host: TSockAddrIn; Sock: TSocket; res: Integer; { îòïðàâëÿåì äàííûå ÷åðåç ñîêåò } procedure senddata(str: string); var i: integer; begin for i := 1 to Length(str) do ///зачем каждую букву отправлять отдельным пакетом, так положено? if send(Sock, str[i], 1, 0) = SOCKET_ERROR then exit; end; { ïîëó÷àåì îòâåò îò êîìàíäû } function recvdata(accept: string): bool; var buff: array[1..255] of Char; ///почему от 1 до 255, тогда уж до 256 если уж от нуля, ///это ж не паскаль, в дельфе же нормальные строки begin res := recv(Sock, buff, SizeOf(buff), 0); Result := (Res = SOCKET_ERROR) or (Copy(buff, 1, 3) = accept); end; begin try result := false; { èíèöèàëèçàöèÿ ñîêåòà } Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP); if Sock = INVALID_SOCKET then exit; { óñòàíàâëèâàåì õîñò è ïîðò ñåðâåðà } res := inet_addr(smtp); if res <= 0 then exit; Host.sin_family := AF_INET; Host.sin_port := htons(port); Host.sin_addr.S_addr := res; { ïîäêëþ÷àåìñÿ ê ñåðâåðó } if connect(Sock, @Host, SizeOf(Host)) > 0 then exit; { ïðèâåòñòâèå ñåðâåðà } if not recvdata('220') then exit; { EHLO } senddata('EHLO' + cl); if not recvdata('250') then exit; ////вот здесь и выходит { MAIL FROM: } senddata('MAIL FROM:' + from + cl); if not recvdata('250') then exit; { RCPT TO: } senddata('RCPT TO:' + dest + cl); if not recvdata('250') then exit; { DATA } senddata('DATA' + cl); if not recvdata('354') then exit; { îòïðàâëÿåì òåêñò ñîîáùåíèÿ } senddata('Subject:' + subject + cl + cl + body + cl + '.'); if not recvdata('250') then exit; { îòêëþ÷àåìñÿ îò ñåðâåðà } senddata('QUIT' + cl); result := true; finally { óáèâàåì ñîêåò } closesocket(sock); end; end; подскажите что не так
irrona есть в SMTP и EHLO, разницу не помню, знаю только, что EHLO более круто seiko Что сервер отвечает после EHLO? Учти, что без авторизации SMTP у тебя работать вряд ли будет...
seiko Ставишь бряки после каждой передачи/приема и смотришь, на какой команде SMTP-сервер перестает отвечать. А потом сниффер в руки и смотри, что ты не так отправляешь. Ну и авторизацию добавь. http://www.wasm.ru/article.php?article=1016002
добавил имя сервера при отправке приветствия Код (Text): senddata('EHLO' + string(smtp) + cl); при отправке с упоминанем отправителя например с яндекса при RCPT TO: получаю - not local sender over smpt(ну это потому что надо было наверное сервер яндекса указывать). При отправке с упоминанием отправителя с мейла на DATA требует авторизацию. а как авторизоваться программно? я не в курсе
Тут придется поразбираться с протоколом SMTP PS и вобще, на кой хрен кому (кроме спамеров) еще нужен этот email ?
senddata('EHLO' + string(smtp) + cl); где пробел после ХЕЛО? имя хоста не обязательно, пиши HELO asd\r\n
irrona А исходник вообще рабочий ? У меня он не заработал , это не то что камень в ваш огород , просто действительно у меня ни один исходник майлсендера не работает. Даже мой старый написанный мной , суперский был , почему более не отправляет почту ни на один почтовый сервак. Тема обсуждалась , типо вам не разрешено отправлять емайлы , я менял ип , менял компы ))) но без толку. Я поэтому и спрашиваю , он проверен ? Работает ?
Вот, если Freeman не против http://frmn.org.ua/artc/smtp.html Хватит уже деградировать, возмите мля сниффер и посмотрите, что там у вас отправляется, что нет и почему...
исходник ироны точно не работает , падете даже под олей , ошибок куча судя по сообщениям оли. Снифер не всегда помогает ...
=) я скорее мучаюсь что не могу вообще ни одно письма отправить ни с одного сервиса майл ру рамблер и другие. Сервисная служба отвечает какуюто фигню , такое чувство что там одни идиоты. Нахера тогда почта которая нихрена не работает ? вот что пишет у меня SimpleMail, version 1.0, Copyright (C) 2005 Roman Panyshev mailto: ironahot@idknet.com WWW: http://www.ironahot.idknet.com Connecting to server: smtp.mail.ru SMTP server was not found
calidus Инициатива наказуема, не так ли? ) Первоначальный посыл был в том, чтобы показать пример отправки писем на порт 25 (SMTP по-умолчанию). Скорее всего письма не отправляются из-за требований сервером mail.ru авторизации. Я писал прогу для использования в интрасети организации, где установлен почтовый сервер (кажется CommuniGate Pro). Попробуй отправку с сервера, который не требует авторизации.