Форум: "Сети";
Текущий архив: 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.012 c