вопрос по статье "отправка по smtp с авторизацией"(http://www.wasm.ru/article.php?article=simplesmtp) Скачал я исходник и переделал его под masm. возникают проблемы с авторизацией --------------------------- SMTP --------------------------- 535 Incorrect authentication data 8.204.14] 250-SIZE 10485760 250-8BITMIME 250-AUTH PLAIN LOGIN 250 PIPELINING --------------------------- ОК --------------------------- Но когда в проге меняешь Buffer и Buffer2,на login и pass которые закодированы этой же прогой просто прписаны они в секции дата то все проходит на ура мессаджбокс показывает содержимое буферов идентичное login и pass может что то я неправильно переделал []
Сорри, может немного не в тему... Я тоже писал прогу на основе этой статьи. Как оказалось порт на майл ру 2525 а не 25
куда листинг делся) прога отправляет письма и через 25 порт если пароль и логин записать срокой в самой проге
Satell Смотри хорошенько что именно ты кодируешь в полях Login/pass: логин должен целиком включать твое мыло, т.е. например my_mail@mail.ru. Возможно также, что ты неправильно закодировал. Сорс, выдержку из которого ты мне приводил, отлично работает на mail.ru. Также смотри под дебугером что тебе выдает сервер.
Код (Text): { smtp - ip адрес smtp сервера port - порт smtp сервера, по умолчанию 25 from - адрес отправителя dest - адрес получателя subject - тема письма body - текст писма Возвращает True если письмо было успешно отправленно... } function mail(smtp: string; port: integer; from, dest, subject, body: string): bool; const cl = #13#10; var WSAData: TWSAData; Host: TSockAddrIn; Sock: TSocket; res: Integer; buff: array[1..255] of Char; { отправляем данные через сокет } 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; begin res := recv(Sock, buff, SizeOf(buff), 0); Result := (Res = SOCKET_ERROR) or (Copy(buff, 1, 3) = accept); end; begin try result := false; { инициализация сокета } WSAStartUp(257, WSAData); Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP); if Sock = INVALID_SOCKET then Exit; { устанавливаем хост и порт сервера } res := inet_addr(PChar(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); WSACleanup; end; end; Этот код у меня полгода назад работал на ура с яндексом и маил.ру. Как видишь здесь нет авторизации, но когда отправляеш письмо, адрес отправителя должен быть на таком же сервере что и получателя. Например я делал так: mail('smtp.yandex.ru',25,'vasya@yandex.ru' ,'dest@yandex.ru', 'subj', 'body text'); Если это уже не работает то тебе нужно вручную резолвить MX записи сервера. В каком-то выпуске журнала хакер есть статья ms-rem'a - " Разводим червей" . Та все это есть