Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отправка почты 
V
    Опции темы
Albinos_x
Дата 23.4.2005, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: нет
Всего: 108



С сетью работаю первый раз.
Вот возникла задача: Отправить письмо на E-mail при загрузке программы...

Пробовал два способа взятых с этого форума
Первый:
Код

...
   SMTP: TIdSMTP;
    Mes: TIdMessage;
...
  smtp.Host := 'localhost';
  smtp.Port := 25;
  mes.From.Text := '[email protected]';
  mes.Recipients.EMailAddresses := '[email protected]';
  mes.Subject := 'Albinos';
  mes.Body.Text := 'Test';
  smtp.Connect(100000);   //<-  Ошибка Socket Error # 10061 Connection refused
  smtp.Send(mes);
  smtp.Disconnect;



и второй
Код

...
function sendmail(const smtp, mail_from, mail_to, body: string): boolean;
const ok = '250';    
       cl = #13#10;    
var WSAData: TWSAData;    
   Host: TSockAddrIn;    
   Sock: TSocket;    
   res: integer;    
   hostEnt: PHostEnt;    
 { îòïðàâëÿåì äàííûå ÷åðåç ñîêåò }    
 procedure senddata(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;
 { ïîëó÷àåì îòâåò îò êîìàíäû }    
 function recvdata(const accept: string): bool;    
 var buff: array[1..255] of char;    
 begin    
   res := recv(Sock, buff, 255, 0);    
   result := (res = SOCKET_ERROR) or (copy(buff, 1, 3) = accept);    
 end;    
begin    
 result := false;    
 try    
   WSAStartUp($101, WSAData);    
   Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);    
   if Sock = INVALID_SOCKET then exit;    
   // ïîëó÷àåì IP àäðåñ SMTP-ñåðâåðà è ïåðåâîäèì åãî ÷åðåç inet_addr    
   hostEnt := gethostbyname(PChar(smtp));
   if hostEnt = nil then exit;    
   res := inet_addr(PChar(inttostr(byte(hostEnt^.h_addr_list^[0]))+'.'+inttostr(byte(hostEnt^.h_addr_list^[1]))+'.'+    
            inttostr(byte(hostEnt^.h_addr_list^[2]))+'.'+inttostr(byte(hostEnt^.h_addr_list^[3]))));    
   if res <= 0 then exit;    
   { óñòàíàâëèâàåì õîñò è ïîðò ñåðâåðà }    
   Host.sin_family := AF_INET;    
   Host.sin_port := htons(25); // ïîðò 25, ìîæåøü ïîìåíÿòü    
   Host.sin_addr.S_addr := res;    
   if connect(Sock, Host, SizeOf(Host)) > 0 then exit;    
   sleep(200);    
   if not recvdata('220') then exit; // ïðèâåòñòâèå ñåðâåðà    
   senddata('HELO SANTA' + cl); // ïîñëå HELO ìîæåøü íàïèñàòü ñâîå ïðèâåòñòâèå    
   sleep(200);    
   if not recvdata(ok) then exit;    
   senddata('MAIL FROM:' + '<'+mail_from+'>' + cl);    
   sleep(200);    
   if not recvdata(ok) then exit;
   senddata('RCPT TO:' + '<'+mail_to+'>' + cl);    
   sleep(200);    
   if not recvdata(ok) then exit;    
   senddata('DATA' + cl);    
   sleep(200);    
   if not recvdata('354') then exit;    
   senddata(body + cl + '.' + cl); // îòïðàâëÿåì òåêñò ñîîáùåíèÿ    
   sleep(200);    
   if not recvdata(ok) then exit;    
   senddata('QUIT' + cl); // îòêëþ÷àåìñÿ îò ñåðâåðà    
   result := true;    
 finally    
   closesocket(sock);    
   WSACleanup    
 end;
...
sendmail('smtp.yandex.ru', '[email protected]', '[email protected]', 'hello there!');

в этом на почтовый ящик ничего не приходит...

Помогите, пожалуйста, кто знает как решить задачку любым из способов...

Заранее спасибо! smile

Это сообщение отредактировал(а) Albinos_x - 12.1.2006, 23:18


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Albinos_x
Дата 24.4.2005, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: нет
Всего: 108



Кто-нибудь делал это когда-либо?


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Albinos_x
Дата 24.4.2005, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: нет
Всего: 108



Благодаря Girder
В первом способе ошибка ушла
и даже индикатор в нижнем правом углу показывает что, что-то отсылается и в первом и во втором методе, но на мыло по прежнему ничего падать не хочет...

Добавлено @ 18:55
Пробовал уже
smtp.Host := 'smtp.yandex.ru';
и
smtp.Host := 'smtp.nightmail.ru';

но всё без изменений


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Albinos_x
Дата 24.4.2005, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: нет
Всего: 108



теперь делаю так...

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
smtp:=TIdSMTP.Create(nil);
 mes:=TIdMessage.Create(nil);
 smtp.Host := 'smtp.nightmail.ru';
 smtp.Port := 25;
 smtp.Password:='xxxxxx';
 smtp.Username:='Albinos';
 smtp.AuthenticationType:=atLogin; //Òèïî ïî ïàðîëþ è âñå òàêîå
 smtp.HeloName:='Info';
 mes.From.Text := '[email protected]';
 mes.Sender.Text:='[email protected]';
 mes.Recipients.EMailAddresses:='[email protected]';
 mes.Subject := 'al';
 mes.Body.Text :='Hello! Is test. If you see, hence all ok!!!';
 mes.MessageParts.Clear;
 try
  smtp.Connect;
  smtp.Send(mes);
 except
 end;
 smtp.Disconnect;
 mes.Free;
 smtp.Free;
