Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];

Вниз

Отсылка почты через 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.01 c
3-1118387635
stud
2005-06-10 11:13
2005.07.25
чтение параметров из blolb


14-1120497176
Aleksandr_SB
2005-07-04 21:12
2005.07.25
Книги по Microsoft SQL Server 2000


1-1120210030
ch_victor
2005-07-01 13:27
2005.07.25
проблема с компонентом cxGridPopupMenu


14-1120131748
Иксик
2005-06-30 15:42
2005.07.25
Можно ли переоформлять билеты на поезд на Украине?


3-1118421086
ctudent
2005-06-10 20:31
2005.07.25
Построение отчётов используя Midas.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский