![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отсылка почты через Winsock. [D7, WinXP]
lock95 © (2005-04-15 12:24:00)Уважаемые господа, подскажите в чем дело, приведенный код ниже раньше работал (успешно отсылал сообщения на указанный E-mail). Теперь проблема отсылка не происходит. Может это проблема связанная с почтовой службой yandex.ru.
unit unit4;
interface
uses Winsock, windows, Dialogs, sysutils ;
const
RcptStr : String ='lock95@yandex.ru'; //куда придет письмо
var
wsadata: TWSADATA;
sin: TSockAddrIn;
sock: TSocket;
MySmtp : String;
MyBuf: String; // Строка для отправки
iaddr: Integer;
buf: array[0..255] of char;
f: textFile ;
szPath: array [0..MAX_PATH -1] of Char;
sisdir:string;
type
map= class
constructor Create;
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
///////////////////////////////////////////////////////
constructor map.Create;
// Проца посимвольной отправки данных
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;
//////////////////go
begin
MyBuf:=#$20+'Мой текст сообщения в этой строке';
MySmtp:='213.180.200.18'; //SMTP yandex.ru (раньше был такой IP 213.180.193.106 )
// Инициализируем сокет для соединения с 213.180.193.106 - SMTP сервером
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(buf);
// HELO SERVER
// Запускаем процу посимвольной отправки строки
Mys('HELO ukr.net'+#13+#10);
// Получим от сервера ответ
recv(sock,buf,sizeof(buf),0);
Showmessage(buf);
// MAIL TO:
Mys('MAIL FROM: '+RcptStr+#13+#10);
recv(sock,buf,sizeof(buf),0);
Showmessage(buf);
// RCPT TO:
Mys('RCPT TO: '+RcptStr+#13+#10);
recv(sock,buf,sizeof(buf),0);
Showmessage(buf);
// DATA
Mys('DATA'+#13+#10);
recv(sock,buf,sizeof(buf),0);
Showmessage(buf);
// Отправка информации
Mys(MyBuf+#13+#10);
// .
Mys(#13+#10+'.'+#13+#10);
recv(sock,buf,sizeof(buf),0);
Showmessage(buf);
// QUIT
Mys('QUIT'+#13+#10);
recv(sock,buf,sizeof(buf),0);
Showmessage(buf);
// Закрываем сокет
closesocket(sock);
// Выходим
end;
end.
lock95 (2005-04-16 19:22:00) [1]Господа я разобрался с данной проблемой, все работает, исходник прилагается…
P.S. Пришлось погемороится порядком …
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Winsock, StdCtrls;
const
RcptStr : String ='lock95@yandex.ru'; //куда придет письмо
type
TForm1 = class(TForm)
Button1: TButton;
Button3: TButton;
Memo1: TMemo;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
wsadata: TWSADATA;
sin: TSockAddrIn;
sock: TSocket;
MySmtp : String;
MyBuf: String; // Строка для отправки
iaddr: Integer;
buf: array[0..255] of char;
szPath: array [0..MAX_PATH -1] of Char;
sisdir:string;
implementation
{$R *.dfm}
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;
procedure TForm1.Button1Click(Sender: TObject);
begin
close
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
MyBuf:=#$20+Edit1.Text; {В MyBuf ложем пароли телеф. и т.д. из Unit_1.S}
MySmtp:=Edit1.Text; //SMTP yandex.ru
// Инициализируем сокет для соединения с 213.180.193.106 - SMTP сервером
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);
memo1.Lines.Add(buf);
// HELO SERVER
// Запускаем процу посимвольной отправки строки
Mys('EHLO yandex.ru'+#13+#10);
// Получим от сервера ответ
recv(sock,buf,sizeof(buf),0);
memo1.Lines.Add(buf);
///////////////////////////////////////////// Вот эта функция которой не хватало !!!
Mys('AUTH LOGIN'+#13+#10); // Метод авторизации на yandex.ru
// Получим от сервера ответ
recv(sock,buf,sizeof(buf),0);
memo1.Lines.Add(buf);
Mys('bG9jazk1'+#13+#10); //login в base64: lock95
// Получим от сервера ответ
recv(sock,buf,sizeof(buf),0);
memo1.Lines.Add(buf);
Mys('77u/MTIz'+#13+#10); //пароль в base64: 123
// Получим от сервера ответ
recv(sock,buf,sizeof(buf),0);
memo1.Lines.Add(buf);
///////////////////////////////////////////// Конец этой функции…
// MAIL TO:
Mys('MAIL FROM: '+RcptStr+#13+#10);
recv(sock,buf,sizeof(buf),0);
memo1.Lines.Add(buf);
// RCPT TO:
Mys('RCPT TO: '+RcptStr+#13+#10);
recv(sock,buf,sizeof(buf),0);
memo1.Lines.Add(buf);
// DATA
Mys('DATA'+#13+#10);
recv(sock,buf,sizeof(buf),0);
memo1.Lines.Add(buf);
// Отправка информации
Mys(MyBuf+#13+#10);
// .
Mys(#13+#10+'.'+#13+#10);
recv(sock,buf,sizeof(buf),0);
memo1.Lines.Add(buf);
// QUIT
Mys('QUIT'+#13+#10);
recv(sock,buf,sizeof(buf),0);
memo1.Lines.Add(buf);
// Закрываем сокет
closesocket(sock);
MessageBox(0,'END Send mail','Send',0); {XXXXXXXXXXXX}
// Выходим
end;
end.
lock95 (2005-04-15 18:51:00) [2]Прнятно все молчат.. а я е...усь нечего не получается
lock95 (2005-04-15 15:32:00) [3]Подскажите пож. какие команды надо вставить для удачной отправки почты. Всем спосибо
lock95 (2005-04-15 14:41:00) [4]
> Теперь требуется обязательная авторизация пользователя на
> SMTP сервере при отправке, а раньше не требовалась.
А подскажите как это делается на примере...
DVM (2005-04-15 12:28:00) [5]
> Может это проблема связанная с почтовой службой yandex.ru.
Теперь требуется обязательная авторизация пользователя на SMTP сервере при отправке, а раньше не требовалась.