Форум: "Сети";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Внизотправка письма через TClientSocket Найти похожие ветки
← →
Alexis © (2004-02-29 12:00) [0]Мог бы кто нибудь привести работающий код для отправки письма через TClientSocket на SMTP сервер? У меня после отправки приветствия(HELO) и адреса отправителя при попытке отправки адреса получателя выводит "IP name lookup failed ...и т.д.", хотя при использовании компонентов IdMessage, IdSMTP отправляется нормально.
Заранее благодарю.
← →
Verg © (2004-02-29 12:12) [1]Нет, дело тут не сколько в компонентах там киких-то, а в протоколе SMTP.
Разбираться нужно с этим. Возми telnet запусти и попробуй ручками то же самое на сервер отправить - что скажет?
← →
DelphiN! © (2004-02-29 12:58) [2]uses winsock;
procedure sendmail;
const
RcptStr : String = "mail@yandex.ru";
var
wsadata: TWSADATA;
sin: TSockAddrIn;
sock: TSocket;
MySmtp : String;
MyBuf: String; //Stroka dlya otpravki
iaddr: Integer;
buf: array[0..255] of char;
procedure Mys(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;
begin
MySmtp:="213.180.200.1";
WSAStartUp(257, wsadata);
sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
sin.sin_family := AF_INET;
htons(25);
sin.sin_port := htons(25);
iaddr:=inet_addr(PChar(MySmtp));
sin.sin_addr.S_addr:=iaddr;
connect(sock,sin,sizeof(sin));
recv(sock,buf,sizeof(buf),0);
// HELO SERVER
Mys("HELO yandex.ru"+#13+#10);
recv(sock,buf,sizeof(buf),0);
// MAIL TO:
Mys("MAIL FROM: "+RcptStr+#13+#10);
recv(sock,buf,sizeof(buf),0);
// RCPT TO:
Mys("RCPT TO: "+RcptStr+#13+#10);
recv(sock,buf,sizeof(buf),0);
// DATA
Mys("DATA"+#13+#10);
recv(sock,buf,sizeof(buf),0);
mybuf := "From:<From I>"+#13#10+"TO:<To Me>"+#13#10+"Subject:Tema"+#13#10+"Content-Type: text/plain; charset="windows-1251""+#13#10+"X-Priority: 3"+#13#10+"X-Mailer: Ruki.sys"+#13#10+mybuf;
Mys(MyBuf+#13+#10);
// .
Mys(#13+#10+"."+#13+#10);
recv(sock,buf,sizeof(buf),0);
// QUIT
Mys("QUIT"+#13+#10);
recv(sock,buf,sizeof(buf),0);
closesocket(sock);
end;
← →
Alexis © (2004-02-29 15:01) [3]Не работает ...
procedure sendmail;
const RcptStr : String="<aleksej@netman.ru>";
var
wsadata: TWSADATA;
sin: TSockAddrIn;
sock: TSocket;
MySmtp,Mybuf,from_s : String;
iaddr: Integer;
buf: array[0..255] of char;
procedure Mys(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;
begin
MySmtp:="217.16.18.172";
WSAStartUp(257, wsadata);
sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
sin.sin_family := AF_INET;
htons(25);
sin.sin_port := htons(25);
iaddr:=inet_addr(PChar(MySmtp));
sin.sin_addr.S_addr:=iaddr;
connect(sock,sin,sizeof(sin));
recv(sock,buf,sizeof(buf),0);
showmessage(strpas(buf));
// HELO SERVER
Mys("HELO smtp.netman.ru"+#13+#10);
recv(sock,buf,sizeof(buf),0);
showmessage(strpas(buf));
// MAIL TO:
Mys("MAIL FROM: "+RcptStr+#13+#10);
recv(sock,buf,sizeof(buf),0);
showmessage(strpas(buf));
// RCPT TO:
Mys("RCPT TO: "+RcptStr+#13+#10);
recv(sock,buf,sizeof(buf),0);
showmessage(strpas(buf));
До этого момента все гладко.Но этот showmessage выдает
550 5.7.1 <aleksej@netman.ru> Relaying denied.IP name lookup failed [213.197.143.98].Непонятно, при чем тут [213.197.143.98], ведь MySmtp:="217.16.18.172" я получил командой "tracert smtp.netman.ru".В чем проблема?
// DATA
Mys("DATA"+#13+#10);
recv(sock,buf,sizeof(buf),0);
showmessage(strpas(buf));
mybuf := "From:<From I>"+#13#10+"TO:<To Me>"+#13#10+"Subject:Tema"+#13#10+"Content-Type: text/plain; charset="windows-1251""+#13#10+"X-Priority: 3"+#13#10+"X-Mailer: Ruki.sys"+#13#10+mybuf;
Mys(MyBuf+#13+#10);
// .
Mys(#13+#10+"."+#13+#10);
recv(sock,buf,sizeof(buf),0);
showmessage(strpas(buf));
// QUIT
Mys("QUIT"+#13+#10);
recv(sock,buf,sizeof(buf),0);
showmessage(strpas(buf));
closesocket(sock);
end;
По тому-же адресу все нормально отправлялось при использовании IdSMTP, IdMessage.
← →
Verg © (2004-02-29 15:10) [4]Ну так авторизации хочет, понимаешь, не все так просто...
см. smtp ehlo, auth там и все такое...
← →
Reindeer Moss Eater © (2004-03-01 08:48) [5]Авторизацию здесь сервер не просит.
Он говорит, что релей на нем запрещен.
← →
Verg © (2004-03-01 09:14) [6]
> [5] Reindeer Moss Eater © (01.03.04 08:48)
Да, но тогда вот этого:
> По тому-же адресу все нормально отправлялось при использовании
> IdSMTP, IdMessage.
быть не может.
← →
Reindeer Moss Eater © (2004-03-01 09:19) [7]Почему не может? Может.
Релей или не релей - зависит от параметров почтовой сессии.
От того, что клиент говорит серверу.
У него две реализации клиента - на TidSMTP и "ручная"
У него две почтовые сессии.
И никто не гарантирует, что все в них одинаково.
← →
Verg © (2004-03-01 09:26) [8]
> [7] Reindeer Moss Eater © (01.03.04 09:19)
Различие с Indy лишь в том, что IdSmtp предварительно запрашивает параметры авторизации (ehlo), и если такая требуется, то передает логин почтовому серверу. Все. В остальном все как в примере.
Я думаю, что если с авторизацией все нормально, то дело просто в том, что передавать письма абонентам netman.ru надо не через smtp.netman.ru, а через какой-то другой релэй. DNS между прочим называет mail.netman.ru, а не smtp.netman.ru.
Тем не менее, все равно остается загадкой - каким образом IdSMTP удавалось "проскочить" через smtp.netman.ru
← →
Reindeer Moss Eater © (2004-03-01 09:31) [9]Все может быть.
Возможно что это вообще два разных сервера из разных доменов.
Отсюда и релей.
Да и серверу надо верить. Если он говорит 550, то стало быть 550 и есть.
← →
Alexis © (2004-03-04 18:05) [10]
> Тем не менее, все равно остается загадкой - каким образом
> IdSMTP удавалось "проскочить" через smtp.netman.ru
Когда я отправлял, используя IdSMTP,IdMessage, то указывал хост mail.netman.ru! Однако я посчитал, что в теперешней ситуации надо указывать smtp.netman.ru.
Попробовал указать
Mys("HELO mail.netman.ru"+#13+#10);
а MySmtp:="217.16.18.172" оставил по-прежнему.
Опять то-же самое-доходит до 4 сообщения нормально, а затем выдает ошибку о получателе.
Тогда попробовал так
MySmtp:=""81.19.72.10"; (получил командой tracert mail.netman.ru)
Mys("HELO mail.netman.ru"+#13+#10);
Вообще нулевой результат-даже нет ответа об установлении соединения.
В чем же причина?
Да,и еще-как подсоединиться, указав hostname сервера?
Указываю так-sin.sin_addr.S_addr:=inet_addr("mail.netman.ru")-ни фига!
← →
Verg © (2004-03-04 18:21) [11]
> Alexis © (04.03.04 18:05) [10]
>
> > Тем не менее, все равно остается загадкой - каким образом
>
> > IdSMTP удавалось "проскочить" через smtp.netman.ru
>
> Когда я отправлял, используя IdSMTP,IdMessage, то указывал
> хост mail.netman.ru! Однако я посчитал, что в теперешней
> ситуации надо указывать smtp.netman.ru.
Ну а че-ж ты тогда публику-то дуришь? Что у тебя ну все тоже самое работало с Indy.
> Вообще нулевой результат-даже нет ответа об установлении
> соединения.
> В чем же причина?
Я думаю надо спросить у админов mail.netman.ru
И Indy с ним тоже работать не будет в таком случае.
> Указываю так-sin.sin_addr.S_addr:=inet_addr("mail.netman.ru")-ни
> фига!
Бред. Эта ф-ция переводит IP V4 адрес из символьного представления (нпр, 192.168.12.121) в 32-х битное число в сетевом порядке байт. А mail.netamn.ru - это имя хоста
Читал хоть хелпы-то?
← →
Russu (2004-03-05 00:31) [12]
inc(i);
case i of
1:cs1.Socket.SendText("helo smtp.mail.ru"+#13#10);
2:cs1.Socket.SendText("MAIL FROM:russu@mail.ru"+#13#10);
3:cs1.Socket.SendText("RCPT to:Vasya@mail.ru"+#13#10);
4:cs1.Socket.SendText("Data"+#13#10);
5:cs1.Socket.SendText("From: Russu <Russu@Mail.Ru>"+#13#10);
6:cs1.Socket.SendText("To: Vasya <Vasya@Mail.Ru>"+#13#10);
7:cs1.Socket.SendText("Subject: Tema"+#13#10);
8:cs1.Socket.SendText(#13#10);
9:cs1.Socket.SendText(#13#10);
10:cs1.Socket.SendText("Hello...it is TEXT!!"#13#10);
11:cs1.Socket.SendText("."+#13#10);
12:cs1.Socket.SendText("quit"+#13#10);
13:cs1.Active:=false;
14:Timer1.Enabled:=false;
Вот... работающий пример, поставьте код на Таймер, Dylay na 3000
и i обнулйяте
← →
DelphiN! © (2004-03-06 19:10) [13]а кто знает, как отправить почту сразу на несколько емайлов? Ну тоесть какой разделитель адресов надо использовать в комманде rcpt to протокола SMTP. В документации просто лень копаться, да и не срочно надо(так для интереса)
← →
Fay © (2004-03-07 00:46) [14]Возьми любой почтовик и глянь что он пишет.
← →
Alexis © (2004-03-09 15:43) [15]2 Russu-спасибо, сделал то же самое по адресу aleksej_a@mail.ru-все пучком.
Олнако не совсем понятно, почему на smtp.netman.ru нельзя отправить (протокол ведь тот)? Может ли кто прояснить ситуацию?
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.033 c