Label1.Caption:='Finished';
end;


по прежнему ничего не приходит...

Кто-нибудь знает, что не так?

Это сообщение отредактировал(а) Albinos_x - 12.1.2006, 23:19


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
RA
Дата 25.4.2005, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



Не люблю я индейцев, поэтому кодом не помогу.
Но есть предположение, что SMTP требует SSL аутентификации.
PM   Вверх
RA
Дата 25.4.2005, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



---------

Это сообщение отредактировал(а) RAdmin - 30.4.2005, 16:11
PM   Вверх
Albinos_x
Дата 25.4.2005, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: нет
Всего: 108



Цитата
Вот щас шлянул IdSMTP1.Socksinfo.Authentication := SaUsernamePasssword


что-то не принимает делфя эту строчку...
Не знает он что такое Socksinfo и SaUsernamePasssword

Цитата
Не люблю я индейцев, поэтому кодом не помогу.


А есть другие способы, под 7 делфю?

Это сообщение отредактировал(а) Albinos_x - 25.4.2005, 16:17


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
RA
Дата 25.4.2005, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



Блин сложно разбираться в компонентах к каторым нет описания и исходников. smile

Вобщем давай тогда мануально, в свойсвах компонента IdSMTP1 найди SocksInfo
в нём попробуй выставить в параметре Authentication - "saUsernamePassword"
PM   Вверх
RA
Дата 25.4.2005, 16:44 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



Цитата(Albinos_x @ 25.4.2005, 16:15)
А есть другие способы, под 7 делфю?


Есть нормальные компоненты ICS для этих и иных целей,
http://www.overbyte.be
(С исходниками и примерами)


ICS - The Best smile
PM   Вверх
Albinos_x
Дата 25.4.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: нет
Всего: 108



Цитата
Блин сложно разбираться в компонентах к каторым нет описания и исходников


и не говори...


Цитата
Вобщем давай тогда мануально, в свойсвах компонента IdSMTP1 найди SocksInfo
в нём попробуй выставить в параметре Authentication - "saUsernamePassword"


У меня нет такого параметра в этом компоненте...
...?!?...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
_hunter
Дата 25.4.2005, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



есть к ним и описание и исходники smile -- на оффсайт сходите


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Albinos_x
Дата 25.4.2005, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: нет
Всего: 108



Цитата
на оффсайт сходите


английский, к сожалению, не знаю...

Да и поиск там ничего не дал...

Ни черта там понять не могу...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
RA
Дата 25.4.2005, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



Цитата(_hunter @ 25.4.2005, 17:36)
есть к ним и описание и исходники  -- на оффсайт сходите

Я то думал они платные. smile

Цитата(Albinos_x @ 25.4.2005, 16:50)
У меня нет такого параметра в этом компоненте...


Мда, сейчас посмотрел на идейцев из D7 там и правда нет такого smile
Но в D6 Indy v8.025 точно есть.


Кароче дело обстаит так: для доступа к SSL кидай на форму из
вкладки Indy I/0 Handlers компонент IdServerIOHandlerSSL1 (вот в этом компоненте нужно порыться и настроиться) ,
каторы подключи к IdSMTP1.
Далее сам. smile
Добавлено @ 19:45
А насчёт Socksinfo это я касяк выдал, как я толькочто заметил оно для соединения через Proxy.

Это сообщение отредактировал(а) RAdmin - 25.4.2005, 19:42
PM   Вверх
Albinos_x
Дата 25.4.2005, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: нет
Всего: 108



спасибо...

будем разбираться...

{но уже не сегодня, пора спать (время 0.56)}


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Girder
Дата 26.4.2005, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 4
Всего: 155



1. У тебя должен быть доступен DNS сервер(ы);
2. Открой новое приложение... и брось на форму:
- TIdAntiFreeze;
- TIdDNSResolver;
- TButton... smile
3. Не забудь подвесить на OnClick кнопки процедуру из кода... smile

Типо сам... код(а точнее весь модуль):
Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdComponent, IdUDPBase, IdUDPClient, IdDNSResolver,
  IdBaseComponent, IdAntiFreezeBase, IdAntiFreeze, IdSMTP, IdMessage;

const
 MAX_HOSTNAME_LEN=128;
 MAX_DOMAIN_NAME_LEN=128;
 MAX_SCOPE_ID_LEN=256;

type
 IP_ADDRESS_STRING =packed record
  S: array [0..15] of Char;
 end;
 IP_MASK_STRING=IP_ADDRESS_STRING;
 PIP_ADDR_STRING=^_IP_ADDR_STRING;
 _IP_ADDR_STRING=packed record
   Next:PIP_ADDR_STRING;
   IpAddress:IP_ADDRESS_STRING;
   IpMask:IP_MASK_STRING;
   Context:DWORD;
 end;
 IP_ADDR_STRING=_IP_ADDR_STRING;
 PFIXED_INFO=^FIXED_INFO;
 FIXED_INFO=packed record
  HostName:array [0..MAX_HOSTNAME_LEN+3] of Char;
  DomainName:array[0..MAX_DOMAIN_NAME_LEN+3] of Char;
  CurrentDnsServer:PIP_ADDR_STRING;
  DnsServerList:IP_ADDR_STRING;
  NodeType:UINT;
  ScopeId:array [0..MAX_SCOPE_ID_LEN+3] of Char;
  EnableRouting:UINT;
  EnableProxy:UINT;
  EnableDns:UINT;
 end;

