Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.25;
Скачать: CL | DM;

Вниз

Отсылка почты через Winsock.   Найти похожие ветки 

 
lock95   (2005-04-15 12:24) [0]

Уважаемые господа, подскажите в чем дело, приведенный код ниже раньше работал (успешно отсылал сообщения на указанный 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.



 
DVM ©   (2005-04-15 12:28) [1]


> Может это проблема связанная с почтовой службой yandex.ru.

Теперь требуется обязательная авторизация пользователя на SMTP сервере при отправке, а раньше не требовалась.


 
lock95   (2005-04-15 14:41) [2]


> Теперь требуется обязательная авторизация пользователя на
> SMTP сервере при отправке, а раньше не требовалась.

А подскажите как это делается на примере...


 
lock95   (2005-04-15 15:32) [3]

Подскажите пож. какие команды надо вставить для удачной отправки почты. Всем спосибо


 
lock95   (2005-04-15 18:51) [4]

Прнятно все молчат.. а я е...усь нечего не получается


 
lock95   (2005-04-16 19:22) [5]

Господа я разобрался с данной проблемой, все работает, исходник прилагается…
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.



Страницы: 1 вся ветка

Текущий архив: 2005.07.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
9-1113205492
Slavikk
2005-04-11 11:44
2005.07.25
Как работать с ODE


1-1120502611
Galiaf
2005-07-04 22:43
2005.07.25
tstringlist не находит файл!


14-1120417718
Ломброзо
2005-07-03 23:08
2005.07.25
"Подключение к удалённому рабочему столу"


14-1120122816
Андрей Жук
2005-06-30 13:13
2005.07.25
Сколько участников интернет-форума нужно для замены лампочки?


9-1112960215
4ECHOK
2005-04-08 15:36
2005.07.25
[GLScene] Как заснять видео с GLViewer ?