Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отсылка почты через 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 сервере при отправке, а раньше не требовалась.


Наверх

Титульная страница Поиск, карта сайта Написать письмо