type
  TForm1 = class(TForm)
    IdAntiFreeze1: TIdAntiFreeze;
    IdDNSResolver1: TIdDNSResolver;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  function GetNetworkParams(FixedInfo:PFIXED_INFO; var OutBufLen:DWord):DWORD; stdcall; external 'iphlpapi.dll';

implementation

{$R *.dfm}

function GetMailServers(IPHostDNS,ADomain:string;RTimeOutDNS:integer;
                        var ResMailServers:TStrings; DNS:TIdDNSResolver):boolean;
{Функция определяет список Mail серверов для доменого адреса ADomain.
PS: ADomain - енто домен... на который шлеш письма(в твоем случаи енто yandex.ru}
var i,x,n:integer;
    rb:Word;
    AHostMail:string;
begin
 Result:=true;
 with DNS do
  begin
   QueryResult.Clear;
   QueryRecords:=[qtMX];
   Host:=IPHostDNS;
   ReceiveTimeOut:=RTimeOutDNS;
   try
    Resolve(ADomain);
    i:=QueryResult.Count;
    if i>0 then
     begin
      try
       ResMailServers.Free;
      except
      end;
      ResMailServers:=TStringList.Create;
      repeat
       rb:=TMXRecord(QueryResult.Items[0]).Preference;
       n:=0;
       for x:=0 to QueryResult.Count-1 do
        if TMXRecord(QueryResult.Items[x]).Preference<=rb then
         begin
          rb:=TMXRecord(QueryResult.Items[x]).Preference;
          n:=x;
         end;
       try
        AHostMail:=trim(TMXRecord(QueryResult.Items[n]).ExchangeServer);
       except
        AHostMail:='';
       end;
       QueryResult.Delete(n);
       if AHostMail<>'' then
        begin
         ResMailServers.Append(AHostMail);
        end;
       dec(i);
      until (i=0);
      if ResMailServers.Count=0 then
       begin
        Result:=false;
        ResMailServers.Free;
       end; 
     end else Result:=false;
   except
    Result:=false;
   end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var FMailServers,IPHostDNS:TStrings;
    smtp:TIdSMTP;
    mes:TIdMessage;
    i:integer;
    FI:PFIXED_INFO;
    S:DWord;
    n:PIP_ADDR_STRING;
begin
 S:=0;;
 if GetNetworkParams(nil,S)<>ERROR_BUFFER_OVERFLOW then exit;
 GetMem(FI,S);
 IPHostDNS:=TStringList.Create;
 FMailServers:=TStringList.Create;
 if GetNetworkParams(FI,S)=ERROR_SUCCESS then
  begin
   n:=FI^.CurrentDnsServer;
   while n<>nil do
    begin
     IPHostDNS.Add(n^.IpAddress.S);
     n:=n^.Next;
    end;
   if FI^.DnsServerList.IpAddress.S[0]<>#0 then
    IPHostDNS.Add(FI^.DnsServerList.IpAddress.S);
   n:=FI^.DnsServerList.Next;
   while n<>nil do
    begin
     IPHostDNS.Add(n^.IpAddress.S);
     n:=n^.Next;
    end;
  end;
 FreeMem(FI,S);
 while IPHostDNS.Count>0 do
  begin
   if GetMailServers(IPHostDNS.Strings[IPHostDNS.Count-1],'yandex.ru',5000,FMailServers,IdDNSResolver1) then
    begin
     smtp:=TIdSMTP.Create(nil);
     mes:=TIdMessage.Create(nil);
     smtp.Port := 25;
     smtp.AuthenticationType:=atNone;
     smtp.HeloName:='Info';
     mes.From.Text:='[email protected]';
     mes.Sender.Text:='[email protected]';
     mes.Recipients.EMailAddresses:='[email protected]'; //Получатель
     mes.Subject:='al';
     mes.Body.Text:='Hello! Is test. If you see, hence all ok!!!';
     mes.MessageParts.Clear;
     for i:=0 to FMailServers.Count-1 do
      begin
       smtp.Host:=trim(FMailServers.Strings[i]);
       try
        smtp.Connect;
        smtp.Send(mes);
        IPHostDNS.Clear;
        break;
       except
       end;
       smtp.Disconnect;
      end;
     mes.Free;
     smtp.Free;
    end;
   if IPHostDNS.Count>0 then IPHostDNS.Delete(IPHostDNS.Count-1); 
  end;
 try
  IPHostDNS.Free;
  FMailServers.Free;
 except
 end;
end;

end.

PS: На yandex ентот код... не натравливал smile (на моих - работает)

Удачи.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Albinos_x
Дата 26.4.2005, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: нет
Всего: 108



Большущее СПАСИБО!!!
smile smile smile
Всё работает на ура..


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
WolfON
Дата 30.4.2005, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



на indy 10 неработает smile(((
там ругается на
[Error] Unit1.pas(73): Undeclared identifier: 'QueryRecords'

мне кажеться в 10 версии это InternalQuery, но если заменить не него, то QueryRecords:=[qtMX]; ругается на несоответствие типов.

Я немного на сайте Indy порылся, но так ничего и ненашел
Добавлено @ 21:20
попытался так исправить:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdComponent, IdUDPBase, IdUDPClient, IdDNSResolver, IdBaseComponent,
  IdAntiFreezeBase, IdAntiFreeze, IdSMTP, IdMessage, StdCtrls,
  IdTCPConnection;

const
 MAX_HOSTNAME_LEN=128;
 MAX_DOMAIN_NAME_LEN=128;
 MAX_SCOPE_ID_LEN=256;

type
 IP_ADDRESS_STRING =packed record
  S: array [0..15] of Char;
 end;
 IP_MASK_STRING=IP_ADDRESS_STRING;
 PIP_ADDR_STRING=^_IP_ADDR_STRING;
 _IP_ADDR_STRING=packed record
   Next:PIP_ADDR_STRING;
   IpAddress:IP_ADDRESS_STRING;
   IpMask:IP_MASK_STRING;
   Context:DWORD;
 end;
 IP_ADDR_STRING=_IP_ADDR_STRING;
 PFIXED_INFO=^FIXED_INFO;
 FIXED_INFO=packed record
  HostName:array [0..MAX_HOSTNAME_LEN+3] of Char;
  DomainName:array[0..MAX_DOMAIN_NAME_LEN+3] of Char;
  CurrentDnsServer:PIP_ADDR_STRING;
  DnsServerList:IP_ADDR_STRING;
  NodeType:UINT;
  ScopeId:array [0..MAX_SCOPE_ID_LEN+3] of Char;
  EnableRouting:UINT;
  EnableProxy:UINT;
  EnableDns:UINT;
 end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdAntiFreeze1: TIdAntiFreeze;
    IdDNSResolver1: TIdDNSResolver;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  function GetNetworkParams(FixedInfo:PFIXED_INFO; var OutBufLen:DWord):DWORD; stdcall; external 'iphlpapi.dll';

implementation

{$R *.dfm}

function GetMailServers(IPHostDNS,ADomain:string;RTimeOutDNS:integer;
                        var ResMailServers:TStrings; DNS:TIdDNSResolver):boolean;
var i,x,n:integer;
    rb:Word;
    AHostMail:string;
begin
 Result:=true;
 with DNS do
  begin
   QueryResult.Clear;
   QueryType:=[qtMX];
//   QueryRecords:=[qtMX];
   Host:=IPHostDNS;
   WaitingTime:=RTimeOutDNS;
   try
    Resolve(ADomain);
    i:=QueryResult.Count;
    if i>0 then
     begin
      try
       ResMailServers.Free;
      except
      end;
      ResMailServers:=TStringList.Create;
      repeat
       rb:=TMXRecord(QueryResult.Items[0]).Preference;
       n:=0;
       for x:=0 to QueryResult.Count-1 do
        if TMXRecord(QueryResult.Items[x]).Preference<=rb then
         begin
          rb:=TMXRecord(QueryResult.Items[x]).Preference;
          n:=x;
         end;
       try
        AHostMail:=trim(TMXRecord(QueryResult.Items[n]).ExchangeServer);
       except
        AHostMail:='';
       end;
       QueryResult.Delete(n);
       if AHostMail<>'' then
        begin
         ResMailServers.Append(AHostMail);
        end;
       dec(i);
      until (i=0);
      if ResMailServers.Count=0 then
       begin
        Result:=false;
        ResMailServers.Free;
       end; 
     end else Result:=false;
   except
    Result:=false;
   end;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var FMailServers,IPHostDNS:TStrings;
    smtp:TIdSMTP;
    mes:TIdMessage;
    i:integer;
    FI:PFIXED_INFO;
    S:DWord;
    n:PIP_ADDR_STRING;
begin
 S:=0;;
 if GetNetworkParams(nil,S)<>ERROR_BUFFER_OVERFLOW then exit;
 GetMem(FI,S);
 IPHostDNS:=TStringList.Create;
 FMailServers:=TStringList.Create;
 if GetNetworkParams(FI,S)=ERROR_SUCCESS then
  begin
   n:=FI^.CurrentDnsServer;
   while n<>nil do
    begin
     IPHostDNS.Add(n^.IpAddress.S);
     n:=n^.Next;
    end;
   if FI^.DnsServerList.IpAddress.S[0]<>#0 then
    IPHostDNS.Add(FI^.DnsServerList.IpAddress.S);
   n:=FI^.DnsServerList.Next;
   while n<>nil do
    begin
     IPHostDNS.Add(n^.IpAddress.S);
     n:=n^.Next;
    end;
  end;
 FreeMem(FI,S);
 while IPHostDNS.Count>0 do
  begin
   if GetMailServers(IPHostDNS.Strings[IPHostDNS.Count-1],'mail.ru',5000,FMailServers,IdDNSResolver1) then
    begin
     smtp:=TIdSMTP.Create(nil);
     mes:=TIdMessage.Create(nil);
     smtp.Port := 25;
     smtp.AuthType:=atNone;
     smtp.HeloName:='Info';
     mes.From.Text:='[email protected]';
     mes.Sender.Text:='[email protected]';
     mes.Recipients.EMailAddresses:='[email protected]';
     mes.Subject:='al';
     mes.Body.Text:='Hello! Is test. If you see, hence all ok!!!';
     mes.MessageParts.Clear;
     for i:=0 to FMailServers.Count-1 do
      begin
       smtp.Host:=trim(FMailServers.Strings[i]);
       try
        smtp.Connect;
        smtp.Send(mes);
        IPHostDNS.Clear;
        break;
       except
       end;
       smtp.Disconnect;
      end;
     mes.Free;
     smtp.Free;
    end;
   if IPHostDNS.Count>0 then IPHostDNS.Delete(IPHostDNS.Count-1); 
  end;
 try
  IPHostDNS.Free;
  FMailServers.Free;
 except
 end;
end;

end.


Но на yandex.ru не проходит smile(((((
PM MAIL ICQ   Вверх
Girder
Дата 1.5.2005, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 4
Всего: 155



Цитата(WolfON @ 30.4.2005, 22:13)
Я немного на сайте Indy порылся, но так ничего и ненашел
А ты им... письмо напиши smile smile smile

Во первых: Ты шлеш на wolfon @ inbox.ru
Во вторых: Запрашиваеш Mail домены у mail.ru
В третьих: Не удевительно... что у тебя ни куда не шлется.
PS: Куда шлеш... у того и должен запрашивать!!! Т.е. если шлеш на [email protected] то и запрашивай GetMailServers(..., 'inbox.ru'...) smile

Ладно... вот переписал без использования IdDNSResolver:
-Брось на новую форму TIdAntiFreeze, TButton и подцепи обработчик на OnClick
Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdComponent, IdBaseComponent, IdAntiFreezeBase,
  IdAntiFreeze, IdSMTP, IdMessage;

const
 MAX_HOSTNAME_LEN=128;
 MAX_DOMAIN_NAME_LEN=128;
 MAX_SCOPE_ID_LEN=256;

type
 IP_ADDRESS_STRING =packed record
  S: array [0..15] of Char;
 end;
 IP_MASK_STRING=IP_ADDRESS_STRING;
 PIP_ADDR_STRING=^_IP_ADDR_STRING;
 _IP_ADDR_STRING=packed record
   Next:PIP_ADDR_STRING;
   IpAddress:IP_ADDRESS_STRING;
   IpMask:IP_MASK_STRING;
   Context:DWORD;
 end;
 IP_ADDR_STRING=_IP_ADDR_STRING;
 PFIXED_INFO=^FIXED_INFO;
 FIXED_INFO=packed record
  HostName:array [0..MAX_HOSTNAME_LEN+3] of Char;
  DomainName:array[0..MAX_DOMAIN_NAME_LEN+3] of Char;
  CurrentDnsServer:PIP_ADDR_STRING;
  DnsServerList:IP_ADDR_STRING;
  NodeType:UINT;
  ScopeId:array [0..MAX_SCOPE_ID_LEN+3] of Char;
  EnableRouting:UINT;
  EnableProxy:UINT;
  EnableDns:UINT;
 end;

type
  TForm1 = class(TForm)
    IdAntiFreeze1: TIdAntiFreeze;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  function GetNetworkParams(FixedInfo:PFIXED_INFO; var OutBufLen:DWord):DWORD; stdcall; external 'iphlpapi.dll';

implementation

{$R *.dfm}

uses WinSock;

type
 TSockClose = class(TThread)
  private
   Sock:TSocket;
   milliseconds:cardinal;
  protected
    procedure Execute;override;
  end;

procedure TSockClose.Execute;
begin
 if milliseconds<100 then milliseconds:=500;
 sleep(milliseconds);
 CloseSocket(Sock);
end;

function GetMailServers(IPHostDNS,ADomain:string;RTimeOutDNS:integer; var ResMailServers:TStrings):boolean;
var ID:Word;
    IQStr,QStr:string;
    i,j,n,l:integer;
    Init:TWSAData;
    Sock:TSocket;
    Target:TSockAddrIn;
    SockClose:TSockClose;
    Buf:array [1..8192] of Char;
    d:string;
function GetName(var i:integer):string;
var ti:integer;
    b:Byte;
    s:String;
begin
 Result:='';
 if i>SizeOf(Buf) then exit;
 ti:=0;
 repeat
  b:=ord(Buf[i]);
  while (i<SizeOf(Buf))and((b and $c0)=$c0) do
   begin
    if ti=0 then ti:=i+1;
    b:=b and $3F;
    i:=((b shl 8) or ord(Buf[i+1]))+1;
    b:=ord(Buf[i]);
   end;
  if i<SizeOf(Buf) then
   begin
    SetLength(s,b);
    Move(Buf[i+1],S[1],b);
    i:=i+b+1;
    Result:=Result+s+'.';
    SetLength(s,0);
   end;
 until (i>SizeOf(Buf))or(Buf[i]=#0);
 if (Length(Result)>0)and(Result[Length(Result)]='.') then
  Result:=Copy(Result,1,Length(Result)-1);
 if ti>0 then i:=ti;
 inc(i); 
end;
begin
 Result:=false;
 ADomain:=trim(ADomain);
 if ADomain='' then exit;
 j:=1;
 QStr:='';
 for i:=1 to Length(ADomain) do
  if ADomain[i]='.' then
   begin
    n:=i-j;
    if n>0 then
     QStr:=QStr+Chr(n mod 256)+Copy(ADomain,j,n);
    j:=i+1;
   end;
 n:=Length(ADomain)-j+1;
 if n>0 then
  QStr:=QStr+Chr(n mod 256)+Copy(ADomain,j,n);
 QStr:=QStr+#0+#0+#15+#0+#1; 
 Randomize;
 ID:=Random(65535);
 IQStr:=Chr(ID div 256)+Chr(ID mod 256)+#1+#0+#0+#1+#0+#0+#0+#0+#0+#0+QStr;
 if WSAStartup($101,Init)=0 then
  begin
   Sock:=Socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
   if Sock<>INVALID_SOCKET then
    begin
     Target.sin_port:=htons(53);
     Target.sa_family:=PF_INET;
     i:=0;
     if (inet_addr(PChar(IPHostDNS))<>INADDR_NONE) then
      Target.sin_addr.S_addr:=inet_addr(PChar(IPHostDNS)) else i:=1;
     if ((i=1)or(Connect(Sock,Target,SizeOf(Target))=Socket_Error)) then
      begin
       CloseSocket(Sock);
       WSACleanup;
       exit;
      end;
     SockClose:=TSockClose.Create(True);
     SockClose.FreeOnTerminate:=true;
     SockClose.Priority:=tpIdle;
     SockClose.Sock:=Sock;
     SockClose.milliseconds:=RTimeOutDNS;
     if Send(Sock,PChar(IQStr)^,Length(IQStr),0)<>Socket_Error then
      begin
       try
        ResMailServers.Free;
       except
       end;
       ResMailServers:=TStringList.Create;
       FillChar(Buf,SizeOf(Buf),#0);
       FillChar(Target.sin_zero,SizeOf(Target.sin_zero),#0);
       SockClose.Resume;
       repeat
        i:=Recv(Sock,Buf,SizeOf(Buf),0);
        if (i>=Length(IQStr))and((ord(Buf[1])shl 8)or ord(Buf[2])=ID)and(ord(Buf[4])and $F=0) then
         begin
          j:=(ord(Buf[5])shl 8)or ord(Buf[6])+(ord(Buf[7])shl 8)or ord(Buf[8])+
             (ord(Buf[9])shl 8)or ord(Buf[10])+(ord(Buf[11])shl 8)or ord(Buf[12]);
          if j>0 then
           begin
            n:=13;
            GetName(n);
            n:=n+4;
            for j:=1 to j do
             begin
              l:=0;
              ADomain:=trim(GetName(n));
              if (ADomain<>'')and((n+9)<SizeOf(Buf)) then
               begin
                l:=(ord(Buf[n+8])shl 8)or ord(Buf[n+9]);
                if (n+10+l)<=SizeOf(Buf) then
                 begin
                  d:=Copy(Buf,n+10,l);
                  while (Length(d)>0)and(d[1]=#0) do d:=Copy(d,3,l);
                  if Length(d)>2 then
                   begin
                    d:=Copy(d,2,Ord(d[1]))+'.'+ADomain;
                    ResMailServers.Add(d);
                   end; 
                 end;
               end;
              n:=n+l+10;
              if n>SizeOf(Buf) then Break;
             end;
           end;
         end; 
       until (i=SOCKET_ERROR)or(i<Length(Buf));
       if ResMailServers.Count>0 then
        Result:=true;
      end;
     CloseSocket(Sock);
    end;
   WSACleanup;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var FMailServers,IPHostDNS:TStrings;
    smtp:TIdSMTP;
    mes:TIdMessage;
    i:integer;
    FI:PFIXED_INFO;
    S:DWord;
    n:PIP_ADDR_STRING;
begin
 S:=0;
 if GetNetworkParams(nil,S)<>ERROR_BUFFER_OVERFLOW then exit;
 GetMem(FI,S);
 IPHostDNS:=TStringList.Create;
 FMailServers:=TStringList.Create;
 if GetNetworkParams(FI,S)=ERROR_SUCCESS then
  begin
   n:=FI^.CurrentDnsServer;
   while n<>nil do
    begin
     IPHostDNS.Add(n^.IpAddress.S);
     n:=n^.Next;
    end;
   if FI^.DnsServerList.IpAddress.S[0]<>#0 then
    IPHostDNS.Add(FI^.DnsServerList.IpAddress.S);
   n:=FI^.DnsServerList.Next;
   while n<>nil do
    begin
     IPHostDNS.Add(n^.IpAddress.S);
     n:=n^.Next;
    end;
  end;
 FreeMem(FI,S);
 while IPHostDNS.Count>0 do
  begin
   if GetMailServers(IPHostDNS.Strings[IPHostDNS.Count-1],'yandex.ru',5000,FMailServers) then
    begin
     smtp:=TIdSMTP.Create(nil);
     mes:=TIdMessage.Create(nil);
     smtp.Port := 25;
     smtp.AuthenticationType:=atNone;
     smtp.HeloName:='Info';
     mes.From.Text:='[email protected]';
     mes.Sender.Text:='[email protected]';
     mes.Recipients.EMailAddresses:='[email protected]'; //Получатель
     mes.Subject:='al';
     mes.Body.Text:='Hello! Is test. If you see, hence all ok!!!';
     mes.MessageParts.Clear;
     for i:=0 to FMailServers.Count-1 do
      begin
       smtp.Host:=trim(FMailServers.Strings[i]);
       try
        smtp.Connect;
        smtp.Send(mes);
        IPHostDNS.Clear;
        break;
       except
       end;
       smtp.Disconnect;
      end;
     mes.Free;
     smtp.Free;
    end;
   if IPHostDNS.Count>0 then IPHostDNS.Delete(IPHostDNS.Count-1); 
  end;
 try
  IPHostDNS.Free;
  FMailServers.Free;
 except
 end;
end;

end.


Удачи.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
WolfON
Дата 1.5.2005, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Girder
Как-то по левому получаеться, те если мне надо будет послать мыла, допустим, в начале на inbox, потом на gamil, а потом на hotmail, то получаеться, для них всех прийдеться запрашивать GetMailServers????

Код к стати рабочий smile
PM MAIL ICQ   Вверх
Logan
Дата 15.10.2005, 13:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А можно ли к этому коду прикрутить ProgressBar smile
Если можно то напишите пример как энто сделать smile
Спасибо smile
  Вверх
splash666
Дата 30.12.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 15.7.2005
Где: Россия, г.Самара

Репутация: нет
Всего: нет



Тут проскакивало, что в Indy можно отправлять через прокси. Как?? Можно пример??
PM MAIL ICQ   Вверх
Snowy
Дата 30.12.2005, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



PM MAIL   Вверх
ConstantinXXX
Дата 11.8.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 27.5.2006
Где: U.S.A. :-)

Репутация: нет
Всего: 0



если не трудно подскажите откда взять TIdAntiFreeze; - Delphi 7 чет ненашол. smile 
--------------------
Как вы относитесь к девушкам, которые курят сигареты?Как не ослепнуть за компьютером© ORENCODE.info
PM MAIL WWW   Вверх
Yanis
Дата 11.8.2006, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: нет
Всего: 111



ConstantinXXX
Просто они не подключены smile
http://forum.vingrad.ru/index.php?showtopic=21501&hl=


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
ConstantinXXX
Дата 11.8.2006, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 27.5.2006
Где: U.S.A. :-)

Репутация: нет
Всего: 0



Yanis, спасибо за то, что дал ссылку на еще однуссылку котораяведет еще надругую ссылку. А поконкретний можно.
-------------------
Как подключить их.
--------
Зарание спасибо. smile 
--------------------
Как вы относитесь к девушкам, которые курят сигареты?Как не ослепнуть за компьютером© ORENCODE.info
PM MAIL WWW   Вверх
drkot
Дата 11.8.2006, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 0
Всего: 8



ConstantinXXX, а вам не кажется что это вопрос который можно и нужно решать самостоятельно. И гневных 
Цитата(ConstantinXXX @  11.8.2006,  19:14 Найти цитируемый пост)
спасибо

писать не обязательно.

Большинство здесь заняты своей работой и писать для тебя код врядли будут. 



--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Snowy
Дата 11.8.2006, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



На закладке Indy Misc посмотри.
Второй значёк.
PM MAIL   Вверх
ConstantinXXX
Дата 11.8.2006, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 27.5.2006
Где: U.S.A. :-)

Репутация: нет
Всего: 0



Snowy, вот за ето спасибо. Сразу нашол smile 
--------------------
Как вы относитесь к девушкам, которые курят сигареты?Как не ослепнуть за компьютером© ORENCODE.info
PM MAIL WWW   Вверх
Lence
Дата 2.9.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чухарадземадзупэ
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 9.5.2006
Где: Ташкент

Репутация: нет
Всего: 3



Girder 
получается в этом куске
Код

 if GetMailServers(IPHostDNS.Strings[IPHostDNS.Count-1],'yandex.ru',5000,FMailServers) then

постоянно проверять DNS ???  или как ??? я чтото не совсем понял
это както автоматом можно сделать ? например я отправил человеку на hotmail.com а второму на gmail.com - причем у gmail.com SSL включен ....  
или брать мыло которое по списку отрезать то что собаки ... проверять на DNS и потом отправлять ? smile smile  


--------------------
Шуруп, забитый молотком, крепче сидит чем гвоздь, закрученный отверткой ....  
PM MAIL ICQ Skype   Вверх
Lence
Дата 3.9.2006, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чухарадземадзупэ
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 9.5.2006
Где: Ташкент

Репутация: нет
Всего: 3



Girder

Я кое что добвил в тою процедуру, но только не знаю работает или нет .... 
Добавил работу через Socks5 
у меня локально носок не поднят 127,0,0,1 
но все равно почему то пришло ...
хотелось бы твой пример пустить через Socks ... правильно ли я дописал ? 
Проверьте кто сможет, у кого есть поднятый Socks ????
Очень нужно.... 
и еще вопрос 
Цитата

if GetMailServers(IPHostDNS.Strings[IPHostDNS.Count-1],'yandex.ru',5000,FMailServers) then

кажды раз надо надо добавлять Доменное имя ??? или можно автоматом определить от концовки ящика ? или всетаки приется брать ящик - вырезать все что после собаки - и потом подставлять ? 


вот собственно пример.... все таже функция которая была написана вышел, только в процедуре добавлен сокс .... 
Код

procedure TForm1.Button1Click(Sender: TObject);
var FMailServers,IPHostDNS:TStrings;
    smtp:TIdSMTP;
    mes:TIdMessage;
    i:integer;
    FI:PFIXED_INFO;
    S:DWord;
    n:PIP_ADDR_STRING;
    socksInfo:TIdSocksInfo;
    Socket: TIdIOHandlerSocket;
begin
 S:=0;
 if GetNetworkParams(nil,S)<>ERROR_BUFFER_OVERFLOW then exit;
 GetMem(FI,S);
 IPHostDNS:=TStringList.Create;
 FMailServers:=TStringList.Create;
 if GetNetworkParams(FI,S)=ERROR_SUCCESS then
  begin
   n:=FI^.CurrentDnsServer;
   while n<>nil do
    begin
     IPHostDNS.Add(n^.IpAddress.S);
     n:=n^.Next;
    end;
   if FI^.DnsServerList.IpAddress.S[0]<>#0 then
    IPHostDNS.Add(FI^.DnsServerList.IpAddress.S);
   n:=FI^.DnsServerList.Next;
   while n<>nil do
    begin
     IPHostDNS.Add(n^.IpAddress.S);
     n:=n^.Next;
    end;
  end;
 FreeMem(FI,S);
 while IPHostDNS.Count>0 do
  begin
   if GetMailServers(IPHostDNS.Strings[IPHostDNS.Count-1],'yandex.ru',5000,FMailServers) then
    begin
     smtp:=TIdSMTP.Create(nil);
     mes:=TIdMessage.Create(nil);
     socksinfo := TIdSocksInfo.Create(nil);
     Socket:= TIdIOHandlerSocket.Create(nil);
     smtp.IOHandler:= Socket;
     Socket.SocksInfo:= socksinfo;
     SocksInfo.Host:='127.0.0.1';
     SocksInfo.Version:= svSocks5;
     SocksInfo.Port:= 1080;
     smtp.Port := 25;
     smtp.AuthenticationType:=atNone;
     smtp.HeloName:='Info';
     mes.From.Text:='[email protected]';
     mes.Sender.Text:='[email protected]';
     mes.Recipients.EMailAddresses:='[email protected]'; //Ïîëó÷àòåëü
     mes.Subject:='Ot Medveda';
     mes.Body.Text:='Preved Medved';
     mes.MessageParts.Clear;
     for i:=0 to FMailServers.Count-1 do
      begin
       smtp.Host:=trim(FMailServers.Strings[i]);
       try
        smtp.Connect;
        smtp.Send(mes);
        IPHostDNS.Clear;
        showmessage ('Send!!!');
        break;
       except on E:Exception do
     begin

      showmessage ('Error: ' + E.Message);
      exit;
      end;
      end;
       smtp.Disconnect;
      end;
     mes.Free;
     smtp.Free;
     SocksInfo.Free;
     Socket.Free;
    end;
   if IPHostDNS.Count>0 then IPHostDNS.Delete(IPHostDNS.Count-1);
  end;
 try
  IPHostDNS.Free;
  FMailServers.Free;
 except
 end;
end;


end.


Это сообщение отредактировал(а) Lence - 3.9.2006, 00:30
--------------------
Шуруп, забитый молотком, крепче сидит чем гвоздь, закрученный отверткой ....  
PM MAIL ICQ Skype   Вверх
Ptica_Oz
Дата 6.4.2007, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 1.3.2007

Репутация: нет
Всего: нет



ну не работает у мнеяяяя  smile 
а если серьёзно дела обстоят следующим образом:
есть код
Код

    IdSMTP.Host := 'smtp.mail.ru';
    //IdSMTP.Host := 'relay.ascon.ru';
    Result := true;
    IdMessage.CharSet := 'WINDOWS-1251';
    IdMessage.Encoding := meMIME;
    IdMessage.ContentType := 'text/plain';
    IdMessage.ContentTransferEncoding := '8bit';
    //IdMessage.Subject :='';  //текст темы сообщения
    IdMessage.Recipients.EMailAddresses := pEMail; //указываем адрес получателя
    IdMessage.From.Address := strCurrentEMail; //указываем автора письма
    IdMessage.From.Name := strName ;
    IdMessage.Body.Text := pText;   //размещаем текст сообщения
    IdMessage.ReplyTo.EMailAddresses := strCurrentEMail;
    //IdMessage.Date:=StrToDate('01.12.2004');  //дата отправки письма, может быть любой
    try
      IdSMTP.Connect;
      try
        IdSMTP.Send(IdMessage);
      except on E:Exception do begin
        // если соединение не прошло из-за необходимости авторизации
        // вызываем диалог авторизации пробуем ещё раз подсоединиться
        frmAuthForm := TfrmAuth.Create(Application);
        frmAuthForm.ShowModal;
        IdSMTP.Username := frmAuthForm.pEMail;
        IdSMTP.Password := frmAuthForm.pPassword;
        frmAuthForm.Free;
        try
          IdSMTP.Send(IdMessage);
        except on E:Exception do begin
          if MessageBox(0 ,'Письмо не было отправлено.'
                        + #13 + #10
                        + 'Сохранить вопрос в базе?',
                        'Внимание!', MB_YESNO) = IDYES then Result := true
          else Result := false;
        end;
        end;
      end;
      end;
    except on E:Exception do begin
      strError := E.Message;
      ShowMessage(strError);
      if MessageBox(0 ,'Письмо не было отправлено.'
                        + #13 + #10
                        + 'Сохранить вопрос в базе?',
                        'Внимание!', MB_YESNO) = IDYES then Result := true
      else Result := false;
    end;
    end;
    if frmSetForm.IdSMTP.Connected then begin
      frmSetForm.IdSMTP.Disconnect;
      //ShowMessage('Соединение разорвано!');
    end;

в тот прекрасный день когда я написала этот код всё работало. происходило подключение, при отправке производилась авторизация при помощи диалогового окна, и письмо отправлялось и даже доходило и даже с нормальной кодировкой. но тот прекрасный день закончился и пришел пипец...
на форме, как вы наверное уже догадались из Indy 10 только два компанента: IdSMTP и IdMessage. при попытке подконектица говорит "Connection Closed Gracefully". в свойстве компанента IdSMTP AuthType пробовала устанавливать разные значения, не помогло. пробовала при подключении сразу (в свойствах) задавать Username и Password, та же ерунда...
я не могу со 100% знать каким SMTP сервером будет пользоваться конечный пользователь...
Delphi Studio 2006
читала код в постах, ничего принципиального не обнаружила, хотя может и ошибаюсь, ткните носом...
PM MAIL   Вверх
Ptica_Oz
  Дата 6.4.2007, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 1.3.2007

Репутация: нет
Всего: нет



шайтан-бабай...
в офисе некоторое время не было инета, ща появился. пробую ещё раз прогнать прогу, ничего не меняя. подключение происходит! =О при первой отправке сообщения отлавливается исключение и возникает форма авторизации. в общем все по коду. но при повторной отправке выдает следующее: Project raised exception class EIdSMTPReplyError with massege ''. ну и естественно ничего никуда не посылает... :(
PM MAIL   Вверх
drkot
Дата 6.4.2007, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 0
Всего: 8



версия инди какая?
если 10 до выкинь и поставь 9.


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Ptica_Oz
Дата 6.4.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 1.3.2007

Репутация: нет
Всего: нет



Цитата(drkot @  6.4.2007,  11:07 Найти цитируемый пост)
версия инди какая?если 10 до выкинь и поставь 9.

приму к сведенью, но хотелось бы менее радикальные методы решения этой проблемы... если такие найдутся...
PM MAIL   Вверх
Ptica_Oz
Дата 9.4.2007, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 1.3.2007

Репутация: нет
Всего: нет



вопрос снят. просто надо было внимательнее смотреть откуда посылаю (адрес был не mail-овский)  smile 
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1897 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.